Skip to content
Snippets Groups Projects
Commit 80f73950 authored by Maximilian Stauss's avatar Maximilian Stauss
Browse files

Quellcode aufräumen

parent 34136ed4
Branches
No related tags found
No related merge requests found
......@@ -3,6 +3,9 @@
from __future__ import absolute_import, print_function
from sage.all import *
from sys import exit
from .helpers.sage_extensions import random_value, random_invertible_matrix
from .helpers.AffineTransformation import AffineTransformation
from .helpers.PrivateKey import PrivateKey
......@@ -36,20 +39,23 @@ class MatsumotoImaiA(EncryptionScheme):
ring = PolynomialRing(k, 'x')
(x,) = ring.gens()
gx = ring.irreducible_element(n)
q = len(k)
# alle Kandidaten für theta werden gesucht
thetas = []
qn = q**n - 1
for theta in xrange(1, n - 1):
for theta in xrange(1, n):
qd = q**theta + 1
(common_divider, t, _) = xgcd(qd, qn)
if common_divider == 1:
if common_divider == 1 and t > 0:
thetas.append((theta, t))
# ein zufälliges Theta wird ausgewählt
print(len(thetas))
if len(thetas) < 1:
exit('Kein theta gefunden')
(self.theta, self.theta_invers) = thetas[int(random() * len(thetas))]
S = AffineTransformation(
......@@ -58,8 +64,7 @@ class MatsumotoImaiA(EncryptionScheme):
random_invertible_matrix(k, n), random_vector(k, n))
# der Erweiterungskörper wird gebaut
gx = ring.irreducible_element(n)
multivariate_ring = PolynomialRing(k, n)
multivariate_ring = PolynomialRing(k, 'x', n)
extension_field = PolynomialRing(
multivariate_ring, 't').quotient_ring(gx, 'T')
self.extension_field = extension_field
......@@ -67,7 +72,7 @@ class MatsumotoImaiA(EncryptionScheme):
Sx = list(S(vector(multi_vars)))
pre_F = self.phi_invers(Sx)
pre_F = self.phi_inv(Sx)
# F(X)
post_F = pre_F * pre_F**(4**theta)
......@@ -80,5 +85,4 @@ class MatsumotoImaiA(EncryptionScheme):
def invert_MQ(self, msg):
X = self.phi_inv(list(msg))
X = X**self.theta_invers
return vector(self.phi(X))
return vector(self.phi(X**self.theta_invers))
......@@ -3,7 +3,6 @@
from __future__ import absolute_import, print_function
from sage.all import *
import copy as cp
from .helpers.sage_extensions import random_value, random_invertible_matrix
......
File deleted
from __future__ import absolute_import, division, print_function
from sys import exit
from sage.all import *
from classes.helpers.AffineTransformation import *
k = GF(4, 'a') # hat modulus x^2 + x + 1
(a,) = k.gens()
n = 3
ring = PolynomialRing(k, 'x')
(x,) = ring.gens()
gx = x**3 + x + 1
K = ring.quotient_ring(gx, 'X')
q = len(k)
thetas = []
qn = q**n - 1
print("qn =", qn)
for theta in xrange(1, n):
qd = q**theta + 1
print("qd =", qd)
(common_divider, t, _) = xgcd(qd, qn)
if common_divider == 1:
thetas.append((theta, t))
thetas
#!/usr/bin/sage
# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function
from sage.all import *
from classes.MatsumotoImaiA import MatsumotoImaiA
n = 5 # bitte prim wählen
finite_field = GF(2**8, 'a')
"""TEST MIA"""
# Initialize simple MIA
MIA = MatsumotoImaiA(finite_field, n)
public_key = MIA.public_key
# use a random vector
msg = random_vector(finite_field, n)
print("msg =", msg)
# Nachricht verschlüsseln
enc = public_key.encrypt(msg)
print("public_key.encrypt(msg): enc =", enc)
# Verifizieren, dass enc auch entschlüsselt wird
print("MIA.decryt(enc):", MIA.decrypt(enc))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment