First commit

This commit is contained in:
2026-01-11 09:19:22 +01:00
commit 50f7b1159e
108 changed files with 11791 additions and 0 deletions
+64
View File
@@ -0,0 +1,64 @@
#!/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, log2
"""
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):
index = 1
for g in range(2, p):
z = list()
for entry in range(1, p):
res = operation(g, index, p)
#if res not in z:
z.append(res)
index = index + 1
print(f"{g}: {sorted(z)}")
def generateGroupByG(gr, p, g):
index = 1
z = list()
for entry in range(1, p):
res = operation(g, index, p)
#if res not in z:
z.append(res)
index = index + 1
return z
def computePublicKey(key, p, g):
return (g ** key) % p
gr = list()
# Public value
p = 5
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
cyclic = Cyclic(gr, p, operation)
generators = cyclic.getGenerators()
print(f"All generators: {generators}")
# Generate group with g = 2
grWithG = generateGroupByG(gr, p, 2)
print(f"Group generated with g = 2: {grWithG}")
for a in grWithG:
# print(f"log2({a}) = {log(a, 2)}") # Same as below
print(f"log2({a}) = {log2(a)}")
print()
for a in range(1, len(grWithG) + 1):
print(f"log2({a}) = {log2(a)}")