Skip to content

Commit

Permalink
feat: support import key from a certificate pem file
Browse files Browse the repository at this point in the history
  • Loading branch information
lepture committed Jan 20, 2025
1 parent e31aaf6 commit bfff3c1
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 0 deletions.
5 changes: 5 additions & 0 deletions src/joserfc/rfc7517/pem.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from __future__ import annotations
from typing import Any, Literal, cast
from abc import ABCMeta, abstractmethod
from cryptography.x509 import load_pem_x509_certificate
from cryptography.hazmat.primitives.serialization import (
load_pem_private_key,
load_pem_public_key,
Expand Down Expand Up @@ -38,6 +39,10 @@ def load_pem_key(
elif b"PRIVATE" in raw:
key = load_pem_private_key(raw, password=password, backend=default_backend())

elif b"CERTIFICATE" in raw:
cert = load_pem_x509_certificate(raw, backend=default_backend())
return cert.public_key()

else:
try:
key = load_der_private_key(raw, password=password, backend=default_backend())
Expand Down
6 changes: 6 additions & 0 deletions tests/jwk/test_rsa_key.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,12 @@ def test_import_from_der_bytes(self):
key1 = RSAKey.import_key(value1)
self.assertEqual(value1, key1.as_der())

def test_import_from_certificate(self):
firebase_cert = read_key("firebase-cert.pem")
key: RSAKey = RSAKey.import_key(firebase_cert)
data = key.as_dict()
self.assertEqual(data['kty'], 'RSA')

def test_output_with_password(self):
private_pem = read_key("rsa-openssl-private.pem")
key: RSAKey = RSAKey.import_key(private_pem)
Expand Down
19 changes: 19 additions & 0 deletions tests/keys/firebase-cert.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
-----BEGIN CERTIFICATE-----
MIIDHTCCAgWgAwIBAgIJANuivDoSiT/NMA0GCSqGSIb3DQEBBQUAMDExLzAtBgNV
BAMMJnNlY3VyZXRva2VuLnN5c3RlbS5nc2VydmljZWFjY291bnQuY29tMB4XDTI0
MTIxMDA3MzI0OVoXDTI0MTIyNjE5NDc0OVowMTEvMC0GA1UEAwwmc2VjdXJldG9r
ZW4uc3lzdGVtLmdzZXJ2aWNlYWNjb3VudC5jb20wggEiMA0GCSqGSIb3DQEBAQUA
A4IBDwAwggEKAoIBAQDhywhKx2L+GZJLjmGcOVMCc+x09hrYpCVk3K/LxgJtZZ34
vHeFUjGexazZiSc9LHd03fNmATFcdtqpVW4Qz+xsP5mQXEqbwPQu2qWZhb5VY8Z6
Oh02uFFxRCdegupuzggdqEhc/QlkrKb2Y/undxcIyRcXKWcDaEn+5dqQA2NhjMp5
ir1YsKRanZIJ69wR65Ok8e0YlHHGsP+7uJaW0b1yr0RyilyluEsb7DmpMV/7j7pr
cnNnOnL7jhpLW2gjbVzjB1FR5ScNy5gKp72htFkxdGxS58/AQoT06kBu80OI2VMb
mijU6JD4b3tIYtHZp9FOiCNhiQS1e/GTDyGT1ZT1AgMBAAGjODA2MAwGA1UdEwEB
/wQCMAAwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMCMA0G
CSqGSIb3DQEBBQUAA4IBAQDOf4MfPzEesqqm50J0gVW1geCiukD6MrH1nPGuUhm8
FUYy/4W6Rx69XnKKRxb1rEQwrqmi8WNiELRrpXugY5ieowuRwlcrPk450bB1IwK5
Jxcqgf4fxwbvqeoADzl0Z0+JxoiYDpH2FMG1HRpdl/YCzB7W0ftv3q1uUqTDLQ+r
K6Cm1rHyznsOio9oJknkQ8mPbvE7qSRdCYir806gGurzyhO1RacbR97B8M/vujyc
sNxCxxSphHCgCBW1mz4XqgOF4Sd/XYPrO8/2qhoSjqaqta+gmg644afx82NqsW+Z
NJrR9cZxaLNEfwzv+fX9s70xT1nSa9U4avINE58o3Dsk
-----END CERTIFICATE-----

0 comments on commit bfff3c1

Please sign in to comment.