@@ -77,6 +77,7 @@ class DecryptionFailed(JWEException):
7777class WrongEncryptionAlgorithm (JWEException ):
7878 pass
7979
80+
8081# ---------------------------------------------------------------------------
8182# Base class
8283
@@ -106,7 +107,6 @@ def decrypt(self, msg, key):
106107
107108
108109class RSAEncrypter (Encrypter ):
109-
110110 def encrypt (self , msg , key , padding = "pkcs1_padding" ):
111111 if padding == "pkcs1_padding" :
112112 cipher = PKCS1_v1_5 .new (key )
@@ -126,7 +126,7 @@ def decrypt(self, ciphertext, key, padding="pkcs1_padding"):
126126 dsize = SHA .digest_size
127127 else :
128128 dsize = 0
129- sentinel = Random .new ().read (32 + dsize )
129+ sentinel = Random .new ().read (32 + dsize )
130130 text = cipher .decrypt (ciphertext , sentinel )
131131 if dsize :
132132 _digest = text [- dsize :]
@@ -147,6 +147,7 @@ def decrypt(self, ciphertext, key, padding="pkcs1_padding"):
147147
148148 return text
149149
150+
150151# ---------------------------------------------------------------------------
151152
152153
@@ -215,14 +216,15 @@ def keysize(spec):
215216 return int (spec [1 :4 ])
216217 return 0
217218
219+
218220ENC2ALG = {"A128CBC" : "aes_128_cbc" , "A192CBC" : "aes_192_cbc" ,
219221 "A256CBC" : "aes_256_cbc" }
220222
221223SUPPORTED = {
222224 "alg" : ["RSA1_5" , "RSA-OAEP" , "A128KW" , "A192KW" , "A256KW" ,
223225 "ECDH-ES" , "ECDH-ES+A128KW" , "ECDH-ES+A192KW" , "ECDH-ES+A256KW" ],
224226 "enc" : ["A128CBC-HS256" , "A192CBC-HS384" , "A256CBC-HS512" ,
225- #"A128GCM", "A192GCM",
227+ # "A128GCM", "A192GCM",
226228 "A256GCM" ],
227229}
228230
@@ -237,6 +239,7 @@ def alg2keytype(alg):
237239 else :
238240 return None
239241
242+
240243# =============================================================================
241244
242245ENCALGLEN1 = {
@@ -416,7 +419,8 @@ def encrypt(self, key, iv="", cek="", **kwargs):
416419
417420 _enc = self ["enc" ]
418421
419- ctxt , tag , cek = self .enc_setup (_enc , _msg .encode (), jwe .b64_encode_header (),
422+ ctxt , tag , cek = self .enc_setup (_enc , _msg .encode (),
423+ jwe .b64_encode_header (),
420424 cek , iv = iv )
421425 return jwe .pack (parts = [jek , iv , ctxt , tag ])
422426
@@ -513,9 +517,9 @@ def decrypt(self, token, key):
513517 except AssertionError :
514518 raise NotSupportedAlgorithm (enc )
515519
516- msg , flag = self ._decrypt (enc , cek , jwe .ciphertext (),
520+ msg , flag = self ._decrypt (enc , cek , jwe .ciphertext (),
517521 jwe .b64_protected_header (),
518- jwe .initialization_vector (),
522+ jwe .initialization_vector (),
519523 jwe .authentication_tag ())
520524 if flag is False :
521525 raise DecryptionFailed ()
@@ -550,16 +554,16 @@ def enc_setup(self, msg, auth_data, key=None, **kwargs):
550554 "apu" : b64e (apu ),
551555 "apv" : b64e (apv ),
552556 }
553-
557+
554558 cek , iv = self ._generate_key_and_iv (self .enc )
555559 if self .alg == "ECDH-ES" :
556560 try :
557561 dk_len = KEYLEN [self .enc ]
558562 except KeyError :
559563 raise Exception (
560564 "Unknown key length for algorithm %s" % self .enc )
561-
562- cek = ecdh_derive_key (curve , eprivk , key , apu , apv , self .enc ,
565+
566+ cek = ecdh_derive_key (curve , eprivk , key , apu , apv , self .enc ,
563567 dk_len )
564568 elif self .alg in ["ECDH-ES+A128KW" , "ECDH-ES+A192KW" , "ECDH-ES+A256KW" ]:
565569 _pre , _post = self .alg .split ("+" )
@@ -623,6 +627,7 @@ def encrypt(self, keys=None, cek="", iv="", **kwargs):
623627 elif _alg .startswith ("A" ) and _alg .endswith ("KW" ):
624628 encrypter = JWE_SYM (self .msg , ** self ._dict )
625629 else :
630+ logger .error ("'{}' is not a supported algorithm" .format (_alg ))
626631 raise NotSupportedAlgorithm
627632
628633 if keys :
@@ -631,6 +636,9 @@ def encrypt(self, keys=None, cek="", iv="", **kwargs):
631636 keys = self ._pick_keys (self ._get_keys (), use = "enc" )
632637
633638 if not keys :
639+ logger .error (
640+ "Could not find any suitable encryption key for alg='{"
641+ "}'" .format (_alg ))
634642 raise NoSuitableEncryptionKey (_alg )
635643
636644 if cek :
@@ -650,20 +658,21 @@ def encrypt(self, keys=None, cek="", iv="", **kwargs):
650658 raise err
651659 else :
652660 logger .debug (
653- "Encrypted message using key with kid=%s" % key .kid )
661+ "Encrypted message using key with kid={}" . format ( key .kid ) )
654662 return token
655663
664+ logger .error ("Could not find any suitable encryption key" )
656665 raise NoSuitableEncryptionKey ()
657666
658667 def decrypt (self , token , keys = None , alg = None ):
659668 jwe = JWEnc ().unpack (token )
660- #header, ek, eiv, ctxt, tag = token.split(b".")
661- #self.parse_header(header)
669+ # header, ek, eiv, ctxt, tag = token.split(b".")
670+ # self.parse_header(header)
662671
663672 _alg = jwe .headers ["alg" ]
664673 if alg and alg != _alg :
665674 raise WrongEncryptionAlgorithm ()
666-
675+
667676 if _alg in ["RSA-OAEP" , "RSA1_5" ]:
668677 decrypter = JWE_RSA (** self ._dict )
669678 elif _alg .startswith ("A" ) and _alg .endswith ("KW" ):
0 commit comments