@@ -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 ))
@@ -224,6 +225,7 @@ def decrypt(self, string):
224225 self ._dec = _ffi .new (self ._native_type )
225226 ret = self ._set_key (_DECRYPTION )
226227 if ret < 0 : # pragma: no cover
228+ self ._dec = None
227229 raise WolfCryptError ("Invalid key error (%d)" % ret )
228230
229231 result = _ffi .new ("byte[%d]" % len (string ))
@@ -406,11 +408,16 @@ def __init__(self, key, IV, tag_bytes=16):
406408 raise ValueError ("key must be %s in length, not %d" %
407409 (self ._key_sizes , len (key )))
408410 self ._native_object = _ffi .new (self ._native_type )
409- _lib .wc_AesInit (self ._native_object , _ffi .NULL , - 2 )
411+ ret = _lib .wc_AesInit (self ._native_object , _ffi .NULL , - 2 )
412+ if ret < 0 :
413+ raise WolfCryptError ("AES init error (%d)" % ret )
410414 ret = _lib .wc_AesGcmInit (self ._native_object , key , len (key ), IV , len (IV ))
411415 if ret < 0 :
412416 raise WolfCryptError ("Init error (%d)" % ret )
413417
418+ def __del__ (self ):
419+ _lib .wc_AesFree (self ._native_object )
420+
414421 def set_aad (self , data ):
415422 """
416423 Set the additional authentication data for the stream
@@ -498,10 +505,11 @@ def __init__(self, key="", size=32):
498505 self ._dec = None
499506 self ._key = None
500507 if len (key ) > 0 :
501- if not size in self ._key_sizes :
502- raise ValueError ("Invalid key size %d" % size )
503508 self ._key = t2b (key )
504- self .key_size = size
509+ if len (self ._key ) not in self ._key_sizes :
510+ raise ValueError ("key must be %s in length, not %d" %
511+ (self ._key_sizes , len (self ._key )))
512+ self .key_size = len (self ._key )
505513 self ._IV_nonce = []
506514 self ._IV_counter = 0
507515
@@ -511,13 +519,13 @@ def _set_key(self, direction):
511519 if self ._enc :
512520 ret = _lib .wc_Chacha_SetKey (self ._enc , self ._key , len (self ._key ))
513521 if ret == 0 :
514- _lib .wc_Chacha_SetIV (self ._enc , self ._IV_nonce , self ._IV_counter )
522+ ret = _lib .wc_Chacha_SetIV (self ._enc , self ._IV_nonce , self ._IV_counter )
515523 if ret != 0 :
516524 return ret
517525 if self ._dec :
518526 ret = _lib .wc_Chacha_SetKey (self ._dec , self ._key , len (self ._key ))
519527 if ret == 0 :
520- _lib .wc_Chacha_SetIV (self ._dec , self ._IV_nonce , self ._IV_counter )
528+ ret = _lib .wc_Chacha_SetIV (self ._dec , self ._IV_nonce , self ._IV_counter )
521529 if ret != 0 :
522530 return ret
523531 return 0
@@ -628,6 +636,11 @@ class Des3(_Cipher):
628636 key_size = 24
629637 _native_type = "Des3 *"
630638
639+ def __init__ (self , key , mode , IV = None ):
640+ if mode != MODE_CBC :
641+ raise ValueError ("Des3 only supports MODE_CBC" )
642+ super ().__init__ (key , mode , IV )
643+
631644 def _set_key (self , direction ):
632645 if direction == _ENCRYPTION :
633646 return _lib .wc_Des3_SetKey (self ._enc , self ._key ,
@@ -2024,7 +2037,6 @@ def decapsulate(self, ct):
20242037 )
20252038
20262039 if ret < 0 : # pragma: no cover
2027- self .native_object = None
20282040 raise WolfCryptError ("wc_KyberKey_Decapsulate() error (%d)" % ret )
20292041
20302042 return _ffi .buffer (ss , ss_size )[:]
0 commit comments