libtpmtss: Convert RSA exponent to big-endian when provided by a TPM 2.0

While the TPM expects and returns the data in big-endian, the SAPI
implementation converts it to native-endianness.  As stated in the
SAPI specification (section 3.2):

  8. All SAPI data SHALL be in native-endian format.  This means that
     the SAPI implementation will do any endian conversion required for
     both inputs and outputs.

So to use the exponent in a chunk we have to convert it to big-endian again.

Fixes: 7533cedb9a ("libtpmtss: Read RSA public key exponent instead of assuming its value")
This commit is contained in:
Tobias Brunner 2019-12-10 10:12:48 +01:00
parent a84aeb01aa
commit 8ee1242f14
2 changed files with 2 additions and 2 deletions

View File

@ -503,7 +503,7 @@ METHOD(tpm_tss_t, get_public, chunk_t,
rsa = &public.t.publicArea.unique.rsa;
aik_modulus = chunk_create(rsa->t.buffer, rsa->t.size);
exponent = public.t.publicArea.parameters.rsaDetail.exponent;
exponent = htonl(public.t.publicArea.parameters.rsaDetail.exponent);
if (!exponent)
{
aik_exponent = chunk_from_chars(0x01, 0x00, 0x01);

View File

@ -457,7 +457,7 @@ METHOD(tpm_tss_t, get_public, chunk_t,
rsa = &public.publicArea.unique.rsa;
aik_modulus = chunk_create(rsa->buffer, rsa->size);
exponent = public.publicArea.parameters.rsaDetail.exponent;
exponent = htonl(public.publicArea.parameters.rsaDetail.exponent);
if (!exponent)
{
aik_exponent = chunk_from_chars(0x01, 0x00, 0x01);