|
@ -77,6 +77,7 @@ class Encryptor(object): |
|
|
self.iv = None |
|
|
self.iv = None |
|
|
self.iv_sent = False |
|
|
self.iv_sent = False |
|
|
self.cipher_iv = b'' |
|
|
self.cipher_iv = b'' |
|
|
|
|
|
self.iv_buf = b'' |
|
|
self.decipher = None |
|
|
self.decipher = None |
|
|
method = method.lower() |
|
|
method = method.lower() |
|
|
self._method_info = self.get_method_info(method) |
|
|
self._method_info = self.get_method_info(method) |
|
@ -122,16 +123,20 @@ class Encryptor(object): |
|
|
def decrypt(self, buf): |
|
|
def decrypt(self, buf): |
|
|
if len(buf) == 0: |
|
|
if len(buf) == 0: |
|
|
return buf |
|
|
return buf |
|
|
if self.decipher is None: |
|
|
if self.decipher is not None: #optimize |
|
|
|
|
|
return self.decipher.update(buf) |
|
|
|
|
|
|
|
|
decipher_iv_len = self._method_info[1] |
|
|
decipher_iv_len = self._method_info[1] |
|
|
decipher_iv = buf[:decipher_iv_len] |
|
|
if len(self.iv_buf) <= decipher_iv_len: |
|
|
|
|
|
self.iv_buf += buf |
|
|
|
|
|
if len(self.iv_buf) > decipher_iv_len: |
|
|
|
|
|
decipher_iv = self.iv_buf[:decipher_iv_len] |
|
|
self.decipher = self.get_cipher(self.key, self.method, 0, |
|
|
self.decipher = self.get_cipher(self.key, self.method, 0, |
|
|
iv=decipher_iv) |
|
|
iv=decipher_iv) |
|
|
buf = buf[decipher_iv_len:] |
|
|
buf = self.iv_buf[decipher_iv_len:] |
|
|
if len(buf) == 0: |
|
|
|
|
|
return buf |
|
|
|
|
|
return self.decipher.update(buf) |
|
|
return self.decipher.update(buf) |
|
|
|
|
|
else: |
|
|
|
|
|
return b'' |
|
|
|
|
|
|
|
|
def encrypt_all(password, method, op, data): |
|
|
def encrypt_all(password, method, op, data): |
|
|
result = [] |
|
|
result = [] |
|
|