| 
														
															@@ -21,8 +21,8 @@ cdef extern from "openssl/evp.h": 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     ctypedef struct ENGINE: 
														 | 
														
														 | 
														
															     ctypedef struct ENGINE: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         pass 
														 | 
														
														 | 
														
															         pass 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     const EVP_CIPHER *EVP_aes_256_ctr() 
														 | 
														
														 | 
														
															     const EVP_CIPHER *EVP_aes_256_ctr() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    void EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *a) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    EVP_CIPHER_CTX *EVP_CIPHER_CTX_new() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *a) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl, 
														 | 
														
														 | 
														
															     int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                            const unsigned char *key, const unsigned char *iv) 
														 | 
														
														 | 
														
															                            const unsigned char *key, const unsigned char *iv) 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -56,24 +56,24 @@ def num_aes_blocks(int length): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 cdef class AES: 
														 | 
														
														 | 
														
															 cdef class AES: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     """A thin wrapper around the OpenSSL EVP cipher API 
														 | 
														
														 | 
														
															     """A thin wrapper around the OpenSSL EVP cipher API 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     """ 
														 | 
														
														 | 
														
															     """ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    cdef EVP_CIPHER_CTX ctx 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    cdef EVP_CIPHER_CTX *ctx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     cdef int is_encrypt 
														 | 
														
														 | 
														
															     cdef int is_encrypt 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     def __cinit__(self, is_encrypt, key, iv=None): 
														 | 
														
														 | 
														
															     def __cinit__(self, is_encrypt, key, iv=None): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        EVP_CIPHER_CTX_init(&self.ctx) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        self.ctx = EVP_CIPHER_CTX_new() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         self.is_encrypt = is_encrypt 
														 | 
														
														 | 
														
															         self.is_encrypt = is_encrypt 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         # Set cipher type and mode 
														 | 
														
														 | 
														
															         # Set cipher type and mode 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         cipher_mode = EVP_aes_256_ctr() 
														 | 
														
														 | 
														
															         cipher_mode = EVP_aes_256_ctr() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if self.is_encrypt: 
														 | 
														
														 | 
														
															         if self.is_encrypt: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            if not EVP_EncryptInit_ex(&self.ctx, cipher_mode, NULL, NULL, NULL): 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            if not EVP_EncryptInit_ex(self.ctx, cipher_mode, NULL, NULL, NULL): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 raise Exception('EVP_EncryptInit_ex failed') 
														 | 
														
														 | 
														
															                 raise Exception('EVP_EncryptInit_ex failed') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         else:  # decrypt 
														 | 
														
														 | 
														
															         else:  # decrypt 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            if not EVP_DecryptInit_ex(&self.ctx, cipher_mode, NULL, NULL, NULL): 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            if not EVP_DecryptInit_ex(self.ctx, cipher_mode, NULL, NULL, NULL): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 raise Exception('EVP_DecryptInit_ex failed') 
														 | 
														
														 | 
														
															                 raise Exception('EVP_DecryptInit_ex failed') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         self.reset(key, iv) 
														 | 
														
														 | 
														
															         self.reset(key, iv) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     def __dealloc__(self): 
														 | 
														
														 | 
														
															     def __dealloc__(self): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        EVP_CIPHER_CTX_cleanup(&self.ctx) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        EVP_CIPHER_CTX_free(self.ctx) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     def reset(self, key=None, iv=None): 
														 | 
														
														 | 
														
															     def reset(self, key=None, iv=None): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         cdef const unsigned char *key2 = NULL 
														 | 
														
														 | 
														
															         cdef const unsigned char *key2 = NULL 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -84,10 +84,10 @@ cdef class AES: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             iv2 = iv 
														 | 
														
														 | 
														
															             iv2 = iv 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         # Initialise key and IV 
														 | 
														
														 | 
														
															         # Initialise key and IV 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if self.is_encrypt: 
														 | 
														
														 | 
														
															         if self.is_encrypt: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            if not EVP_EncryptInit_ex(&self.ctx, NULL, NULL, key2, iv2): 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            if not EVP_EncryptInit_ex(self.ctx, NULL, NULL, key2, iv2): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 raise Exception('EVP_EncryptInit_ex failed') 
														 | 
														
														 | 
														
															                 raise Exception('EVP_EncryptInit_ex failed') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         else:  # decrypt 
														 | 
														
														 | 
														
															         else:  # decrypt 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            if not EVP_DecryptInit_ex(&self.ctx, NULL, NULL, key2, iv2): 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            if not EVP_DecryptInit_ex(self.ctx, NULL, NULL, key2, iv2): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 raise Exception('EVP_DecryptInit_ex failed') 
														 | 
														
														 | 
														
															                 raise Exception('EVP_DecryptInit_ex failed') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     @property 
														 | 
														
														 | 
														
															     @property 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -103,10 +103,10 @@ cdef class AES: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if not out: 
														 | 
														
														 | 
														
															         if not out: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             raise MemoryError 
														 | 
														
														 | 
														
															             raise MemoryError 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         try: 
														 | 
														
														 | 
														
															         try: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            if not EVP_EncryptUpdate(&self.ctx, out, &outl, data, inl): 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            if not EVP_EncryptUpdate(self.ctx, out, &outl, data, inl): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 raise Exception('EVP_EncryptUpdate failed') 
														 | 
														
														 | 
														
															                 raise Exception('EVP_EncryptUpdate failed') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             ctl = outl 
														 | 
														
														 | 
														
															             ctl = outl 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            if not EVP_EncryptFinal_ex(&self.ctx, out+ctl, &outl): 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            if not EVP_EncryptFinal_ex(self.ctx, out+ctl, &outl): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 raise Exception('EVP_EncryptFinal failed') 
														 | 
														
														 | 
														
															                 raise Exception('EVP_EncryptFinal failed') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             ctl += outl 
														 | 
														
														 | 
														
															             ctl += outl 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             return out[:ctl] 
														 | 
														
														 | 
														
															             return out[:ctl] 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -124,10 +124,10 @@ cdef class AES: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if not out: 
														 | 
														
														 | 
														
															         if not out: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             raise MemoryError 
														 | 
														
														 | 
														
															             raise MemoryError 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         try: 
														 | 
														
														 | 
														
															         try: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            if not EVP_DecryptUpdate(&self.ctx, out, &outl, data, inl): 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            if not EVP_DecryptUpdate(self.ctx, out, &outl, data, inl): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 raise Exception('EVP_DecryptUpdate failed') 
														 | 
														
														 | 
														
															                 raise Exception('EVP_DecryptUpdate failed') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             ptl = outl 
														 | 
														
														 | 
														
															             ptl = outl 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            if EVP_DecryptFinal_ex(&self.ctx, out+ptl, &outl) <= 0: 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            if EVP_DecryptFinal_ex(self.ctx, out+ptl, &outl) <= 0: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 # this error check is very important for modes with padding or 
														 | 
														
														 | 
														
															                 # this error check is very important for modes with padding or 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 # authentication. for them, a failure here means corrupted data. 
														 | 
														
														 | 
														
															                 # authentication. for them, a failure here means corrupted data. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 # CTR mode does not use padding nor authentication. 
														 | 
														
														 | 
														
															                 # CTR mode does not use padding nor authentication. 
														 |