First commit
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env python3
|
||||
from Cryptotools.Groups.cyclic import Cyclic
|
||||
from Cryptotools.Numbers.primeNumber import getPrimeNumber
|
||||
from random import randint, choice
|
||||
from math import log, log10
|
||||
|
||||
"""
|
||||
Here, we will try to understand why we need to have a generator when we encrypt data for Diffie-Hellman
|
||||
https://crypto.stackexchange.com/questions/25489/why-does-diffie-hellman-need-be-a-cyclic-group
|
||||
"""
|
||||
def operation(a, b, n):
|
||||
return (a ** b) % n
|
||||
|
||||
def getGenerator(gr, p):
|
||||
cyclic = Cyclic(gr, p, operation)
|
||||
generators = cyclic.getGenerators()
|
||||
print(f"All generators: {generators}")
|
||||
cyclic.identity()
|
||||
print(f"Identity: {cyclic.getIdentity()}")
|
||||
|
||||
return generators
|
||||
|
||||
|
||||
gr = list()
|
||||
# Public value
|
||||
p = 13
|
||||
g = 0
|
||||
for i in range(1, p):
|
||||
gr.append(i)
|
||||
|
||||
print(f"p = {p}")
|
||||
print(f"G = {gr}")
|
||||
# We try with a generator which is not in list
|
||||
generators = getGenerator(gr, p)
|
||||
|
||||
g = 3 # In the group
|
||||
#g = # Not in the group
|
||||
#print(f"g = {g}")
|
||||
|
||||
|
||||
|
||||
# Try to compute the cyclic subgroup
|
||||
for G in range(p + 1):
|
||||
res = 0
|
||||
for a in range(G):
|
||||
r = operation(G, a, p)
|
||||
res = res + r
|
||||
if res == p:
|
||||
print(f"G = {G}; res = {res}")
|
||||
Reference in New Issue
Block a user