2016-07-31 33 views
0

Ich habe die folgenden Klassen geschrieben, um verschiedene Verschlüsselungsschemata testen zu können. Ich habe jedoch Probleme bei der Instanziierung von Objekten aus dem unterschiedlichen Verschlüsselungsschema. Könnte jemand auf etwas hinweisen, das keinen Sinn ergibt, dass ich nicht atme? Ich bin mir nicht sicher, warum es nicht funktioniert. Es gibt eine TypeError: encrypt() takes exactly 3 arguments (2 given), aber es hat sich selbst übergeben, so dass ich nicht weiß, wie man es auf der Basis von den anderen beheben kann.Instanzen & Klassen: erfordert x Argumente, wenn x-1 gegeben

class AXU: 
    def __init__(self, sec_param): 
     self.sec_param = sec_param 

    def getHash(self): 
     # sample a, b and return hash function 
     a = random.randrange(self.sec_param) 
     b = random.randrange(self.sec_param) 

     return lambda x : a*x+b % sec_param 

class BC(object): 
    def __init__(self, sec_param): 
     # generate a key 
     self.sec_param = sec_param 

    def encrypt(self, message, key): 
     #encrypt with AES? 
     cipher = AES.new(key, MODE_CFB, sec_param) 
     msg = iv + cipher.encrypt(message) 
     return msg 

class tBC(object): 
    def __init__(self, sec_param): 
     self.sec_param = sec_param 

    def encrypt(self, tweak, message): 
     #pass 
     return AES.new(message, tweak) 

class Trivial(tBC): 
    def __init__(self): 
     self.bcs = {} 

    def encrypt(self, tweak, message): 
     if tweak not in self.bcs.keys(): 
      bc = BC() 
      self.bcs[tweak] = bc 
     return self.bcs[tweak].encrypt(message) 

class Our(tBC): 
    def __init__(self, sec_param): 
     self.bc1 = BC(sec_param) 
     self.bc2 = BC(sec_param) 
     self.bc3 = BC(sec_param) 
     self.bc4 = BC(sec_param) 
     # encryption over GF field 
    def encrypt(self, tweak, message): 
     return self.bc1.encrypt(self.bc2.encrypt(tweak) * self.bc3.encrypt(message) + self.bc4.encrypt(tweak)) 
+0

Wo genau denken Sie, dass Sie zwei Argumente (abgesehen von 'self') übergeben? Alle 'encrypt'-Aufrufe haben ein einziges Argument. –

+0

Bitte schließen Sie das * full * traceback ein. Ich kann erraten, wo genau der Fehler auftritt, aber eine vollständige Rückverfolgung würde uns sicher sagen und sicherstellen, dass ich keinen weiteren Fall übersehen habe. –

Antwort

1

Sie sind in ein Argument an eine gebundene Methode übergeben:

return self.bc1.encrypt(
    self.bc2.encrypt(tweak) * self.bc3.encrypt(message) + 
    self.bc4.encrypt(tweak)) 

dass jedes Argument an die BC.encrypt() Methode ist, und dieses Verfahren dauert 2 über self, message und key.

Entweder für key in einem Wert übergeben, oder dieses Argument aus der BC.encrypt() Methodendefinition entfernen (und den Schlüssel von einem anderen Ort bekommen, vielleicht von einer Instanz Attribute in __init__ gesetzt).