1212from .exception import DeSerializationNotPossible
1313from .exception import JWKException
1414from .exception import UnknownKeyType
15+ from .exception import UnsupportedAlgorithm
16+ from .exception import UnsupportedECurve
1517from .exception import UpdateFailed
1618from .jwk .ec import ECKey
1719from .jwk .ec import import_private_key_from_file
3638# _err = json.dumps({'error': error, 'error_description': descr})
3739# raise excep(_err, 'application/json')
3840
39-
41+ # Make sure the keys are all uppercase
4042K2C = {
4143 "RSA" : RSAKey ,
4244 "EC" : ECKey ,
43- "oct " : SYMKey ,
45+ "OCT " : SYMKey ,
4446}
4547
4648MAP = {'dec' : 'enc' , 'enc' : 'enc' , 'ver' : 'sig' , 'sig' : 'sig' }
@@ -242,33 +244,39 @@ def do_keys(self, keys):
242244 :return:
243245 """
244246 for inst in keys :
245- typ = inst ["kty" ]
247+ inst ['kty' ] = inst ["kty" ].upper ()
248+ _typ = inst ['kty' ]
246249 try :
247250 _usage = harmonize_usage (inst ['use' ])
248251 except KeyError :
249252 _usage = ['' ]
250253 else :
251254 del inst ['use' ]
252255
253- flag = 0
256+ _error = ''
254257 for _use in _usage :
255- for _typ in [typ , typ .lower (), typ .upper ()]:
256- try :
257- _key = K2C [_typ ](use = _use , ** inst )
258- except KeyError :
259- continue
260- except JWKException as err :
261- LOGGER .warning ('While loading keys: %s' , err )
262- else :
263- if _key not in self ._keys :
264- if not _key .kid :
265- _key .add_kid ()
266- self ._keys .append (_key )
267- flag = 1
268- break
269- if not flag :
270- LOGGER .warning (
271- 'While loading keys, UnknownKeyType: %s' , typ )
258+ try :
259+ _key = K2C [_typ ](use = _use , ** inst )
260+ except KeyError :
261+ _error = 'UnknownKeyType: {}' .format (_typ )
262+ continue
263+ except (UnsupportedECurve , UnsupportedAlgorithm ) as err :
264+ _error = str (err )
265+ break
266+ except JWKException as err :
267+ LOGGER .warning ('While loading keys: %s' , err )
268+ _error = str (err )
269+ else :
270+ if _key not in self ._keys :
271+ if not _key .kid :
272+ _key .add_kid ()
273+ self ._keys .append (_key )
274+ _error = ''
275+ break
276+ if _error :
277+ LOGGER .warning ('While loading keys, %s' , _error )
278+
279+ self .last_updated = time .time ()
272280
273281 def do_local_jwk (self , filename ):
274282 """
@@ -282,8 +290,6 @@ def do_local_jwk(self, filename):
282290 else :
283291 self .do_keys ([_info ])
284292
285- self .last_updated = time .time ()
286-
287293 def do_local_der (self , filename , keytype , keyusage = None , kid = '' ):
288294 """
289295 Load a DER encoded file amd create a key from it.
@@ -292,29 +298,25 @@ def do_local_der(self, filename, keytype, keyusage=None, kid=''):
292298 :param keytype: Presently 'rsa' and 'ec' supported
293299 :param keyusage: encryption ('enc') or signing ('sig') or both
294300 """
295- if keytype .lower () == 'rsa' :
296- _bkey = import_private_rsa_key_from_file (filename )
297- _key = RSAKey ().load_key (_bkey )
298- elif keytype .lower () == 'ec' :
299- _bkey = import_private_key_from_file (filename )
300- _key = ECKey ().load_key (_bkey )
301+ key_args = {}
302+ _kty = keytype .lower ()
303+ if _kty in ['rsa' , 'ec' ]:
304+ key_args ["kty" ] = _kty
305+ _key = import_private_rsa_key_from_file (filename )
306+ key_args ["priv_key" ] = _key
307+ key_args ["pub_key" ] = _key .public_key ()
301308 else :
302- raise NotImplementedError ('No support for DER decoding of that key type' )
309+ raise NotImplementedError ('No support for DER decoding of key type {}' . format ( _kty ) )
303310
304311 if not keyusage :
305- keyusage = ["enc" , "sig" ]
312+ key_args [ "use" ] = ["enc" , "sig" ]
306313 else :
307- keyusage = harmonize_usage (keyusage )
314+ key_args [ "use" ] = harmonize_usage (keyusage )
308315
309- for use in keyusage :
310- _key .use = use
311- if kid :
312- _key .kid = kid
313- if not _key .kid :
314- _key .add_kid ()
315- self ._keys .append (_key )
316+ if kid :
317+ key_args ['kid' ] = kid
316318
317- self .last_updated = time . time ( )
319+ self .do_keys ([ key_args ] )
318320
319321 def do_remote (self ):
320322 """
0 commit comments