mirror of https://github.com/wolfSSL/wolfTPM.git
F-2533 - https://fenrir.wolfssl.com/finding/2533 - Add TPM2_Packet_ParseSensitive counterpart and roundtrip test
parent
07924bf158
commit
adc2713145
|
|
@ -825,6 +825,45 @@ void TPM2_Packet_AppendSensitive(TPM2_Packet* packet, TPM2B_SENSITIVE* sensitive
|
|||
TPM2_Packet_PlaceU16(packet, tmpSz);
|
||||
}
|
||||
|
||||
void TPM2_Packet_ParseSensitive(TPM2_Packet* packet, TPM2B_SENSITIVE* sensitive)
|
||||
{
|
||||
TPMU_SENSITIVE_COMPOSITE* sens = &sensitive->sensitiveArea.sensitive;
|
||||
|
||||
TPM2_Packet_ParseU16(packet, &sensitive->size);
|
||||
if (sensitive->size == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
TPM2_Packet_ParseU16(packet, &sensitive->sensitiveArea.sensitiveType);
|
||||
|
||||
TPM2_Packet_ParseU16Buf(packet, &sensitive->sensitiveArea.authValue.size,
|
||||
sensitive->sensitiveArea.authValue.buffer,
|
||||
(UINT16)sizeof(sensitive->sensitiveArea.authValue.buffer));
|
||||
|
||||
TPM2_Packet_ParseU16Buf(packet, &sensitive->sensitiveArea.seedValue.size,
|
||||
sensitive->sensitiveArea.seedValue.buffer,
|
||||
(UINT16)sizeof(sensitive->sensitiveArea.seedValue.buffer));
|
||||
|
||||
switch (sensitive->sensitiveArea.sensitiveType) {
|
||||
case TPM_ALG_RSA:
|
||||
TPM2_Packet_ParseU16Buf(packet, &sens->rsa.size,
|
||||
sens->rsa.buffer, (UINT16)sizeof(sens->rsa.buffer));
|
||||
break;
|
||||
case TPM_ALG_ECC:
|
||||
TPM2_Packet_ParseU16Buf(packet, &sens->ecc.size,
|
||||
sens->ecc.buffer, (UINT16)sizeof(sens->ecc.buffer));
|
||||
break;
|
||||
case TPM_ALG_KEYEDHASH:
|
||||
TPM2_Packet_ParseU16Buf(packet, &sens->bits.size,
|
||||
sens->bits.buffer, (UINT16)sizeof(sens->bits.buffer));
|
||||
break;
|
||||
case TPM_ALG_SYMCIPHER:
|
||||
TPM2_Packet_ParseU16Buf(packet, &sens->sym.size,
|
||||
sens->sym.buffer, (UINT16)sizeof(sens->sym.buffer));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void TPM2_Packet_AppendSensitiveCreate(TPM2_Packet* packet, TPM2B_SENSITIVE_CREATE* sensitive)
|
||||
{
|
||||
int tmpSz = 0;
|
||||
|
|
|
|||
|
|
@ -1944,6 +1944,77 @@ static void test_TPM2_Signature_EcSchnorrSm2Serialize(void)
|
|||
printf("Test TPM Wrapper:\tSignature ECSCHNORR/SM2 serialize:\tPassed\n");
|
||||
}
|
||||
|
||||
static void test_TPM2_Sensitive_Roundtrip(void)
|
||||
{
|
||||
TPM2_Packet packet;
|
||||
byte buf[512];
|
||||
TPM2B_SENSITIVE sensIn, sensOut;
|
||||
const byte authBuf[4] = {0x01, 0x02, 0x03, 0x04};
|
||||
const byte seedBuf[8] = {0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11};
|
||||
const byte rsaPriv[16] = {
|
||||
0xde, 0xad, 0xbe, 0xef, 0x11, 0x22, 0x33, 0x44,
|
||||
0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc
|
||||
};
|
||||
|
||||
/* RSA sensitive roundtrip */
|
||||
XMEMSET(&sensIn, 0, sizeof(sensIn));
|
||||
sensIn.sensitiveArea.sensitiveType = TPM_ALG_RSA;
|
||||
sensIn.sensitiveArea.authValue.size = sizeof(authBuf);
|
||||
XMEMCPY(sensIn.sensitiveArea.authValue.buffer, authBuf, sizeof(authBuf));
|
||||
sensIn.sensitiveArea.seedValue.size = sizeof(seedBuf);
|
||||
XMEMCPY(sensIn.sensitiveArea.seedValue.buffer, seedBuf, sizeof(seedBuf));
|
||||
sensIn.sensitiveArea.sensitive.rsa.size = sizeof(rsaPriv);
|
||||
XMEMCPY(sensIn.sensitiveArea.sensitive.rsa.buffer, rsaPriv,
|
||||
sizeof(rsaPriv));
|
||||
|
||||
XMEMSET(buf, 0, sizeof(buf));
|
||||
XMEMSET(&packet, 0, sizeof(packet));
|
||||
packet.buf = buf;
|
||||
packet.size = sizeof(buf);
|
||||
|
||||
TPM2_Packet_AppendSensitive(&packet, &sensIn);
|
||||
|
||||
packet.pos = 0;
|
||||
XMEMSET(&sensOut, 0, sizeof(sensOut));
|
||||
TPM2_Packet_ParseSensitive(&packet, &sensOut);
|
||||
|
||||
AssertIntEQ(sensOut.sensitiveArea.sensitiveType, TPM_ALG_RSA);
|
||||
AssertIntEQ(sensOut.sensitiveArea.authValue.size, sizeof(authBuf));
|
||||
AssertIntEQ(XMEMCMP(sensOut.sensitiveArea.authValue.buffer,
|
||||
authBuf, sizeof(authBuf)), 0);
|
||||
AssertIntEQ(sensOut.sensitiveArea.seedValue.size, sizeof(seedBuf));
|
||||
AssertIntEQ(XMEMCMP(sensOut.sensitiveArea.seedValue.buffer,
|
||||
seedBuf, sizeof(seedBuf)), 0);
|
||||
AssertIntEQ(sensOut.sensitiveArea.sensitive.rsa.size, sizeof(rsaPriv));
|
||||
AssertIntEQ(XMEMCMP(sensOut.sensitiveArea.sensitive.rsa.buffer,
|
||||
rsaPriv, sizeof(rsaPriv)), 0);
|
||||
|
||||
/* ECC sensitive roundtrip */
|
||||
XMEMSET(&sensIn, 0, sizeof(sensIn));
|
||||
sensIn.sensitiveArea.sensitiveType = TPM_ALG_ECC;
|
||||
sensIn.sensitiveArea.sensitive.ecc.size = sizeof(rsaPriv);
|
||||
XMEMCPY(sensIn.sensitiveArea.sensitive.ecc.buffer, rsaPriv,
|
||||
sizeof(rsaPriv));
|
||||
|
||||
XMEMSET(buf, 0, sizeof(buf));
|
||||
XMEMSET(&packet, 0, sizeof(packet));
|
||||
packet.buf = buf;
|
||||
packet.size = sizeof(buf);
|
||||
|
||||
TPM2_Packet_AppendSensitive(&packet, &sensIn);
|
||||
|
||||
packet.pos = 0;
|
||||
XMEMSET(&sensOut, 0, sizeof(sensOut));
|
||||
TPM2_Packet_ParseSensitive(&packet, &sensOut);
|
||||
|
||||
AssertIntEQ(sensOut.sensitiveArea.sensitiveType, TPM_ALG_ECC);
|
||||
AssertIntEQ(sensOut.sensitiveArea.sensitive.ecc.size, sizeof(rsaPriv));
|
||||
AssertIntEQ(XMEMCMP(sensOut.sensitiveArea.sensitive.ecc.buffer,
|
||||
rsaPriv, sizeof(rsaPriv)), 0);
|
||||
|
||||
printf("Test TPM Wrapper:\tSensitive roundtrip:\t\tPassed\n");
|
||||
}
|
||||
|
||||
static void test_KeySealTemplate(void)
|
||||
{
|
||||
int rc;
|
||||
|
|
@ -3094,6 +3165,7 @@ int unit_tests(int argc, char *argv[])
|
|||
test_TPM2_SchemeSerialize();
|
||||
test_TPM2_KeyedHashScheme_XorSerialize();
|
||||
test_TPM2_Signature_EcSchnorrSm2Serialize();
|
||||
test_TPM2_Sensitive_Roundtrip();
|
||||
test_KeySealTemplate();
|
||||
test_SealAndKeyedHash_Boundaries();
|
||||
test_GetAlgId();
|
||||
|
|
|
|||
|
|
@ -197,7 +197,8 @@ WOLFTPM_LOCAL void TPM2_Packet_AppendEccPoint(TPM2_Packet* packet, TPMS_ECC_POIN
|
|||
WOLFTPM_LOCAL void TPM2_Packet_ParseEccPoint(TPM2_Packet* packet, TPMS_ECC_POINT* point);
|
||||
WOLFTPM_LOCAL void TPM2_Packet_AppendPoint(TPM2_Packet* packet, TPM2B_ECC_POINT* point);
|
||||
WOLFTPM_LOCAL void TPM2_Packet_ParsePoint(TPM2_Packet* packet, TPM2B_ECC_POINT* point);
|
||||
WOLFTPM_LOCAL void TPM2_Packet_AppendSensitive(TPM2_Packet* packet, TPM2B_SENSITIVE* sensitive);
|
||||
WOLFTPM_TEST_API void TPM2_Packet_AppendSensitive(TPM2_Packet* packet, TPM2B_SENSITIVE* sensitive);
|
||||
WOLFTPM_TEST_API void TPM2_Packet_ParseSensitive(TPM2_Packet* packet, TPM2B_SENSITIVE* sensitive);
|
||||
WOLFTPM_LOCAL void TPM2_Packet_AppendSensitiveCreate(TPM2_Packet* packet, TPM2B_SENSITIVE_CREATE* sensitive);
|
||||
#ifdef WOLFTPM_FWTPM
|
||||
/*!
|
||||
|
|
|
|||
Loading…
Reference in New Issue