From 80f7395004e05d5186fd9b8a0a662d74203d793d Mon Sep 17 00:00:00 2001
From: Maximilian Stauss <max.stauss@gmail.com>
Date: Wed, 6 Sep 2017 10:42:28 +0200
Subject: [PATCH] =?UTF-8?q?Quellcode=20aufr=C3=A4umen?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 classes/MatsumotoImaiA.py        |  20 ++++++++++++--------
 classes/MatsumotoImaiAExample.py |   1 -
 keys/bsp_uov_old.priv            | Bin 2023 -> 0 bytes
 test.py                          |  28 ----------------------------
 test_MIA.py                      |  27 +++++++++++++++++++++++++++
 5 files changed, 39 insertions(+), 37 deletions(-)
 delete mode 100644 keys/bsp_uov_old.priv
 delete mode 100644 test.py
 create mode 100644 test_MIA.py

diff --git a/classes/MatsumotoImaiA.py b/classes/MatsumotoImaiA.py
index d892841..d4baee3 100644
--- a/classes/MatsumotoImaiA.py
+++ b/classes/MatsumotoImaiA.py
@@ -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))
diff --git a/classes/MatsumotoImaiAExample.py b/classes/MatsumotoImaiAExample.py
index 228e825..9f3450c 100644
--- a/classes/MatsumotoImaiAExample.py
+++ b/classes/MatsumotoImaiAExample.py
@@ -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
 
diff --git a/keys/bsp_uov_old.priv b/keys/bsp_uov_old.priv
deleted file mode 100644
index b58b64b7dff26ab5dfef0d56e179a060c63bb4f9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2023
zcmZo*(nwCuNh~f-E!N9O%_&GND%NvMOUukl4Jk^@D^ANV%1tcE%+KS(Dp<&vU&vHj
z$gB~{Seaa$n4YSao1apelUl4-mYQ6WUlgC4pOP1!lA2eX%2k?IkeQsFlNw)U$W_Rq
z0a0FDQdF8;Qd*R%mzD_9P|1~^nwMIXnH&%0$HTO76|&;glarsHU0M*Io|B)Hn8Q`b
z7Ru#Tl$z=bc1j_8YfvGFH@i2hH)DGtr$z>=Mh06bw_9djW=X1BW@=7KAy;cqA$JBR
z)cB&zy!2wd%)FA+^wc7*+{EnEco?UUCzR2&HK>p`l(C|<kk2oa1?0a%{!pgs+6>+d
zo=`@^)}TUxj*>#b+LA({ph979=1#woLXp~%LeZc?vDiX!6id>;j)+IG5fo%xzWFI!
zg%ThGja!2XB|!|3y;2#%?Lmdo8DJTZRWcb6Az6qJNU<DLNIun@*_*YaB&bj!l+hOw
z+PR4(MVS?P5Xt}^BV2`wP-j78pb9`Pfks|@T26jq370QeKc;x062yE&Y?kI_7M7;Q
z7o`>yr52~=l|a%^X<kukN@;Q`SD`XQ1FC(+1&PV2P)mZr>_Qcd3}J6(Z|2TW*0h|=
zyplrIlG^q{wV*=v&e}qaQ0A1>l0r>{=e3}o*Dm&E><Hy#WMN@qU}9usYWL<U2`bbn
zO^Pklg?bed=mq&Xm3jHOnTa`ixurQJnehmL_?*n7;>^7C(wxL1cu>Xr2EcWoC@9o}
z_=s|2gEI5dQH|Em5DsOkFeo$#WvVbNGz?{`Fe)@^FEqwsV@YaJZhU@GN@@{TNNQ28
zKbTc$qS;tzT3cwQ5y~46^HzLuNl~GBC{s#7p+zW1e0geSdPYfcp`~9adpsm+3a$J?
zS>y8(b5jegLpf7Y(~DBea#AY_Z9@6ta}$#jOLGz{jljm(hO)Z{rIz`mRutNWiXg1W
z%`Zw#%E?d8E-tk9W(Z}E&q>WoFUcr$@MaF>iqB0<&rJmDcMRoJf|{;W=oHExAD@z+
z93Nlk93sTXz`*4KvN~0vD77rLs5n(2C$%CoIX}H9u^=NeSwREtFii!J?-jtl*W=>y
zNi9)Gh)GFJ*Qkg~)KsulNQ^gB&{jx{H&W16h)KyWDF*ZM5_A+wGE(!n5-Q>n6>JnL
z;*t^+GSd_i^HLP@^KvRdY$RiB6re^XX(lM-7opmKB$b$#!c~%yT9m4gT9H{?Qml|*
zs1TErs*njL^AZ$_OOrDcN-`2l6cQ5S^Av0qlH&7pAnwvpNQ|$})HbXIi-K7op-crk
zg{1h*1U;@omr(Y2Xu!H^mL|0a6}r_Hy5maSpmd#*nOp)X&|E`G3vyDq3O#BIJ-r#c
z8H>G{+ky(cAQ{P|HK@=Vnvr}mJZiymz8N59p`SN{Hxop)KSU(Jn-Qiz5TYMc3I##+
z2WNQH7KV5;!IXq%fJMSIK(>N}OTngxXZV!11r<hQ=w-Oo7Dj4-bVY%bK&*;}7z`@$
zVxR`cf|SHTjA8U<gcuVKHXUqY0>pKR2=^v|B@2_i;qFa=7;DrTRG11iHVtHKI>=!V
zn=>GqG9eZ*!7R$kNCUYyJ5?itF~2aUwlEh|17@&*YZs0TPEe`E1S<LSYD)_9g9-~`
z3kx+Mwi&br6&68lD@F*FK!r+Ey_q1zc3CK+Z-$~qhEj%d2Dlhx@@DGH0GEH|L4_5a
hwS|=#(4r3%FjY_ks=-Ac3nK#qBc#-;DNSnE0|4RgtZ)DT

diff --git a/test.py b/test.py
deleted file mode 100644
index 8d6db94..0000000
--- a/test.py
+++ /dev/null
@@ -1,28 +0,0 @@
-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
diff --git a/test_MIA.py b/test_MIA.py
new file mode 100644
index 0000000..062882a
--- /dev/null
+++ b/test_MIA.py
@@ -0,0 +1,27 @@
+#!/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))
-- 
GitLab