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

move files

parent 2b332db2
Branches
No related tags found
No related merge requests found
...@@ -3,20 +3,33 @@ from sage.all import * ...@@ -3,20 +3,33 @@ from sage.all import *
class AffineTransformation(): class AffineTransformation():
def __init__(self, M, y): 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(): if not M.is_invertible():
exit(1) exit(1)
self.M = M # invertable Matrix
self.y = y # vector self.M = M # invertierbare Matrix
self.y = y # Vektor
def __call__(self, vector): def __call__(self, vector):
"""Transform a given vector with initialized affine transformation""" """Anwenden der Transformation auf den gegebenen Vektor"""
# Sollte `vector` eine Liste sein -> Typecast
if not isinstance(vector, sage.structure.element.Vector): if not isinstance(vector, sage.structure.element.Vector):
vector = vector(vector) vector = vector(vector)
return (self.M * vector) + self.y return (self.M * vector) + self.y
def inverse(self, vector): def inverse(self, vector):
"""Transform a given vector with inverted affine transformation""" """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) return self.M.inverse() * (vector - self.y)
File moved
...@@ -4,9 +4,11 @@ import cPickle as pickle ...@@ -4,9 +4,11 @@ import cPickle as pickle
class PublicKey(object): class PublicKey(object):
def __init__(self, public_polynomial=None, path=None): 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: if public_polynomial is None and path is not None:
self.P = self.load(path) self.P = self.load(path)
else: else:
# speichere das Polynomsystem:
self.P = public_polynomial self.P = public_polynomial
def __call__(self, vector): def __call__(self, vector):
...@@ -15,11 +17,17 @@ class PublicKey(object): ...@@ -15,11 +17,17 @@ class PublicKey(object):
def __repr__(self): def __repr__(self):
return "PublicKey: {}".format(list(self.P)) return "PublicKey: {}".format(list(self.P))
def encrypt(self, vector): def encrypt(self, msg):
return self.P(list(vector)) # 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): def verify(self, msg, signature):
return signature == self.encrypt(vector) # 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"): def save(self, path="./keys/uov.pub"):
with open(path, 'wb') as output: with open(path, 'wb') as output:
......
...@@ -3,7 +3,7 @@ from sage.all import * ...@@ -3,7 +3,7 @@ from sage.all import *
class SignatureScheme(object): class SignatureScheme(object):
"""All Functions for an MQPKC Signature Scheme""" """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): def sign(self, msg):
""" """
...@@ -11,9 +11,6 @@ class SignatureScheme(object): ...@@ -11,9 +11,6 @@ class SignatureScheme(object):
private_key of form (S, P', T) private_key of form (S, P', T)
invert S, P' and T -> we write _S, _P' and _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) _t = self.private_key.T.inverse(msg)
_p = self.invert_MQ(_t) _p = self.invert_MQ(_t)
return self.private_key.S.inverse(_p) return self.private_key.S.inverse(_p)
......
File moved
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment