First commit
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
from Cryptotools.Groups.cyclic import Cyclic
|
||||
from Cryptotools.Utils.utils import gcd
|
||||
from Cryptotools.Numbers.primeNumber import isPrimeNumber
|
||||
from random import choice
|
||||
|
||||
|
||||
def operation(a, b, n):
|
||||
return (a ** b) % n
|
||||
|
||||
def test1(n):
|
||||
"""
|
||||
We test with n is not prime but the order of the group is a prime number
|
||||
"""
|
||||
g = list()
|
||||
g2 = list()
|
||||
for i in range(1, n):
|
||||
#if gcd(i, n) == 1:
|
||||
g.append(i)
|
||||
|
||||
print(f"n = {n}")
|
||||
print(f"G = {g}")
|
||||
Gsorted = sorted(g)
|
||||
|
||||
cyclic = Cyclic(g, n, operation)
|
||||
order = len(g) # https://en.wikipedia.org/wiki/Order_(group_theory)
|
||||
print(f"len: {order}")
|
||||
print(f"prime: {isPrimeNumber(order)}")
|
||||
g2 = list()
|
||||
for i in range(1, order):
|
||||
if gcd(i, order) == 1:
|
||||
g2.append(i)
|
||||
pass
|
||||
|
||||
print(g2)
|
||||
# Pick a number in the previous list and check if we can generate all number with it
|
||||
item = choice(g2)
|
||||
print()
|
||||
|
||||
# if the order is prime, the group is cyclic ?
|
||||
|
||||
# Check if we have all items
|
||||
g3 = list()
|
||||
for i in range(1, n):
|
||||
res = operation(i, item, n)
|
||||
if gcd(res, item) == 1:
|
||||
g3.append(res)
|
||||
#print(res)
|
||||
pass
|
||||
|
||||
G2sorted = sorted(g2)
|
||||
G3sorted = sorted(g3)
|
||||
print()
|
||||
# print(f"{g} = {cyclic.generator(g)}")
|
||||
gen = cyclic.generator()
|
||||
|
||||
print(f"All generators: {cyclic.getGenerators()}")
|
||||
print(f"Is cyclic: {cyclic.isCyclic()}")
|
||||
|
||||
print()
|
||||
print(G2sorted)
|
||||
print(G3sorted)
|
||||
if G3sorted == Gsorted:
|
||||
print(f"Matching with item {item}") # Always match with item 1
|
||||
|
||||
# Check if the abelian group is respected
|
||||
print(f"It is an abelian group: {cyclic.closure()}\n")
|
||||
|
||||
|
||||
|
||||
test1(19)
|
||||
test1(12)
|
||||
Reference in New Issue
Block a user