Extracting the public modulus from an RSA public key?
Thomas Dwyer III
tomiii at tomiii.com
Wed May 6 04:20:34 UTC 2020
I'm porting some old legacy code from OpenSSL 1.0.2 to OpenSSL 3.0.0. A
portion of this code reads X509 certificates, extracts the public key, and
passes it to firmware that I cannot modify. Unfortunately, this legacy
firmware API was very poorly designed such that the public key is passed in
a way similar to:
RSA *rsa = get_pubkey_from_cert(...)
BIGNUM *bn = rsa->n;
int len = BN_num_bytes(bn);
unsigned char *buf = malloc(len);
BN_bn2bin(bn, buf);
pubkey_to_firmware(buf, len);
Yuck. Ignoring the fact that this firmware appears to assume a constant
exponent 'e', I cannot find a way to extract the modulus 'n' from the RSA
key. I understand this is intentional. The only solution I could find is to
print the key to a buffer via EVP_PKEY_print_public(), parse the result to
extract the modulus into a giant hex string, and then BN_hex2bn() that back
into a BIGNUM. Is there a better way?
Thanks,
Tom.III
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mta.openssl.org/pipermail/openssl-users/attachments/20200505/8aa2adb0/attachment.html>
More information about the openssl-users
mailing list