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:
@@ -503,7 +503,7 @@ METHOD(tpm_tss_t, get_public, chunk_t,
|
|||||||
|
|
||||||
rsa = &public.t.publicArea.unique.rsa;
|
rsa = &public.t.publicArea.unique.rsa;
|
||||||
aik_modulus = chunk_create(rsa->t.buffer, rsa->t.size);
|
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)
|
if (!exponent)
|
||||||
{
|
{
|
||||||
aik_exponent = chunk_from_chars(0x01, 0x00, 0x01);
|
aik_exponent = chunk_from_chars(0x01, 0x00, 0x01);
|
||||||
|
|||||||
@@ -457,7 +457,7 @@ METHOD(tpm_tss_t, get_public, chunk_t,
|
|||||||
|
|
||||||
rsa = &public.publicArea.unique.rsa;
|
rsa = &public.publicArea.unique.rsa;
|
||||||
aik_modulus = chunk_create(rsa->buffer, rsa->size);
|
aik_modulus = chunk_create(rsa->buffer, rsa->size);
|
||||||
exponent = public.publicArea.parameters.rsaDetail.exponent;
|
exponent = htonl(public.publicArea.parameters.rsaDetail.exponent);
|
||||||
if (!exponent)
|
if (!exponent)
|
||||||
{
|
{
|
||||||
aik_exponent = chunk_from_chars(0x01, 0x00, 0x01);
|
aik_exponent = chunk_from_chars(0x01, 0x00, 0x01);
|
||||||
|
|||||||
Reference in New Issue
Block a user