KRzA/5-rsa/elgamal.rb

72 lines
1.4 KiB
Ruby
Executable File

#!/usr/bin/ruby
######################################
#
# Marcin Woźniak
# s434812
#
#####################################
load 'modul1.rb'
def generator(p,q)
while true
g = SecureRandom.random_number(2..p-2)
if betterExponentiation(g,q,p) == 1
next
else
return g
end
end
end
def specyficPrimaryNumber
while true do
q = generate(512)
p = generate(1024) #2 * q + 1
puts q
puts p
if primalityTest(q) && primalityTest(p)
return p,q
end
end
end
def codeElGamal(b, g, p, m)
while true
k = SecureRandom.random_number(2..p - 2)
if nwd(k ,p - 1) == 1
break
end
c1 = betterExponentiation(g, k, p)
c2 = (m * betterExponentiation(b, k, p)) % p
return c1, c2
end
end
def decodeElGamal(a, p, c1, c2)
temp = betterExponentiation(c1, a, p)
inverse = betterExponentiation(temp, p - 2, p)
return (c2*inverse) % p
end
starting = Process.clock_gettime(Process::CLOCK_MONOTONIC)
p = generate(2048)
a = SecureRandom.random_number(1..p - 2).to_i
g = SecureRandom.random_number(2..p - 1).to_i
b = betterExponentiation(g, a, p).to_i
m = 289028190829082081290821
code = codeElGamal(b, g, p, m)
c1,c2 = code
puts code.inspect
decode = decodeElGamal(a, p, c1, c2)
puts decode.inspect
ending = Process.clock_gettime(Process::CLOCK_MONOTONIC)
elapsed = ending - starting
puts "Time " + elapsed.inspect