Skip to content
This repository was archived by the owner on May 9, 2020. It is now read-only.

Commit 08980f5

Browse files
kamilbednarzfpedrini
authored andcommitted
Refactored aes cipher class
1 parent 8468559 commit 08980f5

File tree

2 files changed

+16
-20
lines changed

2 files changed

+16
-20
lines changed

chef/aes.py

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -94,40 +94,37 @@ def __init__(self, key, iv, salt='12345678'):
9494
self.salt = create_string_buffer(salt)
9595

9696
self.encryptor = EVP_CIPHER_CTX()
97-
EVP_CIPHER_CTX_init(byref(self.encryptor))
98-
EVP_CipherInit(byref(self.encryptor), EVP_aes_256_cbc(), self.key_data, self.iv, c_int(1))
99-
EVP_CIPHER_CTX_set_padding(byref(self.encryptor), c_int(1))
97+
self._init_cipher(byref(self.encryptor), 1)
10098

10199
self.decryptor = EVP_CIPHER_CTX()
102-
EVP_CIPHER_CTX_init(byref(self.decryptor))
103-
EVP_CipherInit(byref(self.decryptor), EVP_aes_256_cbc(), self.key_data, self.iv, c_int(0))
104-
EVP_CIPHER_CTX_set_padding(byref(self.decryptor), c_int(1))
100+
self._init_cipher(byref(self.decryptor), 0)
105101

106-
def encrypt(self, data):
102+
def _init_cipher(self, ctypes_cipher, crypt_mode):
103+
""" crypt_mode parameter is a flag deciding whether the cipher should be
104+
used for encryption (1) or decryption (0) """
105+
EVP_CIPHER_CTX_init(ctypes_cipher)
106+
EVP_CipherInit(ctypes_cipher, EVP_aes_256_cbc(), self.key_data, self.iv, c_int(crypt_mode))
107+
EVP_CIPHER_CTX_set_padding(ctypes_cipher, c_int(1))
108+
109+
def _process_data(self, ctypes_cipher, data):
107110
length = c_int(len(data))
108111
buf_length = c_int(length.value + AES_BLOCK_SIZE)
109112
buf = create_string_buffer(buf_length.value)
110113

111114
final_buf = create_string_buffer(AES_BLOCK_SIZE)
112115
final_length = c_int(0)
113116

114-
EVP_CipherUpdate(byref(self.encryptor), buf, byref(buf_length), create_string_buffer(data), length)
115-
EVP_CipherFinal(byref(self.encryptor), final_buf, byref(final_length))
117+
EVP_CipherUpdate(ctypes_cipher, buf, byref(buf_length), create_string_buffer(data), length)
118+
EVP_CipherFinal(ctypes_cipher, final_buf, byref(final_length))
116119

117120
return string_at(buf, buf_length) + string_at(final_buf, final_length)
118121

119-
def decrypt(self, data):
120-
length = c_int(len(data))
121-
buf_length = c_int(length.value + AES_BLOCK_SIZE)
122-
buf = create_string_buffer(buf_length.value)
123-
124-
final_buf = create_string_buffer(AES_BLOCK_SIZE)
125-
final_length = c_int(0)
126122

127-
EVP_CipherUpdate(byref(self.decryptor), buf, byref(buf_length), create_string_buffer(data), length)
128-
EVP_CipherFinal(byref(self.decryptor), final_buf, byref(final_length))
123+
def encrypt(self, data):
124+
return self._process_data(byref(self.encryptor), data)
129125

130-
return string_at(buf, buf_length) + string_at(final_buf, final_length)
126+
def decrypt(self, data):
127+
return self._process_data(byref(self.decryptor), data)
131128

132129

133130

chef/tests/test_aes.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ def test_encrypt(self):
1818
encrypted_value = self.cipher.encrypt('{"json_wrapper":"secr3t c0d3"}')
1919
self.assertEquals(base64.standard_b64encode(encrypted_value).strip(), "Ym5T8umtSd0wgjDYq1ZDK5dAh6OjgrTxlloGNf2xYhg=")
2020

21-
2221
def test_decrypt(self):
2322
decrypted_value = self.cipher.decrypt(base64.standard_b64decode('Ym5T8umtSd0wgjDYq1ZDK5dAh6OjgrTxlloGNf2xYhg=\n'))
2423
self.assertEquals(decrypted_value, '{"json_wrapper":"secr3t c0d3"}')

0 commit comments

Comments
 (0)