2016-07-31 11 views
0

異なる暗号化方式をテストできるように、次のクラスを作成しました。しかし、異なる暗号化方式からオブジェクトをインスタンス化する際に問題があります。誰かが私が気づいていないと思っていないことを指摘できますか?なぜそれが動作しないのか分かりません。それはTypeError: encrypt() takes exactly 3 arguments (2 given)を与えますが、それは自己渡されているので、私はそれを残りの部分に基づいて修正する方法を知らない。インスタンスとクラス:x-1が与えられたときx引数が必要

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

「self」を除いて2つの引数を正確に渡していると思いますか?すべての 'encrypt'呼び出しには1つの引数があります。 –

+0

* full *トレースバックを含めてください。私は正確にどこにエラーが発生するかを推測することができますが、完全なトレースバックがわれわれにはっきりとわかり、別のケースを見逃していないことを確認します。 –

答えて

1

あなたはバインドされた方法にに1つの引数を渡す:

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

BC.encrypt()方法ごとに一つの引数だし、この方法はselfmessagekeyを超えて2をとります。

keyに値を渡す、またはBC.encrypt()メソッド定義からその引数を削除(および他のいくつかの場所からキーを取得し、おそらく__init__に設定されたインスタンスの属性から)のどちらか。

関連する問題