def encrypt_all(password, method, op, data): if method is not None and method.lower() == 'table': method = None if not method: [encrypt_table, decrypt_table] = init_table(password) if op: return string.translate(data, encrypt_table) else: return string.translate(data, decrypt_table) else: import M2Crypto.EVP result = [] method = method.lower() (key_len, iv_len) = method_supported[method] (key, _) = EVP_BytesToKey(password, key_len, iv_len) if op: iv = random_string(iv_len) result.append(iv) else: iv = data[:iv_len] data = data[iv_len:] if method == 'salsa20-ctr': cipher = encrypt_salsa20.Salsa20Cipher(method, key, iv, op) elif method == 'rc4-md5': cipher = encrypt_rc4_md5.create_cipher(method, key, iv, op) else: cipher = M2Crypto.EVP.Cipher(method.replace('-', '_'), key, iv, op, key_as_bytes=0, d='md5', salt=None, i=1, padding=1) result.append(cipher.update(data)) return ''.join(result)
def get_cipher(self, password, method, op, iv=None): password = password.encode('utf-8') method = method.lower() m = self.get_cipher_len(method) if m: key, iv_ = EVP_BytesToKey(password, m[0], m[1]) if iv is None: iv = iv_ iv = iv[:m[1]] if op == 1: # this iv is for cipher not decipher self.cipher_iv = iv[:m[1]] if method == 'salsa20-ctr': return encrypt_salsa20.Salsa20Cipher(method, key, iv, op) elif method == 'rc4-md5': return encrypt_rc4_md5.create_cipher(method, key, iv, op) else: import M2Crypto.EVP return M2Crypto.EVP.Cipher(method.replace('-', '_'), key, iv, op, key_as_bytes=0, d='md5', salt=None, i=1, padding=1) logging.error('method %s not supported' % method) sys.exit(1)