1
1
# coding: utf-8
2
2
import os
3
3
4
+ import pem
4
5
from cryptography .hazmat .backends import default_backend
5
6
from cryptography .hazmat .primitives .serialization import load_pem_private_key , load_pem_public_key
6
7
from jwt .exceptions import InvalidKeyError
@@ -17,8 +18,7 @@ def read_key_file(file_name):
17
18
file_path = os .path .abspath (os .path .join (api_settings .KEY_STORE_ROOT , file_name ))
18
19
else :
19
20
file_path = os .path .abspath (file_name )
20
- with open (file_path , "rb" ) as file_obj :
21
- return file_obj .read ()
21
+ return pem .parse_file (file_path )
22
22
23
23
24
24
def get_key_id (file_name ):
@@ -45,12 +45,20 @@ def get_key_file_name(keys, issuer, key_id=None):
45
45
def get_private_key_and_key_id (issuer , key_id = None ):
46
46
file_name = get_key_file_name (keys = api_settings .PRIVATE_KEYS , issuer = issuer , key_id = key_id )
47
47
file_data = read_key_file (file_name = file_name )
48
- key = load_pem_private_key (file_data , password = None , backend = default_backend ())
48
+ try :
49
+ key_data = next (o .as_bytes () for o in file_data if isinstance (o , pem .PrivateKey ))
50
+ except StopIteration :
51
+ raise InvalidKeyError (f"No private key found for { issuer = } { key_id = } " )
52
+ key = load_pem_private_key (key_data , password = None , backend = default_backend ())
49
53
return key , get_key_id (file_name = file_name )
50
54
51
55
52
56
def get_public_key_and_key_id (issuer , key_id = None ):
53
57
file_name = get_key_file_name (keys = api_settings .PUBLIC_KEYS , issuer = issuer , key_id = key_id )
54
58
file_data = read_key_file (file_name = file_name )
55
- key = load_pem_public_key (file_data , backend = default_backend ())
59
+ try :
60
+ key_data = next (o .as_bytes () for o in file_data if isinstance (o , pem .PublicKey ))
61
+ except StopIteration :
62
+ raise InvalidKeyError (f"No public key found for { issuer = } { key_id = } " )
63
+ key = load_pem_public_key (key_data , backend = default_backend ())
56
64
return key , get_key_id (file_name = file_name )
0 commit comments