@@ -191,6 +191,7 @@ def encrypt(self, string):
191191 self ._enc = _ffi .new (self ._native_type )
192192 ret = self ._set_key (_ENCRYPTION )
193193 if ret < 0 : # pragma: no cover
194+ self ._enc = None
194195 raise WolfCryptError ("Invalid key error (%d)" % ret )
195196
196197 result = _ffi .new ("byte[%d]" % len (string ))
@@ -223,6 +224,7 @@ def decrypt(self, string):
223224 self ._dec = _ffi .new (self ._native_type )
224225 ret = self ._set_key (_DECRYPTION )
225226 if ret < 0 : # pragma: no cover
227+ self ._dec = None
226228 raise WolfCryptError ("Invalid key error (%d)" % ret )
227229
228230 result = _ffi .new ("byte[%d]" % len (string ))
@@ -405,11 +407,16 @@ def __init__(self, key, IV, tag_bytes=16):
405407 raise ValueError ("key must be %s in length, not %d" %
406408 (self ._key_sizes , len (key )))
407409 self ._native_object = _ffi .new (self ._native_type )
408- _lib .wc_AesInit (self ._native_object , _ffi .NULL , - 2 )
410+ ret = _lib .wc_AesInit (self ._native_object , _ffi .NULL , - 2 )
411+ if ret < 0 :
412+ raise WolfCryptError ("AES init error (%d)" % ret )
409413 ret = _lib .wc_AesGcmInit (self ._native_object , key , len (key ), IV , len (IV ))
410414 if ret < 0 :
411415 raise WolfCryptError ("Init error (%d)" % ret )
412416
417+ def __del__ (self ):
418+ _lib .wc_AesFree (self ._native_object )
419+
413420 def set_aad (self , data ):
414421 """
415422 Set the additional authentication data for the stream
@@ -497,10 +504,11 @@ def __init__(self, key="", size=32):
497504 self ._dec = None
498505 self ._key = None
499506 if len (key ) > 0 :
500- if size not in self ._key_sizes :
501- raise ValueError ("Invalid key size %d" % size )
502507 self ._key = t2b (key )
503- self .key_size = size
508+ if len (self ._key ) not in self ._key_sizes :
509+ raise ValueError ("key must be %s in length, not %d" %
510+ (self ._key_sizes , len (self ._key )))
511+ self .key_size = len (self ._key )
504512 self ._IV_nonce = []
505513 self ._IV_counter = 0
506514
@@ -510,13 +518,13 @@ def _set_key(self, direction):
510518 if self ._enc :
511519 ret = _lib .wc_Chacha_SetKey (self ._enc , self ._key , len (self ._key ))
512520 if ret == 0 :
513- _lib .wc_Chacha_SetIV (self ._enc , self ._IV_nonce , self ._IV_counter )
521+ ret = _lib .wc_Chacha_SetIV (self ._enc , self ._IV_nonce , self ._IV_counter )
514522 if ret != 0 :
515523 return ret
516524 if self ._dec :
517525 ret = _lib .wc_Chacha_SetKey (self ._dec , self ._key , len (self ._key ))
518526 if ret == 0 :
519- _lib .wc_Chacha_SetIV (self ._dec , self ._IV_nonce , self ._IV_counter )
527+ ret = _lib .wc_Chacha_SetIV (self ._dec , self ._IV_nonce , self ._IV_counter )
520528 if ret != 0 :
521529 return ret
522530 return 0
@@ -627,6 +635,11 @@ class Des3(_Cipher):
627635 key_size = 24
628636 _native_type = "Des3 *"
629637
638+ def __init__ (self , key , mode , IV = None ):
639+ if mode != MODE_CBC :
640+ raise ValueError ("Des3 only supports MODE_CBC" )
641+ super ().__init__ (key , mode , IV )
642+
630643 def _set_key (self , direction ):
631644 if direction == _ENCRYPTION :
632645 return _lib .wc_Des3_SetKey (self ._enc , self ._key ,
@@ -2021,7 +2034,6 @@ def decapsulate(self, ct):
20212034 )
20222035
20232036 if ret < 0 : # pragma: no cover
2024- self .native_object = None
20252037 raise WolfCryptError ("wc_KyberKey_Decapsulate() error (%d)" % ret )
20262038
20272039 return _ffi .buffer (ss , ss_size )[:]
0 commit comments