From 5821fdf523d002eb27abfa6a445bda5718733a4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Wo=C5=BAniak?= Date: Tue, 5 Jan 2021 17:25:44 +0100 Subject: [PATCH] Added MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Marcin Woźniak --- module.rb | 103 +++++++++++++++++++++++++++++------------------------- 1 file changed, 56 insertions(+), 47 deletions(-) diff --git a/module.rb b/module.rb index bad8dd3..657cae3 100755 --- a/module.rb +++ b/module.rb @@ -418,26 +418,6 @@ end #### MODULE 3 #### -################################################################################# -# Funkcja wielokrotnoscPunktu(a,b,p,n,x,y) -# -# Oblicza wielokrotność punktów np. -# 2n = n + n -################################################################################# -def wielokrotnoscPunktu(a,b,p,n,x,y) - punktQ = [x,y] - punktR = ["e","e"] - - while n > 0 - if n % 2 == 1 - punktR = sumaPunktow(a,b,p,punktR[0],punktR[1],punktQ[0],punktQ[1]) - n = n - 1 - end - punktQ = sumaPunktow(a,b,p,punktQ[0],punktQ[1],punktQ[0],punktQ[1]) - n = n / 2 - end - return punktR -end ################################################################################# # Funkcje mysqrt(n) @@ -469,6 +449,7 @@ def liczenieOrd(p) end ################################################################################# +# Zadanie 1 # Funkcja generowanieKluczyElGamalKrzywaEliptyczna(k) # # Generatoruje klucz publiczny @@ -501,10 +482,34 @@ def generowanieKluczyElGamalKrzywaEliptyczna(k) end ################################################################################# +# Zadanie 2 +# Funkcja wielokrotnoscPunktu(a,b,p,n,x,y) +# +# Oblicza wielokrotność punktów np. +# 2n = n + n +################################################################################# +def wielokrotnoscPunktu(a,b,p,n,x,y) + punktQ = [x,y] + punktR = ["e","e"] + + while n > 0 + if n % 2 == 1 + punktR = sumaPunktow(a,b,p,punktR[0],punktR[1],punktQ[0],punktQ[1]) + n = n - 1 + end + punktQ = sumaPunktow(a,b,p,punktQ[0],punktQ[1],punktQ[0],punktQ[1]) + n = n / 2 + end + return punktR +end + +################################################################################# +# Zadanie 3 # Funkcja algorytmKodowania(a,b,p,m,n,u) # ################################################################################# -def algorytmKodowania(a,b,p,m,n,u) +def algorytmKodowania(a,b,p,m,u) + n = m + SecureRandom.random_number(0..1000000) if (m < n) && (p > n*u) for i in 1..u x = (m * u % p) + (i % p) @@ -521,6 +526,36 @@ def algorytmKodowania(a,b,p,m,n,u) end ################################################################################# +# Zadanie 4 +# Funkcja szyfrowanieElGamala(a,b,p,m,u,px,py,qx,qy) +# +# Zwraca szyfrogramy. +################################################################################# +def szyfrowanieElGamala(a,b,p,u,px,py,qx,qy,pmx,pmy) + y = SecureRandom.random_number(0..liczenieOrd(p)) + puts "y = #{y}" + c1 = wielokrotnoscPunktu(a,b,p,y,px,py) + yq = wielokrotnoscPunktu(a,b,p,y,qx,qy) + c2 = sumaPunktow(a,b,p,pmx,pmy,yq[0],yq[1]) + puts "Ciphers: C1=#{c1}, C2=#{c2}" + return c1,c2 +end + +################################################################################# +# Zadanie 5 +# Funkcja deKodowanieElGamala(a,b,p,c1x,c1y,c2x,c2y,x) +# +# Zwraca odszyfrowany punkt początkowy na którym była wiadomość. +################################################################################# +def deKododwanieElGamala(a,b,p,c1x,c1y,c2x,c2y,x) + xc1 = wielokrotnoscPunktu(a,b,p,x,c1x,c1y) + pmd = sumaPunktow(a,b,p,c2x,c2y,xc1[0],-xc1[1]) + #puts "-------------------DEBUG MODE-------------------\na = #{a}\nb = #{b}\np = #{p}\nc1x = #{c1x} \nc1y = #{c1y} \nc2x = #{c2x} \nc2y = #{c2y} \nx = #{x}\nXC1 = #{xc1.inspect}\npm = #{pmd.inspect}\n-------------------" + return pmd +end + +################################################################################# +# Zadanie 6 # Funkcja algorytmDeSzyfrowania(x,y,u) # # Zwraca odszyfrowaną wiadomość. @@ -529,29 +564,3 @@ def algorytmDeSzyfrowania(x,y,u) m = (x - 1) / u return m end - -################################################################################# -# Funkcja szyfrowanieElGamala(a,b,p,m,n,u,px,py,qx,qy) -# -# Zwraca szyfrogramy. -################################################################################# -def szyfrowanieElGamala(a,b,p,m,n,u,px,py,qx,qy) - pm = algorytmKodowania(a,b,p,m,n,u) - y = SecureRandom.random_number(0..liczenieOrd(p)) - c1 = wielokrotnoscPunktu(a,b,p,y,px,py) - yq = wielokrotnoscPunktu(a,b,p,y,qx,qy) - c2 = sumaPunktow(a,b,p,pm[0],pm[1],yq[0],yq[1]) - puts "Ciphers: C1=#{c1}, C2=#{c2}" - return c1,c2 -end - -################################################################################# -# Funkcja deKodowanieElGamala(a,b,p,c1x,c1y,c2x,c2y,x) -# -# Zwraca odszyfrowany punkt początkowy na którym była wiadomość. -################################################################################# -def deKododwanieElGamala(a,b,p,c1x,c1y,c2x,c2y,x) - xc1 = wielokrotnoscPunktu(a,b,p,x,c1x,c1y) - pmd = sumaPunktow(a,b,p,c2x,c2y,xc1[0],-xc1[1]) - return pmd -end