libtpmtss: Read RSA public key exponent instead of assuming its value
Up to now it was assumed that the RSA public key exponent is equal to 2^16+1. Although this is probably true in most if not all cases, it is not correct according to the TPM 2.0 specification. This patch fixes that by reading the exponent from the structure returned by TPM2_ReadPublic. Closes strongswan/strongswan#121.
This commit is contained in:
parent
220b0cb29c
commit
7533cedb9a
|
@ -481,6 +481,7 @@ METHOD(tpm_tss_t, get_public, chunk_t,
|
|||
TPM2B_PUBLIC_KEY_RSA *rsa;
|
||||
TPMT_RSA_SCHEME *scheme;
|
||||
chunk_t aik_exponent, aik_modulus;
|
||||
uint32_t exponent;
|
||||
|
||||
scheme = &public.t.publicArea.parameters.rsaDetail.scheme;
|
||||
sig_alg = scheme->scheme;
|
||||
|
@ -488,7 +489,15 @@ METHOD(tpm_tss_t, get_public, chunk_t,
|
|||
|
||||
rsa = &public.t.publicArea.unique.rsa;
|
||||
aik_modulus = chunk_create(rsa->t.buffer, rsa->t.size);
|
||||
aik_exponent = chunk_from_chars(0x01, 0x00, 0x01);
|
||||
exponent = public.t.publicArea.parameters.rsaDetail.exponent;
|
||||
if (!exponent)
|
||||
{
|
||||
aik_exponent = chunk_from_chars(0x01, 0x00, 0x01);
|
||||
}
|
||||
else
|
||||
{
|
||||
aik_exponent = chunk_from_thing(exponent);
|
||||
}
|
||||
|
||||
/* subjectPublicKeyInfo encoding of RSA public key */
|
||||
if (!lib->encoding->encode(lib->encoding, PUBKEY_SPKI_ASN1_DER,
|
||||
|
|
|
@ -435,6 +435,7 @@ METHOD(tpm_tss_t, get_public, chunk_t,
|
|||
TPM2B_PUBLIC_KEY_RSA *rsa;
|
||||
TPMT_RSA_SCHEME *scheme;
|
||||
chunk_t aik_exponent, aik_modulus;
|
||||
uint32_t exponent;
|
||||
|
||||
scheme = &public.publicArea.parameters.rsaDetail.scheme;
|
||||
sig_alg = scheme->scheme;
|
||||
|
@ -442,7 +443,15 @@ METHOD(tpm_tss_t, get_public, chunk_t,
|
|||
|
||||
rsa = &public.publicArea.unique.rsa;
|
||||
aik_modulus = chunk_create(rsa->buffer, rsa->size);
|
||||
aik_exponent = chunk_from_chars(0x01, 0x00, 0x01);
|
||||
exponent = public.publicArea.parameters.rsaDetail.exponent;
|
||||
if (!exponent)
|
||||
{
|
||||
aik_exponent = chunk_from_chars(0x01, 0x00, 0x01);
|
||||
}
|
||||
else
|
||||
{
|
||||
aik_exponent = chunk_from_thing(exponent);
|
||||
}
|
||||
|
||||
/* subjectPublicKeyInfo encoding of RSA public key */
|
||||
if (!lib->encoding->encode(lib->encoding, PUBKEY_SPKI_ASN1_DER,
|
||||
|
|
Loading…
Reference in New Issue