From b25af319558979b09fb5d54bdfc70acadb521fcf Mon Sep 17 00:00:00 2001
From: Maximilian Stauss <max.stauss@gmail.com>
Date: Sat, 2 Sep 2017 16:03:05 +0200
Subject: [PATCH] move files

---
 classes/AffineTransformation.py          | 22 ---------------
 classes/helpers/AffineTransformation.py  | 35 ++++++++++++++++++++++++
 classes/{ => helpers}/PrivateKey.py      |  0
 classes/{ => helpers}/PublicKey.py       | 16 ++++++++---
 classes/{ => helpers}/SignatureScheme.py |  5 +---
 classes/{ => helpers}/__init__.py        |  0
 6 files changed, 48 insertions(+), 30 deletions(-)
 delete mode 100644 classes/AffineTransformation.py
 create mode 100644 classes/helpers/AffineTransformation.py
 rename classes/{ => helpers}/PrivateKey.py (100%)
 rename classes/{ => helpers}/PublicKey.py (55%)
 rename classes/{ => helpers}/SignatureScheme.py (85%)
 rename classes/{ => helpers}/__init__.py (100%)

diff --git a/classes/AffineTransformation.py b/classes/AffineTransformation.py
deleted file mode 100644
index 008b037..0000000
--- a/classes/AffineTransformation.py
+++ /dev/null
@@ -1,22 +0,0 @@
-from __future__ import absolute_import, division, print_function
-from sage.all import *
-
-
-class AffineTransformation():
-
-    def __init__(self, M, y):
-        if not M.is_invertible():
-            exit(1)
-        self.M = M  # invertable Matrix
-        self.y = y  # vector
-
-    def __call__(self, vector):
-        """Transform a given vector with initialized affine transformation"""
-        if not isinstance(vector, sage.structure.element.Vector):
-            vector = vector(vector)
-
-        return (self.M * vector) + self.y
-
-    def inverse(self, vector):
-        """Transform a given vector with inverted affine transformation"""
-        return self.M.inverse() * (vector - self.y)
diff --git a/classes/helpers/AffineTransformation.py b/classes/helpers/AffineTransformation.py
new file mode 100644
index 0000000..ca63c10
--- /dev/null
+++ b/classes/helpers/AffineTransformation.py
@@ -0,0 +1,35 @@
+from __future__ import absolute_import, division, print_function
+from sage.all import *
+
+
+class AffineTransformation():
+    def __init__(self, M, y):
+        """
+        Eine affine Transformation wird mit einer invertierbaren
+        Matrix und einem beliebigen Vektor initialisiert
+        """
+
+        # Abbruchbedingung für nicht invertierbare Matrizen
+        if not M.is_invertible():
+            exit(1)
+
+        self.M = M  # invertierbare Matrix
+        self.y = y  # Vektor
+
+    def __call__(self, vector):
+        """Anwenden der Transformation auf den gegebenen Vektor"""
+
+        # Sollte `vector` eine Liste sein -> Typecast
+        if not isinstance(vector, sage.structure.element.Vector):
+            vector = vector(vector)
+
+        return (self.M * vector) + self.y
+
+    def inverse(self, vector):
+        """Anwenden der inversen Transformation auf den gegebenen Vektor"""
+
+        # Sollte `vector` eine Liste sein -> Typecast
+        if not isinstance(vector, sage.structure.element.Vector):
+            vector = vector(vector)
+
+        return self.M.inverse() * (vector - self.y)
diff --git a/classes/PrivateKey.py b/classes/helpers/PrivateKey.py
similarity index 100%
rename from classes/PrivateKey.py
rename to classes/helpers/PrivateKey.py
diff --git a/classes/PublicKey.py b/classes/helpers/PublicKey.py
similarity index 55%
rename from classes/PublicKey.py
rename to classes/helpers/PublicKey.py
index 351b8f5..9d121a3 100644
--- a/classes/PublicKey.py
+++ b/classes/helpers/PublicKey.py
@@ -4,9 +4,11 @@ import cPickle as pickle
 
 class PublicKey(object):
     def __init__(self, public_polynomial=None, path=None):
+        # wird ein Schlüssel als Datei übergeben, so wird dieser geladen
         if public_polynomial is None and path is not None:
             self.P = self.load(path)
         else:
+            # speichere das Polynomsystem:
             self.P = public_polynomial
 
     def __call__(self, vector):
@@ -15,11 +17,17 @@ class PublicKey(object):
     def __repr__(self):
         return "PublicKey: {}".format(list(self.P))
 
-    def encrypt(self, vector):
-        return self.P(list(vector))
+    def encrypt(self, msg):
+        # der Vektor `msg` muss als Liste an Sage übergeben werden
+        # Sage kann dann eigenständig das Polynomsystem ausrechen
+        return self.P(list(msg))
 
-    def verify(self, vector, signature):
-        return signature == self.encrypt(vector)
+    def verify(self, msg, signature):
+        # Vergleiche gegebene Singatur mit generierter Signatur
+        return signature == self.encrypt(msg)
+
+    """ Es folgt eine sehr einfache Möglichkeit den Schlüssel zu
+    speichern und entsprechend auch wieder zu laden """
 
     def save(self, path="./keys/uov.pub"):
         with open(path, 'wb') as output:
diff --git a/classes/SignatureScheme.py b/classes/helpers/SignatureScheme.py
similarity index 85%
rename from classes/SignatureScheme.py
rename to classes/helpers/SignatureScheme.py
index a1b007c..c9e5ead 100644
--- a/classes/SignatureScheme.py
+++ b/classes/helpers/SignatureScheme.py
@@ -3,7 +3,7 @@ from sage.all import *
 
 class SignatureScheme(object):
     """All Functions for an MQPKC Signature Scheme"""
-    """Init will set public and private keys"""
+    """Init must set public and private keys"""
 
     def sign(self, msg):
         """
@@ -11,9 +11,6 @@ class SignatureScheme(object):
         private_key of form (S, P', T)
         invert S, P' and T -> we write _S, _P' and _T
         """
-        if not isinstance(msg, sage.structure.element.Vector):
-            msg = vector(msg)
-
         _t = self.private_key.T.inverse(msg)
         _p = self.invert_MQ(_t)
         return self.private_key.S.inverse(_p)
diff --git a/classes/__init__.py b/classes/helpers/__init__.py
similarity index 100%
rename from classes/__init__.py
rename to classes/helpers/__init__.py
-- 
GitLab