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