Skip to content

Commit 79f498e

Browse files
author
Rebecka Gulliksson
committed
Fix support for loading RSAKey from X.509 cert.
1 parent 7f94c0c commit 79f498e

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

src/jwkest/jwk.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,10 @@ def __init__(self, kty="RSA", alg="", use="", kid="", key=None,
340340
self.di = di
341341
self.qi = qi
342342

343-
if not self.key and self.n and self.e:
343+
has_public_key_parts = len(self.n) > 0 and len(self.e)
344+
has_x509_cert_chain = len(self.x5c) > 0
345+
346+
if not self.key and (has_public_key_parts or has_x509_cert_chain):
344347
self.deserialize()
345348
elif self.key and not (self.n and self.e):
346349
self._split()
@@ -376,8 +379,7 @@ def deserialize(self):
376379
if self.x5t: # verify the cert
377380
pass
378381

379-
cert = "\n".join([PREFIX, str(self.x5c[0]), POSTFIX])
380-
self.key = import_rsa_key(cert)
382+
self.key = der2rsa(base64.b64decode(self.x5c[0].encode("ascii")))
381383
self._split()
382384
if len(self.x5c) > 1: # verify chain
383385
pass

tests/test_2_jwk.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,5 +310,26 @@ def test_private_key_from_jwk():
310310
assert _eq(list(_d.keys()), kspec.keys())
311311

312312

313+
def test_rsa_pubkey_from_x509_cert_chain():
314+
cert = "MIID0jCCArqgAwIBAgIBSTANBgkqhkiG9w0BAQQFADCBiDELMAkGA1UEBhMCREUxEDAOBgNVBAgTB0JhdmF" \
315+
"yaWExEzARBgNVBAoTCkJpb0lEIEdtYkgxLzAtBgNVBAMTJkJpb0lEIENsaWVudCBDZXJ0aWZpY2F0aW9uIE" \
316+
"F1dGhvcml0eSAyMSEwHwYJKoZIhvcNAQkBFhJzZWN1cml0eUBiaW9pZC5jb20wHhcNMTUwNDE1MTQ1NjM4W" \
317+
"hcNMTYwNDE0MTQ1NjM4WjBfMQswCQYDVQQGEwJERTETMBEGA1UEChMKQmlvSUQgR21iSDE7MDkGA1UEAxMy" \
318+
"QmlvSUQgT3BlbklEIENvbm5lY3QgSWRlbnRpdHkgUHJvdmlkZXIgQ2VydGlmaWNhdGUwggEiMA0GCSqGSIb" \
319+
"3DQEBAQUAA4IBDwAwggEKAoIBAQC9aFETmU6kDfMBPKM2OfI5eedO3XP12Ci0hDC99bdzUUIhDZG34PQqcH" \
320+
"89gVWGthJv5w3kqpdSrxfPCFMsBdnyk1VCuXmLgXS8s4oBtt1c9iM0J8X6Z+5subS3Xje8fu55Csh0JXNfo" \
321+
"y29rCY/O6y0fNignegg0KS4PHv5T+agFmaG4rxCQV9/kd8tlo/HTyVPsuSPDgsXxisIVqur9aujYwdCoAZU" \
322+
"8OU+5ccMLNIhpWJn+xNjgDRr4L9nxAYKc9vy+f7EoH3LT24B71zazZsQ78vpocz98UT/7vdgS/IYXFniPuU" \
323+
"fblja7cq31bUoySDx6FYrtfCSUxNhaZSX8mppAgMBAAGjbzBtMAkGA1UdEwQCMAAwHQYDVR0OBBYEFOfg3f" \
324+
"/ewBLK5SkcBEXusD62OlzaMB8GA1UdIwQYMBaAFCQmdD+nVcVLaKt3vu73XyNgpPEpMAsGA1UdDwQEAwIDi" \
325+
"DATBgNVHSUEDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQQFAAOCAQEAKQjhcL/iGhy0549hEHRQArJXs1im" \
326+
"7W244yE+TSChdMWKe2eWvEhc9wX1aVV2mNJM1ZNeYSgfoK6jjuXaHiSaIJEUcW1wVM3rDywi2a9GKzOFgrW" \
327+
"pVbpXQ05LSE7qEEWRmSpIMyKTitUalNpNA6cOML5hiuUTfZbw7OvPwbnbSYYL674gEA2sW5AhPiCr9dVnMn" \
328+
"/UK2II40802zdXUOvIxWeXpcsCxxZMjp/Ir2jIZWOEjlAXQVGr2oBfL/be/o5WXpaqWSfPRBZV8htRIf0vT" \
329+
"lGx7xR8FPWDYmcj4o/tKoNC1AchjOnCwwE/mj4hgtoAsHNmYXF0oZXk7cozqYDqKQ=="
330+
rsa_key = RSAKey(x5c=[cert])
331+
assert rsa_key.key
332+
333+
313334
if __name__ == "__main__":
314335
test_private_key_from_jwk()

0 commit comments

Comments
 (0)