Open main menu
Posts
Gists
Guilds
Users
Decipher
Docs
Open user menu
Log in
Sign up
Create a new gist
Posts
Gists
Guilds
Users
Decipher
Docs
Files
grsa.src
grsa.src
//Imported <Bltings> Functions
factors = function(value)
Temp = []
for i in range(1, floor(sqrt(value)) + 1)
if value % i == 0 then Temp.push([i, floor(value / i)])
end for
Factors = []
for pair in Temp
for item in pair
Factors.push(item)
end for
end for
return Factors.set.sort
end function
factorsPrime = function(number)
Factors = [1]
while not isPrime(number)
number = floor(number / Factors[-1])
for i in factors(number)
if isPrime(i) then
Factors.push(i)
break
end if
end for
end while
return Factors[1:]
end function
isPrime = function(number)
if number == 1 then return false
return factors(number).len == 2
end function
list.set = function
Values = []
for i in self
if Values.indexOf(i) == null then Values.push(i)
end for
return Values
end function
//Extra Functions
nmod = function(a, b)
if a >= 0 then return a % b
while a < 0
a = a + b
end while
return a
end function
expmod = function(a, b, m)
r = 1
while b > 0
if b % 2 == 1 then r = (r * a) % m
b = floor(b / 2)
a = a ^ 2 % m
end while
return r
end function
modinv = function(a, b)
x = 0; y = 1; u = 1; v = 0; c = b
while a != 0
q = floor(c / a)
r = nmod(c, a)
m = x - u * q
n = y - v * q
c = a; a = r; x = u; y = v; u = m; v = n
end while
if c != 1 then return null else return nmod(x, b)
end function
//Key Pair Generation
genKeyPair = function(primeLength)
minimum = "1" * primeLength
maximum = "9" * primeLength
Primes = []
for i in range(minimum.to_int, maximum.to_int)
if isPrime(i) then Primes.push(i)
end for
pair = []
for i in range(2)
x = rnd * (Primes.len - 1)
pair.push(Primes[x])
Primes.remove(x)
end for
n = pair[0] * pair[1]; c = (pair[0] - 1) * (pair[1] - 1)
excludes = factorsPrime(n) + factorsPrime(c)
excludes = excludes.set
includes = []
for i in range(2, c - 1)
if excludes.indexOf(i) == null and isPrime(i) then includes.push(i)
end for
e = includes[rnd * (includes.len - 1)]
return [[e, n], [modinv(e, c), n]]
end function
//Encrypt & Decrypt Functions
encrypt = function(text, publickey)
nums = []
for i in range(0, text.len - 1)
nums.push(expmod(text[i].code, publickey[0], publickey[1]))
end for
return nums
end function
decrypt = function(nums, privatekey)
chrs = []
for i in range(0, nums.len - 1)
chrs.push(char(expmod(nums[i], privatekey[0], privatekey[1])))
end for
return chrs.join("")
end function
numstochars = function(nums)
chars = []
for i in nums
chars.push(char(i))
end for
return chars.join("")
end function
charstonums = function(chars)
nums = []
for i in chars
nums.push(i.code)
end for
return nums
end function
//Full Encyrpt & Decrypt Functions
fullencrypt = function(text, publickey)
return numstochars(encrypt(text, publickey))
end function
fulldecrypt = function(text, privatekey)
return decrypt(charstonums(text), privatekey)
end function