2016-07-31 4 views
0

다른 암호화 스키마를 테스트 할 수 있도록 다음 클래스를 작성했습니다. 그러나 다른 암호화 스키마에서 개체를 인스턴스화하는 데 문제가 있습니다. 누군가 제가 ATM을 잡지 못한다는 것을 이해하지 못하는 것을 지적 할 수 있습니까? 왜 그것이 작동하지 않는지 모르겠습니다. 그것은 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

정확히 어디에서 두 개의 주장을 전달한다고 생각합니까 ('자기'제외)? 모든'encrypt' 호출은 하나의 인수를가집니다. –

+0

* full * 추적을 포함하십시오. 정확히 어디에서 오류가 발생했는지 추측 할 수 있지만 전체 추적은 확실하게 알려주고 다른 사례를 놓치지 않도록합니다. –

답변

1

당신은 바인딩 된 메서드에 인수에 전달됩니다

BC.encrypt() 방법 각각 하나 개의 인수를, 그리고이 방법은 self, messagekey 이상이 소요
return self.bc1.encrypt(
    self.bc2.encrypt(tweak) * self.bc3.encrypt(message) + 
    self.bc4.encrypt(tweak)) 

.

어느

key 대한 값을 전달하거나 BC.encrypt() 메소드 정의으로부터 인자를 제거 (그리고 다른 장소에서 키를 얻는다; 아마 인스턴스 __init__ 설정 속성).