| 
														
															@@ -253,7 +253,13 @@ cdef class AES256_CTR_HMAC_SHA256: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     cdef unsigned char iv[16] 
														 | 
														
														 | 
														
															     cdef unsigned char iv[16] 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     cdef long long blocks 
														 | 
														
														 | 
														
															     cdef long long blocks 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    @staticmethod 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    def requirements_check(): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        if OPENSSL_VERSION_NUMBER < 0x10000000: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            raise ValueError('AES CTR requires OpenSSL >= 1.0.0. Detected: OpenSSL %08x' % OPENSSL_VERSION_NUMBER) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     def __init__(self, mac_key, enc_key, iv=None, header_len=1, aad_offset=1): 
														 | 
														
														 | 
														
															     def __init__(self, mac_key, enc_key, iv=None, header_len=1, aad_offset=1): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        self.requirements_check() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         assert isinstance(mac_key, bytes) and len(mac_key) == 32 
														 | 
														
														 | 
														
															         assert isinstance(mac_key, bytes) and len(mac_key) == 32 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         assert isinstance(enc_key, bytes) and len(enc_key) == 32 
														 | 
														
														 | 
														
															         assert isinstance(enc_key, bytes) and len(enc_key) == 32 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         self.cipher_blk_len = 16 
														 | 
														
														 | 
														
															         self.cipher_blk_len = 16 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -428,6 +434,11 @@ cdef class _AEAD_BASE: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     cdef unsigned char iv[12] 
														 | 
														
														 | 
														
															     cdef unsigned char iv[12] 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     cdef long long blocks 
														 | 
														
														 | 
														
															     cdef long long blocks 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    @staticmethod 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    def requirements_check(): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        """check whether library requirements for this ciphersuite are satisfied""" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        raise NotImplemented  # override / implement in child class 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     def __init__(self, mac_key, enc_key, iv=None, header_len=1, aad_offset=1): 
														 | 
														
														 | 
														
															     def __init__(self, mac_key, enc_key, iv=None, header_len=1, aad_offset=1): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         assert mac_key is None 
														 | 
														
														 | 
														
															         assert mac_key is None 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         assert isinstance(enc_key, bytes) and len(enc_key) == 32 
														 | 
														
														 | 
														
															         assert isinstance(enc_key, bytes) and len(enc_key) == 32 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -606,25 +617,37 @@ cdef class _CHACHA_BASE(_AEAD_BASE): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 cdef class AES256_GCM(_AES_BASE): 
														 | 
														
														 | 
														
															 cdef class AES256_GCM(_AES_BASE): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    def __init__(self, mac_key, enc_key, iv=None, header_len=1, aad_offset=1): 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    @staticmethod 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    def requirements_check(): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if OPENSSL_VERSION_NUMBER < 0x10001040: 
														 | 
														
														 | 
														
															         if OPENSSL_VERSION_NUMBER < 0x10001040: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             raise ValueError('AES GCM requires OpenSSL >= 1.0.1d. Detected: OpenSSL %08x' % OPENSSL_VERSION_NUMBER) 
														 | 
														
														 | 
														
															             raise ValueError('AES GCM requires OpenSSL >= 1.0.1d. Detected: OpenSSL %08x' % OPENSSL_VERSION_NUMBER) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    def __init__(self, mac_key, enc_key, iv=None, header_len=1, aad_offset=1): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        self.requirements_check() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         self.cipher = EVP_aes_256_gcm 
														 | 
														
														 | 
														
															         self.cipher = EVP_aes_256_gcm 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         super().__init__(mac_key, enc_key, iv=iv, header_len=header_len, aad_offset=aad_offset) 
														 | 
														
														 | 
														
															         super().__init__(mac_key, enc_key, iv=iv, header_len=header_len, aad_offset=aad_offset) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 cdef class AES256_OCB(_AES_BASE): 
														 | 
														
														 | 
														
															 cdef class AES256_OCB(_AES_BASE): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    def __init__(self, mac_key, enc_key, iv=None, header_len=1, aad_offset=1): 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    @staticmethod 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    def requirements_check(): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if OPENSSL_VERSION_NUMBER < 0x10100000: 
														 | 
														
														 | 
														
															         if OPENSSL_VERSION_NUMBER < 0x10100000: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             raise ValueError('AES OCB requires OpenSSL >= 1.1.0. Detected: OpenSSL %08x' % OPENSSL_VERSION_NUMBER) 
														 | 
														
														 | 
														
															             raise ValueError('AES OCB requires OpenSSL >= 1.1.0. Detected: OpenSSL %08x' % OPENSSL_VERSION_NUMBER) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    def __init__(self, mac_key, enc_key, iv=None, header_len=1, aad_offset=1): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        self.requirements_check() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         self.cipher = EVP_aes_256_ocb 
														 | 
														
														 | 
														
															         self.cipher = EVP_aes_256_ocb 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         super().__init__(mac_key, enc_key, iv=iv, header_len=header_len, aad_offset=aad_offset) 
														 | 
														
														 | 
														
															         super().__init__(mac_key, enc_key, iv=iv, header_len=header_len, aad_offset=aad_offset) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 cdef class CHACHA20_POLY1305(_CHACHA_BASE): 
														 | 
														
														 | 
														
															 cdef class CHACHA20_POLY1305(_CHACHA_BASE): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    def __init__(self, mac_key, enc_key, iv=None, header_len=1, aad_offset=1): 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    @staticmethod 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    def requirements_check(): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if OPENSSL_VERSION_NUMBER < 0x10100000: 
														 | 
														
														 | 
														
															         if OPENSSL_VERSION_NUMBER < 0x10100000: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             raise ValueError('CHACHA20-POLY1305 requires OpenSSL >= 1.1.0. Detected: OpenSSL %08x' % OPENSSL_VERSION_NUMBER) 
														 | 
														
														 | 
														
															             raise ValueError('CHACHA20-POLY1305 requires OpenSSL >= 1.1.0. Detected: OpenSSL %08x' % OPENSSL_VERSION_NUMBER) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    def __init__(self, mac_key, enc_key, iv=None, header_len=1, aad_offset=1): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        self.requirements_check() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         self.cipher = EVP_chacha20_poly1305 
														 | 
														
														 | 
														
															         self.cipher = EVP_chacha20_poly1305 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         super().__init__(mac_key, enc_key, iv=iv, header_len=header_len, aad_offset=aad_offset) 
														 | 
														
														 | 
														
															         super().__init__(mac_key, enc_key, iv=iv, header_len=header_len, aad_offset=aad_offset) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 |