|
1 | 1 | import binascii |
2 | 2 |
|
3 | 3 | import six |
4 | | -from pyasn1.codec.der import encoder |
5 | 4 | from pyasn1.error import PyAsn1Error |
6 | | -from pyasn1.type import univ |
7 | 5 |
|
8 | 6 | import rsa as pyrsa |
9 | 7 | import rsa.pem as pyrsa_pem |
10 | | -from rsa.asn1 import OpenSSLPubKey, AsnPubKey, PubKeyHeader |
11 | 8 |
|
12 | 9 | from jose.backends.base import Key |
13 | | -from jose.backends._asn1 import rsa_private_key_pkcs1_to_pkcs8, rsa_private_key_pkcs8_to_pkcs1 |
| 10 | +from jose.backends._asn1 import ( |
| 11 | + rsa_private_key_pkcs1_to_pkcs8, |
| 12 | + rsa_private_key_pkcs8_to_pkcs1, |
| 13 | + rsa_public_key_pkcs1_to_pkcs8, |
| 14 | +) |
14 | 15 | from jose.constants import ALGORITHMS |
15 | 16 | from jose.exceptions import JWKError |
16 | 17 | from jose.utils import base64_to_long, long_to_base64 |
@@ -226,19 +227,9 @@ def to_pem(self, pem_format='PKCS8'): |
226 | 227 | raise ValueError("Invalid pem format specified: %r" % (pem_format,)) |
227 | 228 | else: |
228 | 229 | if pem_format == 'PKCS8': |
229 | | - asn_key = AsnPubKey() |
230 | | - asn_key.setComponentByName('modulus', self._prepared_key.n) |
231 | | - asn_key.setComponentByName('publicExponent', self._prepared_key.e) |
232 | | - der = encoder.encode(asn_key) |
233 | | - |
234 | | - header = PubKeyHeader() |
235 | | - header['oid'] = univ.ObjectIdentifier(RSA_ENCRYPTION_ASN1_OID) |
236 | | - pub_key = OpenSSLPubKey() |
237 | | - pub_key['header'] = header |
238 | | - pub_key['key'] = univ.BitString.fromOctetString(der) |
239 | | - |
240 | | - der = encoder.encode(pub_key) |
241 | | - pem = pyrsa_pem.save_pem(der, pem_marker='PUBLIC KEY') |
| 230 | + pkcs1_der = self._prepared_key.save_pkcs1(format="DER") |
| 231 | + pkcs8_der = rsa_public_key_pkcs1_to_pkcs8(pkcs1_der) |
| 232 | + pem = pyrsa_pem.save_pem(pkcs8_der, pem_marker='PUBLIC KEY') |
242 | 233 | elif pem_format == 'PKCS1': |
243 | 234 | der = self._prepared_key.save_pkcs1(format='DER') |
244 | 235 | pem = pyrsa_pem.save_pem(der, pem_marker='RSA PUBLIC KEY') |
|
0 commit comments