diff --git a/classes/AffineTransformation.py b/classes/AffineTransformation.py deleted file mode 100644 index 008b037e580681b3077db6fc71bc8a14a0105b2a..0000000000000000000000000000000000000000 --- 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 0000000000000000000000000000000000000000..ca63c101b7e306bd3d8d90fa89773d87e2b1d5f9 --- /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 351b8f549326392b19bdbf2dd71bf78e2481bacf..9d121a38e76b6222d9c8fa425a353c76685ec786 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 a1b007cc6da76027580acea1772674ba5ac728de..c9e5eadcaac0a9726ef72919915a0caf53f5c3b5 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