From a6d7ed86950b28e6d743192b0de578cfb3505a0d Mon Sep 17 00:00:00 2001 From: David Garske Date: Thu, 22 Aug 2024 10:38:01 -0700 Subject: [PATCH] Added example for `TPM2_Certify`: * Added new build option for TPM provisioning (`--enable-provisioning` on by default). * Added new `wolfTPM2_CreatePrimaryKey_ex` and `WOLFTPM2_PKEY` that supports returning creation ticket/hash. * Added key templates for initial device (IDevID) and attestation keys (IAK). * Extended `create_primary` example to support creation or IDevID and IAK. * Added new policy hash helper API `wolfTPM2_PolicyHash` * Switch handle/nvIndex string parsing to use `strtoul`. ZD 18347 --- .github/workflows/make-test-swtpm.yml | 6 + .gitignore | 1 + configure.ac | 11 + examples/attestation/README.md | 55 ++- examples/attestation/activate_credential.c | 2 +- .../{credential.h => attestation.h} | 9 +- examples/attestation/certify.c | 277 +++++++++++++ examples/attestation/include.am | 23 +- examples/attestation/make_credential.c | 2 +- examples/attestation/tpm_iak_policy.png | Bin 0 -> 188567 bytes examples/attestation/tpm_idevid_policy.png | Bin 0 -> 63189 bytes examples/boot/secure_rot.c | 2 +- examples/keygen/create_primary.c | 85 +++- examples/management/flush.c | 23 +- examples/native/native_test.c | 25 +- examples/nvram/counter.c | 2 +- examples/nvram/policy_nv.c | 2 +- examples/nvram/read.c | 2 +- examples/nvram/store.c | 2 +- examples/run_examples.sh | 31 ++ src/tpm2_wrap.c | 381 ++++++++++++------ wolftpm/tpm2.h | 61 +++ wolftpm/tpm2_types.h | 3 +- wolftpm/tpm2_wrap.h | 102 ++++- 24 files changed, 925 insertions(+), 182 deletions(-) rename examples/attestation/{credential.h => attestation.h} (87%) create mode 100644 examples/attestation/certify.c create mode 100644 examples/attestation/tpm_iak_policy.png create mode 100644 examples/attestation/tpm_idevid_policy.png diff --git a/.github/workflows/make-test-swtpm.yml b/.github/workflows/make-test-swtpm.yml index c1ebefa6..b1125e71 100644 --- a/.github/workflows/make-test-swtpm.yml +++ b/.github/workflows/make-test-swtpm.yml @@ -140,6 +140,12 @@ jobs: - name: make pedantic run: make +# build not provisioning + - name: configure not provisioning + run: ./configure --disable-provisioning + - name: make not provisioning + run: make + # test without ECC - name: wolfssl no ECC working-directory: ./wolfssl diff --git a/.gitignore b/.gitignore index 756fadaa..a647c9bc 100644 --- a/.gitignore +++ b/.gitignore @@ -74,6 +74,7 @@ examples/seal/seal examples/seal/unseal examples/attestation/make_credential examples/attestation/activate_credential +examples/attestation/certify examples/boot/secure_rot examples/boot/secret_seal examples/boot/secret_unseal diff --git a/configure.ac b/configure.ac index 4980ecc4..74825c73 100644 --- a/configure.ac +++ b/configure.ac @@ -418,6 +418,17 @@ then AM_CFLAGS="$AM_CFLAGS -DWOLFTPM_FIRMWARE_UPGRADE" fi +# Enable support for provisioning identity keys for device and attestation +AC_ARG_ENABLE([provisioning], + [AS_HELP_STRING([--enable-provisioning],[Enable support for Provisioning Initial Device Identity (IDevID) and Attestation Identity Keys (default: enabled)])], + [ ENABLED_PROVISIONING=$enableval ], + [ ENABLED_PROVISIONING=yes ] + ) +if test "x$ENABLED_PROVISIONING" = "xyes" +then + AM_CFLAGS="$AM_CFLAGS -DWOLFTPM_PROVISIONING" +fi + # HARDEN FLAGS AX_HARDEN_CC_COMPILER_FLAGS diff --git a/examples/attestation/README.md b/examples/attestation/README.md index 3ff6cb34..6174d90a 100644 --- a/examples/attestation/README.md +++ b/examples/attestation/README.md @@ -10,7 +10,8 @@ Complete list of the required examples is shown below: * `./examples/attestation/make_credential`: Used by a server to create a remote attestation challenge * `./examples/attestation/activate_credential`: Used by a client to decrypt the challenge and respond -* `./examples/keygen/keygen`: Used to create a primary key(PK) and attestation key(AK) +* `./examples/attestation/certify`: Used to certify (attest) or prove an object with name is loaded in the TPM. +* `./examples/keygen/create_primary`: Used to create a primary key(PK) and attestation key(AK) Note: All of these example allow the use of the Endorsement Key and Attestation Key under the Endorsement Hierarchy. This is done by adding the `-eh` option when executing any of the three examples above. The advantage of using EK/EH is that the private key material of the EK never leaves the TPM. Anything encrypted using the public part of the EK can be encrypted only internally by the TPM owner of the EK, and EK is unique for every TPM chip. Therefore, creating challenges for Remote Attestation using the EK/EH has greater value in some scenarios. One drawback is that by using the EK the identity of the host under attestation is always known, because the EK private-public key pair identifies the TPM and in some scenarios this might rise privacy concerns. Our remote attestation examples support both AK under SRK and AK under EK. It is up to the developer to decide which one to use. @@ -99,6 +100,58 @@ TPM2_ActivateCredential success The transfer of the challenge response containing the secret in plain (or used as a symmetric key seed) is not part of the `activate_credential` example, because the exchange is also implementation specific. +### Certify Example + +The certify example shows how to use the `TPM2_Certify` API to sign the attestation info for another key. This can be used to prove that an object with a specific name is loaded into the TPM. A common example of this is using the restricted IAK to sign the attestation information for the IDevID. + +The create_primary example support creating RSA or ECC initial device identity (IDevID) and attestation identity (IAK) keys. These are created under the endorsement hierarchy and follow the "TPM 2.0 Keys for Device Identity and Attestation" TCG specification for setting up the primary key policies. Figures 10 and 11 fom this specification shows the IAK/IDevID policy. + +![Figure 10: Example IDevID Key Delegation Policy](tpm_idevid_policy.png) + +![Figure 11: Example IAK Key Delegation Policy](tpm_iak_policy.png) + +The IDevID key can be used for external non-restrictive signing. +The IAK is used for internal attestation. + +Here we use the IAK to certify the attestation information for the IDevID key. + +```sh +% ./examples/keygen/create_primary -rsa -eh -iak -keep +TPM2.0 Primary Key generation example + Algorithm: RSA + Unique: IAK + Store Handle: 0x00000000 + Use Parameter Encryption: NULL +Creating new RSA primary key... +Create Primary Handle: 0x80000000 + +% ./examples/keygen/create_primary -rsa -eh -idevid -keep +TPM2.0 Primary Key generation example + Algorithm: RSA + Unique: IDEVID + Store Handle: 0x00000000 + Use Parameter Encryption: NULL +Creating new RSA primary key... +Create Primary Handle: 0x80000001 + +% ./examples/attestation/certify -rsa -certify=0x80000001 -signer=0x80000000 +Certify 0x80000001 with 0x80000000 to generate TPM-signed attestation info +EK Policy Session: Handle 0x3000000 +TPM2_Certify complete +Certify Info 172 +RSA Signature: 256 + +% ./examples/management/flush 0x80000001 +Preparing to free TPM2.0 Resources +Freeing 80000001 object + +% ./examples/management/flush 0x80000000 +Preparing to free TPM2.0 Resources +Freeing 80000000 object +``` + +For ECC use the same steps as above, but replace `-rsa` with `-ecc`. + ## More information Please contact us at facts@wolfssl.com if you are interested in more information about Remote Attestation using wolfTPM. diff --git a/examples/attestation/activate_credential.c b/examples/attestation/activate_credential.c index d58b1a6a..32294710 100644 --- a/examples/attestation/activate_credential.c +++ b/examples/attestation/activate_credential.c @@ -33,7 +33,7 @@ #ifndef WOLFTPM2_NO_WRAPPER -#include +#include #include #include #include diff --git a/examples/attestation/credential.h b/examples/attestation/attestation.h similarity index 87% rename from examples/attestation/credential.h rename to examples/attestation/attestation.h index 68266e7b..540995d2 100644 --- a/examples/attestation/credential.h +++ b/examples/attestation/attestation.h @@ -1,4 +1,4 @@ -/* credential.h +/* attestation.h * * Copyright (C) 2006-2024 wolfSSL Inc. * @@ -19,8 +19,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA */ -#ifndef _CREDENTIAL_H_ -#define _CREDENTIAL_H_ +#ifndef _ATTESTATION_H_ +#define _ATTESTATION_H_ #ifdef __cplusplus extern "C" { @@ -30,9 +30,10 @@ int TPM2_MakeCredential_Example(void* userCtx, int argc, char *argv[]); int TPM2_ActivateCredential_Example(void* userCtx, int argc, char *argv[]); +int TPM2_Certify_Example(void* userCtx, int argc, char *argv[]); #ifdef __cplusplus } /* extern "C" */ #endif -#endif /* _CREDENTIAL_H_ */ +#endif /* _ATTESTATION_H_ */ diff --git a/examples/attestation/certify.c b/examples/attestation/certify.c new file mode 100644 index 00000000..403e85dc --- /dev/null +++ b/examples/attestation/certify.c @@ -0,0 +1,277 @@ +/* certify.c + * + * Copyright (C) 2006-2024 wolfSSL Inc. + * + * This file is part of wolfTPM. + * + * wolfTPM is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * wolfTPM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA + */ + +/* This example shows how to create a attestation for a key (like IAK) + */ + +#ifdef HAVE_CONFIG_H + #include +#endif + +#include + +#include + +#ifndef WOLFTPM2_NO_WRAPPER + +#include +#include +#include +#include + + +/******************************************************************************/ +/* --- BEGIN TPM2.0 Certify example tool -- */ +/******************************************************************************/ + +static void usage(void) +{ + printf("Expected usage:\n"); + printf("./examples/attestation/certify [-rsa/-ecc] [-certify=] [-signer=]\n"); + printf("\t* -ecc/-rsa: RSA or ECC (default is RSA)\n"); + printf("\t* -certify=[handle] Key to certify (default 0x%x)\n", 0x80000001U); + printf("\t* -signer=[handle] Key to sign with (default 0x%x)\n", 0x80000000U); + printf("\nExample Usage:\n"); + printf("./examples/keygen/create_primary -rsa -eh -iak -keep\n"); + printf("./examples/keygen/create_primary -rsa -eh -idevid -keep\n"); + printf("./examples/attestation/certify -rsa -certify=0x80000001 " + "-signer=0x80000000\n"); + printf("./examples/management/flush 0x80000001\n"); + printf("./examples/management/flush 0x80000000\n"); +} + +/* Policies for IDevID/IAK from: + * "TPM 2.0 Keys for Device Identity and Attestation" */ +static const byte PA_User_Policy[] = { + 0x83, 0x71, 0x97, 0x67, 0x44, 0x84, 0xB3, 0xF8, + 0x1A, 0x90, 0xCC, 0x8D, 0x46, 0xA5, 0xD7, 0x24, + 0xFD, 0x52, 0xD7, 0x6E, 0x06, 0x52, 0x0B, 0x64, + 0xF2, 0xA1, 0xDA, 0x1B, 0x33, 0x14, 0x69, 0xAA + }; +static const byte Certify[] = { + 0xB2, 0xA6, 0x9E, 0x63, 0x91, 0xE2, 0x68, 0x4A, + 0x0F, 0xE7, 0x52, 0xD3, 0x9E, 0x14, 0xAC, 0xD2, + 0xE5, 0xCB, 0x92, 0x2E, 0x4B, 0xD0, 0x35, 0x83, + 0x0E, 0xEA, 0x31, 0xF2, 0xAA, 0xBE, 0x98, 0x70 +}; +static const byte Activate_CredentialPolicy[] = { + 0xCD, 0x99, 0x17, 0xCF, 0x18, 0xC3, 0x84, 0x8C, + 0x3A, 0x2E, 0x60, 0x69, 0x86, 0xA0, 0x66, 0xC6, + 0x81, 0x42, 0xF9, 0xBC, 0x27, 0x10, 0xA2, 0x78, + 0x28, 0x7A, 0x65, 0x0C, 0xA3, 0xBB, 0xF2, 0x45}; +static const byte Policy_Authorize_NV_IDevID[] = { + 0x62, 0x9C, 0x50, 0xB0, 0x5F, 0x1A, 0xDB, 0x5B, + 0x42, 0x97, 0xFE, 0xB2, 0x41, 0x54, 0x9D, 0x42, + 0x17, 0xA1, 0xC7, 0x92, 0xC1, 0x62, 0xFE, 0xB8, + 0x61, 0x02, 0x2D, 0xEF, 0x88, 0xFA, 0x95, 0x01 +}; +#if 0 +static const byte Policy_Authorize_NV_IAK[] = { + 0x10, 0x1E, 0x68, 0x9D, 0xAD, 0xF1, 0x45, 0x22, + 0x24, 0x12, 0xC0, 0x5B, 0x76, 0xE1, 0x45, 0x32, + 0xAF, 0x1E, 0x5C, 0x74, 0x20, 0x8E, 0x0A, 0xE7, + 0xCD, 0xB0, 0xCF, 0xF1, 0x90, 0x6C, 0x8A, 0x09 +}; +#endif + + +int TPM2_Certify_Example(void* userCtx, int argc, char *argv[]) +{ + int rc = -1; + WOLFTPM2_DEV dev; + WOLFTPM2_SESSION tpmSession; + TPM_HANDLE certifyHandle = 0x80000001; + TPM_HANDLE signerHandle = 0x80000000; + WOLFTPM2_KEY certify; + WOLFTPM2_KEY signer; + TPM_ALG_ID hashAlg = TPM_ALG_SHA256; + TPM_ALG_ID alg = TPM_ALG_RSA; + Certify_In certifyIn; + Certify_Out certifyOut; + PolicyOR_In policyOR; + const char keyCreationNonce[] = "RandomServerPickedCreationNonce"; + + if (argc >= 2) { + if (XSTRCMP(argv[1], "-?") == 0 || + XSTRCMP(argv[1], "-h") == 0 || + XSTRCMP(argv[1], "--help") == 0) { + usage(); + return 0; + } + } + while (argc > 1) { + if (XSTRCMP(argv[argc-1], "-ecc") == 0) { + alg = TPM_ALG_ECC; + } + else if (XSTRCMP(argv[argc-1], "-rsa") == 0) { + alg = TPM_ALG_RSA; + } + else if (XSTRNCMP(argv[argc-1], "-certify=", XSTRLEN("-certify=")) == 0) { + const char* certifyStr = argv[argc-1] + XSTRLEN("-certify="); + certifyHandle = (word32)XSTRTOUL(certifyStr, NULL, 0); + } + else if (XSTRNCMP(argv[argc-1], "-signer=", XSTRLEN("-signer=")) == 0) { + const char* signerStr = argv[argc-1] + XSTRLEN("-signer="); + signerHandle = (word32)XSTRTOUL(signerStr, NULL, 0); + } + else { + printf("Warning: Unrecognized option: %s\n", argv[argc-1]); + } + argc--; + } + + XMEMSET(&tpmSession, 0, sizeof(tpmSession)); + XMEMSET(&certify, 0, sizeof(certify)); + XMEMSET(&signer, 0, sizeof(signer)); + + printf("Certify 0x%x with 0x%x to generate TPM-signed attestation info\n", + certifyHandle, signerHandle); + + rc = wolfTPM2_Init(&dev, TPM2_IoCb, userCtx); + if (rc != TPM_RC_SUCCESS) { + printf("wolfTPM2_Init failed 0x%x: %s\n", rc, TPM2_GetRCString(rc)); + goto exit; + } + printf("wolfTPM2_Init: success\n"); + + /* Read public information for each handle */ + rc = wolfTPM2_ReadPublicKey(&dev, &certify, certifyHandle); + if (rc != 0) goto exit; + rc = wolfTPM2_ReadPublicKey(&dev, &signer, signerHandle); + if (rc != 0) goto exit; + + /* Start a policy session for using endorsement */ + rc = wolfTPM2_CreateAuthSession_EkPolicy(&dev, &tpmSession); + if (rc != 0) goto exit; + /* Set the created Policy Session for use in next operation */ + rc = wolfTPM2_SetAuthSession(&dev, 0, &tpmSession, 0); + if (rc != 0) goto exit; + printf("EK Policy Session: Handle 0x%x\n", (word32)tpmSession.handle.hndl); + + /* satisfy policy for using certify command */ + rc = wolfTPM2_PolicyCommandCode(&dev, &tpmSession, TPM_CC_Certify); + if (rc != 0) goto exit; + + /* satisfy the TPM2_PolicyOR for SHA2-256 for IDevID/IAK admin policy */ + XMEMSET(&policyOR, 0, sizeof(policyOR)); + policyOR.policySession = tpmSession.handle.hndl; + policyOR.pHashList.count = 4; + + policyOR.pHashList.digests[0].size = sizeof(PA_User_Policy); + XMEMCPY(policyOR.pHashList.digests[0].buffer, PA_User_Policy, + sizeof(PA_User_Policy)); + policyOR.pHashList.digests[1].size = sizeof(Certify); + XMEMCPY(policyOR.pHashList.digests[1].buffer, Certify, sizeof(Certify)); + policyOR.pHashList.digests[2].size = sizeof(Activate_CredentialPolicy); + XMEMCPY(policyOR.pHashList.digests[2].buffer, Activate_CredentialPolicy, + sizeof(Activate_CredentialPolicy)); + policyOR.pHashList.digests[3].size = sizeof(Policy_Authorize_NV_IDevID); + XMEMCPY(policyOR.pHashList.digests[3].buffer, Policy_Authorize_NV_IDevID, + sizeof(Policy_Authorize_NV_IDevID)); + + rc = TPM2_PolicyOR(&policyOR); + if (rc != TPM_RC_SUCCESS) { + printf("TPM2_PolicyOR failed 0x%x: %s\n", rc, TPM2_GetRCString(rc)); + goto exit; + } + + /* Setup the session object names used for policy HMAC */ + (void)wolfTPM2_SetAuthHandleName(&dev, 0, &certify.handle); + (void)wolfTPM2_SetAuthHandle(&dev, 1, &signer.handle); + + /* Create signed certify structure */ + XMEMSET(&certifyIn, 0, sizeof(certifyIn)); + /* the first handle (objectHandle) requires ADMIN role */ + certifyIn.objectHandle = certifyHandle; + certifyIn.signHandle = signerHandle; + certifyIn.inScheme.scheme = + (alg == TPM_ALG_ECC) ? TPM_ALG_ECDSA : TPM_ALG_RSASSA;; + certifyIn.inScheme.details.any.hashAlg = hashAlg; + /* provide a random nonce from remote server (optional) */ + certifyIn.qualifyingData.size = sizeof(keyCreationNonce)-1; + XMEMCPY(certifyIn.qualifyingData.buffer, keyCreationNonce, + certifyIn.qualifyingData.size); + rc = TPM2_Certify(&certifyIn, &certifyOut); + if (rc != TPM_RC_SUCCESS) { + printf("TPM2_Certify RSA key failed 0x%x: %s\n", rc, + TPM2_GetRCString(rc)); + goto exit; + } + printf("TPM2_Certify complete\n"); + + printf("Certify Info %d\n", certifyOut.certifyInfo.size); + TPM2_PrintBin(certifyOut.certifyInfo.attestationData, + certifyOut.certifyInfo.size); + + if (certifyOut.signature.sigAlg == TPM_ALG_RSASSA) { + printf("RSA Signature: %d\n", + certifyOut.signature.signature.rsassa.sig.size); + TPM2_PrintBin(certifyOut.signature.signature.rsassa.sig.buffer, + certifyOut.signature.signature.rsassa.sig.size); + } + else if (certifyOut.signature.sigAlg == TPM_ALG_ECDSA) { + printf("ECDSA Signature R %d / S %d\n", + certifyOut.signature.signature.ecdsa.signatureR.size, + certifyOut.signature.signature.ecdsa.signatureS.size); + TPM2_PrintBin(certifyOut.signature.signature.ecdsa.signatureR.buffer, + certifyOut.signature.signature.ecdsa.signatureR.size); + TPM2_PrintBin(certifyOut.signature.signature.ecdsa.signatureS.buffer, + certifyOut.signature.signature.ecdsa.signatureS.size); + } + /* the policy session is automatically closed */ + tpmSession.handle.hndl = TPM_RH_NULL; + + /* Perform software verification of signature by hashing the attestation + * information and use the signer public key to verify the signature */ + +exit: + + if (rc != 0) { + printf("\nFailure 0x%x: %s\n\n", rc, wolfTPM2_GetRCString(rc)); + } + + wolfTPM2_UnloadHandle(&dev, &tpmSession.handle); + wolfTPM2_Cleanup(&dev); + + return rc; +} + +/******************************************************************************/ +/* --- END TPM2.0 Certify example tool -- */ +/******************************************************************************/ +#endif /* !WOLFTPM2_NO_WRAPPER */ + +#ifndef NO_MAIN_DRIVER +int main(int argc, char *argv[]) +{ + int rc = -1; + +#ifndef WOLFTPM2_NO_WRAPPER + rc = TPM2_Certify_Example(NULL, argc, argv); +#else + printf("Wrapper code not compiled in\n"); + (void)argc; + (void)argv; +#endif /* !WOLFTPM2_NO_WRAPPER */ + + return rc; +} +#endif diff --git a/examples/attestation/include.am b/examples/attestation/include.am index ba7484f7..082f547b 100644 --- a/examples/attestation/include.am +++ b/examples/attestation/include.am @@ -3,27 +3,36 @@ if BUILD_EXAMPLES noinst_PROGRAMS += examples/attestation/make_credential \ - examples/attestation/activate_credential + examples/attestation/activate_credential \ + examples/attestation/certify -noinst_HEADERS += examples/attestation/credential.h +noinst_HEADERS += examples/attestation/attestation.h examples_attestation_make_credential_SOURCES = examples/attestation/make_credential.c \ examples/tpm_test_keys.c examples_attestation_make_credential_LDADD = src/libwolftpm.la $(LIB_STATIC_ADD) examples_attestation_make_credential_DEPENDENCIES = src/libwolftpm.la -examples_attestation_activate_credential_SOURCES = examples/attestation/activate_credential.c \ - examples/tpm_test_keys.c +examples_attestation_activate_credential_SOURCES = examples/attestation/activate_credential.c \ + examples/tpm_test_keys.c examples_attestation_activate_credential_LDADD = src/libwolftpm.la $(LIB_STATIC_ADD) examples_attestation_activate_credential_DEPENDENCIES = src/libwolftpm.la +examples_attestation_certify_SOURCES = examples/attestation/certify.c \ + examples/tpm_test_keys.c +examples_attestation_certify_LDADD = src/libwolftpm.la $(LIB_STATIC_ADD) +examples_attestation_certify_DEPENDENCIES = src/libwolftpm.la endif example_attestationdir = $(exampledir)/attestation dist_example_attestation_DATA = \ examples/attestation/make_credential.c \ - examples/attestation/activate_credential.c + examples/attestation/activate_credential.c \ + examples/attestation/certify.c DISTCLEANFILES+= examples/attestation/.libs/make_credential \ - examples/attestation/.libs/activate_credential + examples/attestation/.libs/activate_credential \ + examples/attestation/.libs/certify -EXTRA_DIST+= examples/attestation/README.md +EXTRA_DIST+= examples/attestation/README.md \ + examples/attestation/tpm_idevid_policy.png \ + examples/attestation/tpm_iak_policy.png diff --git a/examples/attestation/make_credential.c b/examples/attestation/make_credential.c index 530d0784..1b4ea64a 100644 --- a/examples/attestation/make_credential.c +++ b/examples/attestation/make_credential.c @@ -29,7 +29,7 @@ #ifndef WOLFTPM2_NO_WRAPPER -#include +#include #include #include #include diff --git a/examples/attestation/tpm_iak_policy.png b/examples/attestation/tpm_iak_policy.png new file mode 100644 index 0000000000000000000000000000000000000000..046df9f1c1b50f025183c4fee7d5310cd45f88fc GIT binary patch literal 188567 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 z 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

l>8bn8e0+`u3t91v60y(yx}fTO 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

ERJz=#-=HvJSp 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 literal 0 HcmV?d00001 diff --git a/examples/attestation/tpm_idevid_policy.png b/examples/attestation/tpm_idevid_policy.png new file mode 100644 index 0000000000000000000000000000000000000000..e0a1007ae1ef594eca000f22385290ebdeee80ed GIT binary patch literal 63189 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 1) { if (XSTRNCMP(argv[argc-1], "-nvindex=", XSTRLEN("-nvindex=")) == 0) { const char* nvIndexStr = argv[argc-1] + XSTRLEN("-nvindex="); - nvIndex = (word32)XSTRTOL(nvIndexStr, NULL, 0); + nvIndex = (word32)XSTRTOUL(nvIndexStr, NULL, 0); if (!(authHandle == TPM_RH_PLATFORM && ( nvIndex > TPM_20_PLATFORM_MFG_NV_SPACE && nvIndex < TPM_20_OWNER_NV_SPACE)) && diff --git a/examples/keygen/create_primary.c b/examples/keygen/create_primary.c index 18c52e15..ad13f4a6 100644 --- a/examples/keygen/create_primary.c +++ b/examples/keygen/create_primary.c @@ -51,6 +51,13 @@ static void usage(void) printf("\t-oh: Create keys under the Owner Hierarchy (DEFAULT)\n"); printf("\t-eh: Create keys under the Endorsement Hierarchy\n"); printf("\t-ph: Create keys under the Platform Hierarchy\n"); + printf("Public Template:\n"); + printf("\t-srk: Storage Root Key (default)\n"); + printf("\t-aik: Attestation Identity Key, a TPM 1.2 key type\n"); +#ifdef WOLFTPM_PROVISIONING + printf("\t-iak: Initial Attestation Template\n"); + printf("\t-idevid: Initial Device IDentity Template\n"); +#endif printf("Unique Template:\n"); printf("\t-unique=[value]\n"); printf("\t\tOptional unique value for the KDF of the create\n"); @@ -64,6 +71,7 @@ static void usage(void) printf("\t-store=[handle]\n"); printf("\t\tPersistent primary key handle range: 0x81000000 - 0x810FFFF\n"); printf("\t\tUse leading 0x for hex\n"); + printf("\t-keep: Keep handle open (don't flush)\n"); printf("Example usage:\n"); printf("\t* Create SRK used by wolfTPM:\n"); @@ -75,7 +83,8 @@ int TPM2_CreatePrimaryKey_Example(void* userCtx, int argc, char *argv[]) { int rc; WOLFTPM2_DEV dev; - WOLFTPM2_KEY primary; + WOLFTPM2_PKEY root; /* primary key with ticket */ + WOLFTPM2_KEY* primary = (WOLFTPM2_KEY*)&root; /* cast to public key only */ TPMT_PUBLIC publicTemplate; TPMI_ALG_PUBLIC alg = TPM_ALG_RSA; TPM_ALG_ID paramEncAlg = TPM_ALG_NULL; @@ -84,6 +93,11 @@ int TPM2_CreatePrimaryKey_Example(void* userCtx, int argc, char *argv[]) const char* uniqueStr = NULL; const char* authStr = NULL; word32 persistHandle = 0; + int keepHandleOpen = 0; + int useAIKTemplate = 0; +#ifdef WOLFTPM_PROVISIONING + int useIAKTemplate = 0, useIDevIDTemplate = 0; +#endif if (argc >= 2) { if (XSTRCMP(argv[1], "-?") == 0 || @@ -115,6 +129,17 @@ int TPM2_CreatePrimaryKey_Example(void* userCtx, int argc, char *argv[]) else if (XSTRCMP(argv[argc-1], "-oh") == 0) { hierarchy = TPM_RH_OWNER; } + else if (XSTRCMP(argv[argc-1], "-aik") == 0) { + useAIKTemplate = 1; + } +#ifdef WOLFTPM_PROVISIONING + else if (XSTRCMP(argv[argc-1], "-iak") == 0) { + useIAKTemplate = 1; + } + else if (XSTRCMP(argv[argc-1], "-idevid") == 0) { + useIDevIDTemplate = 1; + } +#endif else if (XSTRNCMP(argv[argc-1], "-unique=", XSTRLEN("-unique=")) == 0) { uniqueStr = argv[argc-1] + XSTRLEN("-unique="); } @@ -122,13 +147,16 @@ int TPM2_CreatePrimaryKey_Example(void* userCtx, int argc, char *argv[]) authStr = argv[argc-1] + XSTRLEN("-auth="); } else if (XSTRNCMP(argv[argc-1], "-store=", XSTRLEN("-store=")) == 0) { - persistHandle = (word32)XSTRTOL(argv[argc-1] + XSTRLEN("-store="), + persistHandle = (word32)XSTRTOUL(argv[argc-1] + XSTRLEN("-store="), NULL, 0); if (persistHandle < 0x81000000 && persistHandle > 0x810FFFF) { printf("Invalid storage handle %s\n", argv[argc-1] + 7); persistHandle = 0; } } + else if (XSTRCMP(argv[argc-1], "-keep") == 0) { + keepHandleOpen = 1; + } else { printf("Warning: Unrecognized option: %s\n", argv[argc-1]); } @@ -136,7 +164,7 @@ int TPM2_CreatePrimaryKey_Example(void* userCtx, int argc, char *argv[]) argc--; } - XMEMSET(&primary, 0, sizeof(primary)); + XMEMSET(&root, 0, sizeof(root)); XMEMSET(&tpmSession, 0, sizeof(tpmSession)); printf("TPM2.0 Primary Key generation example\n"); @@ -158,7 +186,7 @@ int TPM2_CreatePrimaryKey_Example(void* userCtx, int argc, char *argv[]) /* See if handle already exists */ if (persistHandle > 0) { - if (wolfTPM2_ReadPublicKey(&dev, &primary, persistHandle) == 0) { + if (wolfTPM2_ReadPublicKey(&dev, primary, persistHandle) == 0) { printf("Primary Handle 0x%08x already exists\n", persistHandle); goto exit; } @@ -166,10 +194,32 @@ int TPM2_CreatePrimaryKey_Example(void* userCtx, int argc, char *argv[]) /* Supported algorithms for primary key are only RSA 2048-bit & ECC P256 */ if (alg == TPM_ALG_RSA) { - rc = wolfTPM2_GetKeyTemplate_RSA_SRK(&publicTemplate); + if (useAIKTemplate) + rc = wolfTPM2_GetKeyTemplate_RSA_AIK(&publicTemplate); +#ifdef WOLFTPM_PROVISIONING + else if (useIAKTemplate) + rc = wolfTPM2_GetKeyTemplate_RSA_IAK(&publicTemplate, + 2048, TPM_ALG_SHA256); + else if (useIDevIDTemplate) + rc = wolfTPM2_GetKeyTemplate_RSA_IDevID(&publicTemplate, + 2048, TPM_ALG_SHA256); +#endif + else + rc = wolfTPM2_GetKeyTemplate_RSA_SRK(&publicTemplate); } else if (alg == TPM_ALG_ECC) { - rc = wolfTPM2_GetKeyTemplate_ECC_SRK(&publicTemplate); + if (useAIKTemplate) + rc = wolfTPM2_GetKeyTemplate_ECC_AIK(&publicTemplate); +#ifdef WOLFTPM_PROVISIONING + else if (useIAKTemplate) + rc = wolfTPM2_GetKeyTemplate_ECC_IAK(&publicTemplate, + TPM_ECC_NIST_P256, TPM_ALG_SHA256); + else if (useIDevIDTemplate) + rc = wolfTPM2_GetKeyTemplate_ECC_IDevID(&publicTemplate, + TPM_ECC_NIST_P256, TPM_ALG_SHA256); +#endif + else + rc = wolfTPM2_GetKeyTemplate_ECC_SRK(&publicTemplate); } else { rc = BAD_FUNC_ARG; @@ -199,23 +249,35 @@ int TPM2_CreatePrimaryKey_Example(void* userCtx, int argc, char *argv[]) printf("Creating new %s primary key...\n", TPM2_GetAlgName(alg)); - rc = wolfTPM2_CreatePrimaryKey(&dev, &primary, hierarchy, &publicTemplate, + rc = wolfTPM2_CreatePrimaryKey_ex(&dev, &root, hierarchy, + &publicTemplate, (const byte*)authStr, authStr ? (int)XSTRLEN(authStr) : 0); if (rc != TPM_RC_SUCCESS) { printf("wolfTPM2_CreatePrimaryKey failed\n"); goto exit; } + printf("Create Primary Handle: 0x%x\n", (word32)root.handle.hndl); + #ifdef DEBUG_WOLFTPM - printf("Primary Key Public (%d bytes)\n", primary.pub.size); - TPM2_PrintBin((const byte*)&primary.pub.publicArea, primary.pub.size); + printf("Primary Key Public (%d bytes)\n", primary->pub.size); + TPM2_PrintBin((const byte*)&primary->pub.publicArea, primary->pub.size); + + printf("Creation Hash: %d\n", root.creationHash.size); + TPM2_PrintBin(root.creationHash.buffer, root.creationHash.size); + + printf("Creation Ticket: Tag 0x%x, hierarchy 0x%x, Ticket %d\n", + root.creationTicket.tag, root.creationTicket.hierarchy, + root.creationTicket.digest.size); + TPM2_PrintBin(root.creationTicket.digest.buffer, + root.creationTicket.digest.size); #endif if (persistHandle > 0) { #ifndef WOLFTPM_WINAPI /* Move storage key into persistent NV */ printf("Storing Primary key to handle 0x%08x\n", persistHandle); - rc = wolfTPM2_NVStoreKey(&dev, hierarchy, &primary, + rc = wolfTPM2_NVStoreKey(&dev, hierarchy, primary, persistHandle); if (rc != TPM_RC_SUCCESS) goto exit; #else @@ -231,7 +293,8 @@ int TPM2_CreatePrimaryKey_Example(void* userCtx, int argc, char *argv[]) } /* Close handles */ - wolfTPM2_UnloadHandle(&dev, &primary.handle); + if (!keepHandleOpen) + wolfTPM2_UnloadHandle(&dev, &primary->handle); if (paramEncAlg != TPM_ALG_NULL) { wolfTPM2_UnloadHandle(&dev, &tpmSession.handle); } diff --git a/examples/management/flush.c b/examples/management/flush.c index ee26c5d4..38cc3964 100644 --- a/examples/management/flush.c +++ b/examples/management/flush.c @@ -41,8 +41,8 @@ static void usage(void) { printf("Expected usage:\n"); - printf("./tool/management/flush [handle]\n"); - printf("* handle is a valid TPM2.0 handle index\n"); + printf("./examples/management/flush [handle]\n"); + printf("* handle is a valid TPM2.0 handle (example 0x80000000)\n"); printf("Note: Default behavior, without parameters, the tool flushes\n" "\tcommon transient TPM2.0 objects, including:\n" "- Transient Key handles 0x8000000\n" @@ -53,18 +53,13 @@ static void usage(void) int TPM2_Flush_Tool(void* userCtx, int argc, char *argv[]) { int rc = TPM_RC_FAILURE; - int allTransientObjects = 0, handle = 0; + int allTransientObjects = 0; + TPM_HANDLE handle = 0; WOLFTPM2_DEV dev; FlushContext_In flushCtx; if (argc == 2) { - /* TODO: Parse input parameter as 8 digit hex value */ - (void)argv; - if(1) { - printf("Input value does not look like a TPM handle\n"); - usage(); - return 0; - } + handle = (word32)XSTRTOUL(argv[1], NULL, 0); } else if (argc == 1) { allTransientObjects = 1; @@ -83,21 +78,21 @@ int TPM2_Flush_Tool(void* userCtx, int argc, char *argv[]) } printf("wolfTPM2_Init: success\n"); - if (allTransientObjects) { + if (allTransientObjects || handle == 0) { /* Flush key objects */ - for (handle=0x80000000; handle < (int)0x8000000A; handle++) { + for (handle=0x80000000; handle < 0x8000000A; handle++) { flushCtx.flushHandle = handle; printf("Freeing %X object\n", handle); TPM2_FlushContext(&flushCtx); } /* Flush policy sessions */ - for (handle=0x3000000; handle < (int)0x3000004; handle++) { + for (handle=0x3000000; handle < 0x3000004; handle++) { flushCtx.flushHandle = handle; printf("Freeing %X object\n", handle); TPM2_FlushContext(&flushCtx); } /* Flush hmac sessions */ - for (handle=0x3000000; handle < (int)0x3000004; handle++) { + for (handle=0x3000000; handle < 0x3000004; handle++) { flushCtx.flushHandle = handle; printf("Freeing %X object\n", handle); TPM2_FlushContext(&flushCtx); diff --git a/examples/native/native_test.c b/examples/native/native_test.c index 04296053..0d89bd9c 100644 --- a/examples/native/native_test.c +++ b/examples/native/native_test.c @@ -111,7 +111,7 @@ int TPM2_Native_TestArgs(void* userCtx, int argc, char *argv[]) ECDH_KeyGen_In ecdh; ECDH_ZGen_In ecdhZ; EncryptDecrypt2_In encDec; - CertifyCreation_In certifyCreationIn; + CertifyCreation_In certifyCreation; HMAC_In hmac; HMAC_Start_In hmacStart; #if defined(WOLFTPM_ST33) || defined(WOLFTPM_AUTODETECT) @@ -151,7 +151,7 @@ int TPM2_Native_TestArgs(void* userCtx, int argc, char *argv[]) ECDH_KeyGen_Out ecdh; ECDH_ZGen_Out ecdhZ; EncryptDecrypt2_Out encDec; - CertifyCreation_Out certifyCreationOut; + CertifyCreation_Out certifyCreation; HMAC_Out hmac; HMAC_Start_Out hmacStart; byte maxOutput[MAX_RESPONSE_SIZE]; @@ -1226,15 +1226,18 @@ int TPM2_Native_TestArgs(void* userCtx, int argc, char *argv[]) } /* Use the RSA key for Encrypt/Decrypt to unit test certifyCreation */ - cmdIn.certifyCreationIn.signHandle = rsaKey.handle; - cmdIn.certifyCreationIn.objectHandle = rsaKey.handle; - cmdIn.certifyCreationIn.creationHash.size = rsaKey.creationHash.size; - XMEMCPY(cmdIn.certifyCreationIn.creationHash.buffer, rsaKey.creationHash.buffer, cmdIn.certifyCreationIn.creationHash.size); - XMEMCPY(&cmdIn.certifyCreationIn.creationTicket, &rsaKey.creationTicket, sizeof(rsaKey.creationTicket)); - cmdIn.certifyCreationIn.inScheme.scheme = TPM_ALG_RSASSA; - cmdIn.certifyCreationIn.inScheme.details.any.hashAlg = TPM_ALG_SHA256; - cmdIn.certifyCreationIn.qualifyingData.size = 0; /* optional */ - rc = TPM2_CertifyCreation(&cmdIn.certifyCreationIn, &cmdOut.certifyCreationOut); + cmdIn.certifyCreation.signHandle = rsaKey.handle; + cmdIn.certifyCreation.objectHandle = rsaKey.handle; + cmdIn.certifyCreation.creationHash.size = rsaKey.creationHash.size; + XMEMCPY(cmdIn.certifyCreation.creationHash.buffer, rsaKey.creationHash.buffer, cmdIn.certifyCreation.creationHash.size); + XMEMCPY(&cmdIn.certifyCreation.creationTicket, &rsaKey.creationTicket, sizeof(rsaKey.creationTicket)); + cmdIn.certifyCreation.inScheme.scheme = TPM_ALG_RSASSA; + cmdIn.certifyCreation.inScheme.details.any.hashAlg = TPM_ALG_SHA256; + /* provide a random nonce from remote server (optional) */ + cmdIn.certifyCreation.qualifyingData.size = sizeof(keyCreationNonce)-1; + XMEMCPY(cmdIn.certifyCreation.qualifyingData.buffer, keyCreationNonce, + cmdIn.certifyCreation.qualifyingData.size); + rc = TPM2_CertifyCreation(&cmdIn.certifyCreation, &cmdOut.certifyCreation); if (rc != TPM_RC_SUCCESS) { printf("TPM2_CertifyCreation RSA key failed 0x%x: %s\n", rc, TPM2_GetRCString(rc)); diff --git a/examples/nvram/counter.c b/examples/nvram/counter.c index 3a2d0de0..2e1691dc 100644 --- a/examples/nvram/counter.c +++ b/examples/nvram/counter.c @@ -81,7 +81,7 @@ int TPM2_NVRAM_Counter_Example(void* userCtx, int argc, char *argv[]) while (argc > 1) { if (XSTRNCMP(argv[argc-1], "-nvindex=", XSTRLEN("-nvindex=")) == 0) { const char* nvIndexStr = argv[argc-1] + XSTRLEN("-nvindex="); - nvIndex = (word32)XSTRTOL(nvIndexStr, NULL, 0); + nvIndex = (word32)XSTRTOUL(nvIndexStr, NULL, 0); if (!(authHandle == TPM_RH_PLATFORM && ( nvIndex > TPM_20_PLATFORM_MFG_NV_SPACE && nvIndex < TPM_20_OWNER_NV_SPACE)) && diff --git a/examples/nvram/policy_nv.c b/examples/nvram/policy_nv.c index 073a3444..41db54a8 100644 --- a/examples/nvram/policy_nv.c +++ b/examples/nvram/policy_nv.c @@ -93,7 +93,7 @@ int TPM2_NVRAM_PolicyNV_Example(void* userCtx, int argc, char *argv[]) while (argc > 1) { if (XSTRNCMP(argv[argc-1], "-nvindex=", XSTRLEN("-nvindex=")) == 0) { const char* nvIndexStr = argv[argc-1] + XSTRLEN("-nvindex="); - nvIndex = (word32)XSTRTOL(nvIndexStr, NULL, 0); + nvIndex = (word32)XSTRTOUL(nvIndexStr, NULL, 0); if (!(authHandle == TPM_RH_PLATFORM && ( nvIndex > TPM_20_PLATFORM_MFG_NV_SPACE && nvIndex < TPM_20_OWNER_NV_SPACE)) && diff --git a/examples/nvram/read.c b/examples/nvram/read.c index 3074df5f..7dce5993 100644 --- a/examples/nvram/read.c +++ b/examples/nvram/read.c @@ -89,7 +89,7 @@ int TPM2_NVRAM_Read_Example(void* userCtx, int argc, char *argv[]) while (argc > 1) { if (XSTRNCMP(argv[argc-1], "-nvindex=", XSTRLEN("-nvindex=")) == 0) { const char* nvIndexStr = argv[argc-1] + XSTRLEN("-nvindex="); - nvIndex = (word32)XSTRTOL(nvIndexStr, NULL, 0); + nvIndex = (word32)XSTRTOUL(nvIndexStr, NULL, 0); if (nvIndex < NV_INDEX_FIRST || nvIndex > NV_INDEX_LAST) { fprintf(stderr, "Invalid NV Index %s\n", nvIndexStr); fprintf(stderr, "\tPlatform Range: 0x%x -> 0x%x\n", diff --git a/examples/nvram/store.c b/examples/nvram/store.c index 980b8df4..7ef611d7 100644 --- a/examples/nvram/store.c +++ b/examples/nvram/store.c @@ -95,7 +95,7 @@ int TPM2_NVRAM_Store_Example(void* userCtx, int argc, char *argv[]) while (argc > 1) { if (XSTRNCMP(argv[argc-1], "-nvindex=", XSTRLEN("-nvindex=")) == 0) { const char* nvIndexStr = argv[argc-1] + XSTRLEN("-nvindex="); - nvIndex = (word32)XSTRTOL(nvIndexStr, NULL, 0); + nvIndex = (word32)XSTRTOUL(nvIndexStr, NULL, 0); if (!(authHandle == TPM_RH_PLATFORM && ( nvIndex > TPM_20_PLATFORM_MFG_NV_SPACE && nvIndex < TPM_20_OWNER_NV_SPACE)) && diff --git a/examples/run_examples.sh b/examples/run_examples.sh index 6e927334..13725981 100755 --- a/examples/run_examples.sh +++ b/examples/run_examples.sh @@ -51,6 +51,37 @@ RESULT=$? RESULT=$? [ $RESULT -ne 0 ] && echo -e "create primary owner rsa key stored failed! $RESULT" && exit 1 +if [ $WOLFCRYPT_ENABLE -eq 1 ]; then + # Provisioning examples (required --enable-provisioning) + ./examples/keygen/create_primary -rsa -eh -iak -keep >> run.out 2>&1 + RESULT=$? + [ $RESULT -ne 0 ] && echo -e "create primary endosement rsa IAK key failed! $RESULT" && exit 1 + ./examples/keygen/create_primary -rsa -eh -idevid -keep >> run.out 2>&1 + RESULT=$? + [ $RESULT -ne 0 ] && echo -e "create primary endosement rsa IDevID key failed! $RESULT" && exit 1 + + ./examples/attestation/certify -rsa -certify=0x80000001 -signer=0x80000000 >> run.out 2>&1 + RESULT=$? + [ $RESULT -ne 0 ] && echo -e "certify RSA IDevID with IAK failed! $RESULT" && exit 1 + + ./examples/management/flush 0x80000000 >> run.out 2>&1 + ./examples/management/flush 0x80000001 >> run.out 2>&1 + + ./examples/keygen/create_primary -ecc -eh -iak -keep >> run.out 2>&1 + RESULT=$? + [ $RESULT -ne 0 ] && echo -e "create primary endosement ecc IAK key failed! $RESULT" && exit 1 + ./examples/keygen/create_primary -ecc -eh -idevid -keep >> run.out 2>&1 + RESULT=$? + [ $RESULT -ne 0 ] && echo -e "create primary endosement ecc IDevID key failed! $RESULT" && exit 1 + + ./examples/attestation/certify -ecc -certify=0x80000001 -signer=0x80000000 >> run.out 2>&1 + RESULT=$? + [ $RESULT -ne 0 ] && echo -e "certify ECC IDevID with IAK failed! $RESULT" && exit 1 + + ./examples/management/flush 0x80000000 >> run.out 2>&1 + ./examples/management/flush 0x80000001 >> run.out 2>&1 +fi + if [ $WOLFCRYPT_ENABLE -eq 1 ]; then ./examples/keygen/create_primary -rsa -oh -aes >> run.out 2>&1 RESULT=$? diff --git a/src/tpm2_wrap.c b/src/tpm2_wrap.c index 28263499..f96cda89 100644 --- a/src/tpm2_wrap.c +++ b/src/tpm2_wrap.c @@ -1690,7 +1690,7 @@ int wolfTPM2_StartSession(WOLFTPM2_DEV* dev, WOLFTPM2_SESSION* session, } -int wolfTPM2_CreatePrimaryKey(WOLFTPM2_DEV* dev, WOLFTPM2_KEY* key, +int wolfTPM2_CreatePrimaryKey_ex(WOLFTPM2_DEV* dev, WOLFTPM2_PKEY* pkey, TPM_HANDLE primaryHandle, TPMT_PUBLIC* publicTemplate, const byte* auth, int authSz) { @@ -1698,14 +1698,14 @@ int wolfTPM2_CreatePrimaryKey(WOLFTPM2_DEV* dev, WOLFTPM2_KEY* key, CreatePrimary_In createPriIn; CreatePrimary_Out createPriOut; - if (dev == NULL || key == NULL || publicTemplate == NULL) + if (dev == NULL || pkey == NULL || publicTemplate == NULL) return BAD_FUNC_ARG; /* set session auth to blank */ wolfTPM2_SetAuthPassword(dev, 0, NULL); /* clear output key buffer */ - XMEMSET(key, 0, sizeof(WOLFTPM2_KEY)); + XMEMSET(pkey, 0, sizeof(*pkey)); /* setup create primary command */ XMEMSET(&createPriIn, 0, sizeof(createPriIn)); @@ -1732,22 +1732,51 @@ int wolfTPM2_CreatePrimaryKey(WOLFTPM2_DEV* dev, WOLFTPM2_KEY* key, #endif return rc; } - key->handle.hndl = createPriOut.objectHandle; - wolfTPM2_CopyAuth(&key->handle.auth, + pkey->handle.hndl = createPriOut.objectHandle; + wolfTPM2_CopyAuth(&pkey->handle.auth, &createPriIn.inSensitive.sensitive.userAuth); - wolfTPM2_CopyName(&key->handle.name, &createPriOut.name); - wolfTPM2_CopySymmetric(&key->handle.symmetric, + wolfTPM2_CopyName(&pkey->handle.name, &createPriOut.name); + wolfTPM2_CopySymmetric(&pkey->handle.symmetric, &createPriOut.outPublic.publicArea.parameters.asymDetail.symmetric); - wolfTPM2_CopyPub(&key->pub, &createPriOut.outPublic); + wolfTPM2_CopyPub(&pkey->pub, &createPriOut.outPublic); + + pkey->creationHash.size = createPriOut.creationHash.size; + XMEMCPY(pkey->creationHash.buffer, createPriOut.creationHash.buffer, + createPriOut.creationHash.size); + + pkey->creationTicket.tag = createPriOut.creationTicket.tag; + pkey->creationTicket.hierarchy = createPriOut.creationTicket.hierarchy; + pkey->creationTicket.digest.size = createPriOut.creationTicket.digest.size; + XMEMCPY(pkey->creationTicket.digest.buffer, + createPriOut.creationTicket.digest.buffer, + createPriOut.creationTicket.digest.size); #ifdef DEBUG_WOLFTPM printf("TPM2_CreatePrimary: 0x%x (%d bytes)\n", - (word32)key->handle.hndl, key->pub.size); + (word32)pkey->handle.hndl, pkey->pub.size); #endif return rc; } +int wolfTPM2_CreatePrimaryKey(WOLFTPM2_DEV* dev, WOLFTPM2_KEY* key, + TPM_HANDLE primaryHandle, TPMT_PUBLIC* publicTemplate, + const byte* auth, int authSz) +{ + int rc; + WOLFTPM2_PKEY pKey; + if (dev == NULL || key == NULL || publicTemplate == NULL) + return BAD_FUNC_ARG; + rc = wolfTPM2_CreatePrimaryKey_ex(dev, &pKey, primaryHandle, publicTemplate, + auth, authSz); + if (rc == 0) { + /* return only the handle and public information */ + XMEMCPY(&key->handle, &pKey.handle, sizeof(WOLFTPM2_HANDLE)); + XMEMCPY(&key->pub, &pKey.pub, sizeof(TPM2B_PUBLIC)); + } + return rc; +} + int wolfTPM2_ChangeAuthKey(WOLFTPM2_DEV* dev, WOLFTPM2_KEY* key, WOLFTPM2_HANDLE* parent, const byte* auth, int authSz) { @@ -6091,6 +6120,147 @@ int wolfTPM2_GetKeyTemplate_ECC_AIK(TPMT_PUBLIC* publicTemplate) return ret; } +#ifdef WOLFTPM_PROVISIONING +static int wolfTPM2_SetKeyTemplate_IAK(TPMT_PUBLIC* publicTemplate, + TPM_ALG_ID hashAlg) +{ + int ret = 0; + if (hashAlg == TPM_ALG_SHA256) { + publicTemplate->authPolicy.size = sizeof(TPM_20_IAK_POLICY); + XMEMCPY(publicTemplate->authPolicy.buffer, + TPM_20_IAK_POLICY, publicTemplate->authPolicy.size); + } +#ifdef WOLFSSL_SHA384 + else if (hashAlg == TPM_ALG_SHA384) { + publicTemplate->authPolicy.size = sizeof(TPM_20_IAK_POLICY_SHA384); + XMEMCPY(publicTemplate->authPolicy.buffer, + TPM_20_IAK_POLICY_SHA384, publicTemplate->authPolicy.size); + } +#endif +#ifdef WOLFSSL_SHA512 + else if (hashAlg == TPM_ALG_SHA512) { + publicTemplate->authPolicy.size = sizeof(TPM_20_IAK_POLICY_SHA512); + XMEMCPY(publicTemplate->authPolicy.buffer, + TPM_20_IAK_POLICY_SHA512, publicTemplate->authPolicy.size); + } +#endif + else { + ret = BAD_FUNC_ARG; + } + if (ret == 0) { + const char* IAKStr = "IAK"; + ret = wolfTPM2_SetKeyTemplate_Unique(publicTemplate, + (const byte*)IAKStr, (int)XSTRLEN(IAKStr)); + } + return ret; +} + +int wolfTPM2_GetKeyTemplate_RSA_IAK(TPMT_PUBLIC* publicTemplate, int keyBits, + TPM_ALG_ID hashAlg) +{ + int ret; + TPMA_OBJECT objectAttributes = ( + TPMA_OBJECT_fixedTPM | TPMA_OBJECT_fixedParent | + TPMA_OBJECT_sensitiveDataOrigin | TPMA_OBJECT_userWithAuth | + TPMA_OBJECT_adminWithPolicy | TPMA_OBJECT_restricted | + TPMA_OBJECT_sign); + + ret = GetKeyTemplateRSA(publicTemplate, hashAlg, + objectAttributes, keyBits, 0, TPM_ALG_RSASSA, hashAlg); + if (ret == 0) { + publicTemplate->parameters.rsaDetail.symmetric.algorithm = TPM_ALG_NULL; + ret = wolfTPM2_SetKeyTemplate_IAK(publicTemplate, hashAlg); + } + return ret; +} +int wolfTPM2_GetKeyTemplate_ECC_IAK(TPMT_PUBLIC* publicTemplate, + TPM_ECC_CURVE curveID, TPM_ALG_ID hashAlg) +{ + int ret; + TPMA_OBJECT objectAttributes = ( + TPMA_OBJECT_fixedTPM | TPMA_OBJECT_fixedParent | + TPMA_OBJECT_sensitiveDataOrigin | TPMA_OBJECT_userWithAuth | + TPMA_OBJECT_adminWithPolicy | TPMA_OBJECT_restricted | + TPMA_OBJECT_sign); + + ret = GetKeyTemplateECC(publicTemplate, hashAlg, + objectAttributes, curveID, TPM_ALG_ECDSA, hashAlg); + if (ret == 0) { + publicTemplate->parameters.eccDetail.symmetric.algorithm = TPM_ALG_NULL; + ret = wolfTPM2_SetKeyTemplate_IAK(publicTemplate, hashAlg); + } + return ret; +} + +static int wolfTPM2_SetKeyTemplate_IDevID(TPMT_PUBLIC* publicTemplate, + TPM_ALG_ID hashAlg) +{ + int ret = 0; + if (hashAlg == TPM_ALG_SHA256) { + publicTemplate->authPolicy.size = sizeof(TPM_20_IDEVID_POLICY); + XMEMCPY(publicTemplate->authPolicy.buffer, + TPM_20_IDEVID_POLICY, publicTemplate->authPolicy.size); + } +#ifdef WOLFSSL_SHA384 + else if (hashAlg == TPM_ALG_SHA384) { + publicTemplate->authPolicy.size = sizeof(TPM_20_IDEVID_POLICY_SHA384); + XMEMCPY(publicTemplate->authPolicy.buffer, + TPM_20_IDEVID_POLICY_SHA384, publicTemplate->authPolicy.size); + } +#endif +#ifdef WOLFSSL_SHA512 + else if (hashAlg == TPM_ALG_SHA512) { + publicTemplate->authPolicy.size = sizeof(TPM_20_IDEVID_POLICY_SHA512); + XMEMCPY(publicTemplate->authPolicy.buffer, + TPM_20_IDEVID_POLICY_SHA512, publicTemplate->authPolicy.size); + } +#endif + else { + ret = BAD_FUNC_ARG; + } + if (ret == 0) { + const char* IDevIDStr = "IDEVID"; + ret = wolfTPM2_SetKeyTemplate_Unique(publicTemplate, + (const byte*)IDevIDStr, (int)XSTRLEN(IDevIDStr)); + } + return ret; +} +int wolfTPM2_GetKeyTemplate_RSA_IDevID(TPMT_PUBLIC* publicTemplate, int keyBits, + TPM_ALG_ID hashAlg) +{ + int ret; + TPMA_OBJECT objectAttributes = ( + TPMA_OBJECT_fixedTPM | TPMA_OBJECT_fixedParent | + TPMA_OBJECT_sensitiveDataOrigin | TPMA_OBJECT_userWithAuth | + TPMA_OBJECT_adminWithPolicy | TPMA_OBJECT_sign); + + ret = GetKeyTemplateRSA(publicTemplate, hashAlg, + objectAttributes, keyBits, 0, TPM_ALG_NULL, TPM_ALG_NULL); + if (ret == 0) { + publicTemplate->parameters.rsaDetail.symmetric.algorithm = TPM_ALG_NULL; + ret = wolfTPM2_SetKeyTemplate_IDevID(publicTemplate, hashAlg); + } + return ret; +} +int wolfTPM2_GetKeyTemplate_ECC_IDevID(TPMT_PUBLIC* publicTemplate, + TPM_ECC_CURVE curveID, TPM_ALG_ID hashAlg) +{ + int ret; + TPMA_OBJECT objectAttributes = ( + TPMA_OBJECT_fixedTPM | TPMA_OBJECT_fixedParent | + TPMA_OBJECT_sensitiveDataOrigin | TPMA_OBJECT_userWithAuth | + TPMA_OBJECT_adminWithPolicy | TPMA_OBJECT_sign); + + ret = GetKeyTemplateECC(publicTemplate, hashAlg, + objectAttributes, curveID, TPM_ALG_ECDSA, hashAlg); + if (ret == 0) { + publicTemplate->parameters.eccDetail.symmetric.algorithm = TPM_ALG_NULL; + ret = wolfTPM2_SetKeyTemplate_IDevID(publicTemplate, hashAlg); + } + return ret; +} +#endif /* WOLFTPM_PROVISIONING */ + /* Returns key size (in bytes) for the public template */ static int GetKeyTemplateSize(TPMT_PUBLIC* publicTemplate) { @@ -6168,7 +6338,8 @@ int wolfTPM2_SetKeyTemplate_Unique(TPMT_PUBLIC* publicTemplate, } else { XMEMCPY(publicTemplate->unique.ecc.x.buffer, unique, uniqueSz); - XMEMCPY(publicTemplate->unique.ecc.y.buffer, unique + uniqueSz, uniqueSz); + XMEMCPY(publicTemplate->unique.ecc.y.buffer, unique + uniqueSz, + uniqueSz); } publicTemplate->unique.ecc.x.size = uniqueSz; publicTemplate->unique.ecc.y.size = uniqueSz; @@ -7145,6 +7316,21 @@ int wolfTPM2_PolicyAuthValue(WOLFTPM2_DEV* dev, WOLFTPM2_SESSION* tpmSession, return TPM2_PolicyAuthValue(&policyAuthValueIn); } +int wolfTPM2_PolicyCommandCode(WOLFTPM2_DEV* dev, WOLFTPM2_SESSION* tpmSession, + TPM_CC cc) +{ + PolicyCommandCode_In policyCC; + + if (dev == NULL || tpmSession == NULL) { + return BAD_FUNC_ARG; + } + + XMEMSET(&policyCC, 0, sizeof(policyCC)); + policyCC.policySession = tpmSession->handle.hndl; + policyCC.code = cc; + return TPM2_PolicyCommandCode(&policyCC); +} + #ifndef WOLFTPM2_NO_WOLFCRYPT /* Authorize a policy based on external key for a verified policy digiest signature */ int wolfTPM2_PolicyAuthorize(WOLFTPM2_DEV* dev, TPM_HANDLE sessionHandle, @@ -7239,11 +7425,12 @@ int wolfTPM2_PCRGetDigest(WOLFTPM2_DEV* dev, TPM_ALG_ID pcrAlg, return rc; } -/* Assemble a PCR policy */ -/* policyDigestnew = hash(policyDigestOld || TPM_CC_PolicyPCR || PCRS || - * pcrDigest) */ -int wolfTPM2_PolicyPCRMake(TPM_ALG_ID pcrAlg, byte* pcrArray, word32 pcrArraySz, - const byte* pcrDigest, word32 pcrDigestSz, byte* digest, word32* digestSz) +/* Generic Policy Hashing Function */ +/* digest is in/out (input "old" / output "new") */ +/* policyDigestnew = hash(policyDigestOld || [cc] || [Input]) */ +int wolfTPM2_PolicyHash(TPM_ALG_ID hashAlg, + byte* digest, word32* digestSz, TPM_CC cc, + const byte* input, word32 inputSz) { int rc; word32 val; @@ -7251,18 +7438,18 @@ int wolfTPM2_PolicyPCRMake(TPM_ALG_ID pcrAlg, byte* pcrArray, word32 pcrArraySz, wc_HashAlg hash_ctx; word32 inSz; - if (pcrArray == NULL || pcrArraySz == 0 || digest == NULL || - digestSz == NULL) { + if (digest == NULL || digestSz == NULL || + (input == NULL && inputSz > 0)) { return BAD_FUNC_ARG; } inSz = *digestSz; /* capture input digest size (for policyDigestOld) */ - rc = TPM2_GetHashType(pcrAlg); + rc = TPM2_GetHashType(hashAlg); hashType = (enum wc_HashType)rc; rc = wc_HashGetDigestSize(hashType); if (rc < 0) return rc; - *digestSz = rc; /* set actual size */ + *digestSz = rc; rc = wc_HashInit(&hash_ctx, hashType); if (rc != 0) @@ -7272,28 +7459,14 @@ int wolfTPM2_PolicyPCRMake(TPM_ALG_ID pcrAlg, byte* pcrArray, word32 pcrArraySz, if (rc == 0 && inSz > 0) { rc = wc_HashUpdate(&hash_ctx, hashType, digest, inSz); } - /* Command Code */ - if (rc == 0) { - val = TPM2_Packet_SwapU32(TPM_CC_PolicyPCR); + /* Command Code (optional) */ + if (rc == 0 && cc > TPM_CC_FIRST) { + val = TPM2_Packet_SwapU32(cc); rc = wc_HashUpdate(&hash_ctx, hashType, (byte*)&val, sizeof(val)); } - /* PCR Count and PCR Selection */ - if (rc == 0) { - TPM2_Packet packet; - byte buf[sizeof(TPML_PCR_SELECTION)]; - TPML_PCR_SELECTION pcr; - XMEMSET(&pcr, 0, sizeof(pcr)); - XMEMSET(&packet, 0, sizeof(packet)); - - TPM2_SetupPCRSelArray(&pcr, pcrAlg, pcrArray, pcrArraySz); - packet.buf = buf; - packet.size = sizeof(buf); - TPM2_Packet_AppendPCR(&packet, &pcr); - rc = wc_HashUpdate(&hash_ctx, hashType, buf, packet.pos); - } - /* Hash of PCR(s) */ - if (rc == 0) { - rc = wc_HashUpdate(&hash_ctx, hashType, pcrDigest, pcrDigestSz); + /* Input (optional) */ + if (rc == 0 && input != NULL && inputSz > 0) { + rc = wc_HashUpdate(&hash_ctx, hashType, input, inputSz); } if (rc == 0) { rc = wc_HashFinal(&hash_ctx, hashType, digest); @@ -7302,12 +7475,12 @@ int wolfTPM2_PolicyPCRMake(TPM_ALG_ID pcrAlg, byte* pcrArray, word32 pcrArraySz, #ifdef DEBUG_WOLFTPM if (rc != 0) { - printf("wolfTPM2_PolicyPCRMake failed %d: %s\n", + printf("wolfTPM2_PolicyHash failed %d: %s\n", rc, wolfTPM2_GetRCString(rc)); } #ifdef WOLFTPM_DEBUG_VERBOSE else { - printf("wolfTPM2_PolicyPCRMake: %d\n", *digestSz); + printf("wolfTPM2_PolicyHash: %d\n", *digestSz); TPM2_PrintBin(digest, *digestSz); } #endif @@ -7315,55 +7488,47 @@ int wolfTPM2_PolicyPCRMake(TPM_ALG_ID pcrAlg, byte* pcrArray, word32 pcrArraySz, return rc; } -/* Assemble a PCR policy ref - optional */ -/* aHash = hash(approvedPolicy || policyRef) */ -int wolfTPM2_PolicyRefMake(TPM_ALG_ID pcrAlg, byte* digest, word32* digestSz, - const byte* policyRef, word32 policyRefSz) +/* Assemble a PCR policy */ +/* policyDigestnew = hash(policyDigestOld || TPM_CC_PolicyPCR || PCRS || + * pcrDigest) */ +int wolfTPM2_PolicyPCRMake(TPM_ALG_ID pcrAlg, byte* pcrArray, word32 pcrArraySz, + const byte* pcrDigest, word32 pcrDigestSz, byte* digest, word32* digestSz) { int rc; - enum wc_HashType hashType; - wc_HashAlg hash_ctx; - word32 inSz; + TPM2_Packet packet; + byte buf[sizeof(TPML_PCR_SELECTION)+WC_MAX_DIGEST_SIZE]; + TPML_PCR_SELECTION pcr; - if (digest == NULL || digestSz == NULL || - (policyRef == NULL && policyRefSz > 0)) { + if (digest == NULL || digestSz == NULL || pcrArray == NULL || + pcrArraySz == 0) { return BAD_FUNC_ARG; } - inSz = *digestSz; /* capture input digest size (for approvedPolicy) */ - rc = TPM2_GetHashType(pcrAlg); - hashType = (enum wc_HashType)rc; - rc = wc_HashGetDigestSize(hashType); - if (rc < 0) - return rc; - *digestSz = rc; /* set actual size */ - - rc = wc_HashInit(&hash_ctx, hashType); - if (rc != 0) - return rc; + /* Build PCRS (PCR Count and PCR Selection) */ + XMEMSET(&pcr, 0, sizeof(pcr)); + XMEMSET(&packet, 0, sizeof(packet)); + TPM2_SetupPCRSelArray(&pcr, pcrAlg, pcrArray, pcrArraySz); + packet.buf = buf; + packet.size = (int)sizeof(buf); + TPM2_Packet_AppendPCR(&packet, &pcr); - /* approvedPolicy */ - if (rc == 0 && inSz > 0) { - rc = wc_HashUpdate(&hash_ctx, hashType, digest, inSz); - } - /* policyRef */ - if (rc == 0 && policyRefSz > 0) { - rc = wc_HashUpdate(&hash_ctx, hashType, policyRef, policyRefSz); - } - if (rc == 0) { - rc = wc_HashFinal(&hash_ctx, hashType, digest); - } + /* Copy the pcrDigest to the end of buffer */ + if (pcrDigestSz + packet.pos > sizeof(buf)) + return BUFFER_E; + XMEMCPY(buf + packet.pos, pcrDigest, pcrDigestSz); + packet.pos += pcrDigestSz; - wc_HashFree(&hash_ctx, hashType); + rc = wolfTPM2_PolicyHash(pcrAlg, digest, digestSz, TPM_CC_PolicyPCR, + buf, packet.pos); #ifdef DEBUG_WOLFTPM if (rc != 0) { - printf("wolfTPM_PolicyRefMake failed %d: %s\n", + printf("wolfTPM2_PolicyPCRMake failed %d: %s\n", rc, wolfTPM2_GetRCString(rc)); } #ifdef WOLFTPM_DEBUG_VERBOSE else { - printf("wolfTPM_PolicyRefMake: %d\n", *digestSz); + printf("wolfTPM2_PolicyPCRMake: %d\n", *digestSz); TPM2_PrintBin(digest, *digestSz); } #endif @@ -7371,6 +7536,15 @@ int wolfTPM2_PolicyRefMake(TPM_ALG_ID pcrAlg, byte* digest, word32* digestSz, return rc; } +/* Assemble a PCR policy ref - optional */ +/* aHash = hash(approvedPolicy || policyRef) */ +int wolfTPM2_PolicyRefMake(TPM_ALG_ID pcrAlg, byte* digest, word32* digestSz, + const byte* policyRef, word32 policyRefSz) +{ + return wolfTPM2_PolicyHash(pcrAlg, digest, digestSz, 0, + policyRef, policyRefSz); +} + /* Assemble a PCR Authorization for a public key */ /* policyDigestnew = hash(policyDigestOld || TPM_CC_PolicyAuthorize || * Public.Name || PolicyRef) */ @@ -7379,49 +7553,17 @@ int wolfTPM2_PolicyAuthorizeMake(TPM_ALG_ID pcrAlg, const byte* policyRef, word32 policyRefSz) { int rc; - word32 val; - enum wc_HashType hashType; - wc_HashAlg hash_ctx; - word32 inSz; + TPM2B_NAME name; - if (pub == NULL || digest == NULL || digestSz == NULL) { + if (digest == NULL || digestSz == NULL || pub == NULL) { return BAD_FUNC_ARG; } - inSz = *digestSz; /* capture input digest size (for policyDigestOld) */ - rc = TPM2_GetHashType(pcrAlg); - hashType = (enum wc_HashType)rc; - rc = wc_HashGetDigestSize(hashType); - if (rc < 0) - return rc; - *digestSz = rc; - - rc = wc_HashInit(&hash_ctx, hashType); - if (rc != 0) - return rc; - - /* policyDigestOld */ - if (rc == 0 && inSz > 0) { - rc = wc_HashUpdate(&hash_ctx, hashType, digest, inSz); - } - /* Command Code */ - if (rc == 0) { - val = TPM2_Packet_SwapU32(TPM_CC_PolicyAuthorize); - rc = wc_HashUpdate(&hash_ctx, hashType, (byte*)&val, sizeof(val)); - } - /* Public Name Compute */ - if (rc == 0) { - TPM2B_NAME name; - rc = wolfTPM2_ComputeName(pub, &name); - if (rc == 0) { - rc = wc_HashUpdate(&hash_ctx, hashType, name.name, name.size); - } - } + rc = wolfTPM2_ComputeName(pub, &name); if (rc == 0) { - rc = wc_HashFinal(&hash_ctx, hashType, digest); + rc = wolfTPM2_PolicyHash(pcrAlg, digest, digestSz, + TPM_CC_PolicyAuthorize, name.name, name.size); } - wc_HashFree(&hash_ctx, hashType); - if (rc == 0) { rc = wolfTPM2_PolicyRefMake(pcrAlg, digest, digestSz, policyRef, policyRefSz); @@ -7441,6 +7583,7 @@ int wolfTPM2_PolicyAuthorizeMake(TPM_ALG_ID pcrAlg, #endif return rc; } + #endif /* !WOLFTPM2_NO_WOLFCRYPT */ /******************************************************************************/ @@ -7538,20 +7681,17 @@ int wolfTPM2_SetIdentityAuth(WOLFTPM2_DEV* dev, WOLFTPM2_HANDLE* handle, static int tpm2_ifx_firmware_enable_policy(WOLFTPM2_DEV* dev) { int rc; - PolicyCommandCode_In policyCC; SetPrimaryPolicy_In policy; WOLFTPM2_SESSION tpmSession; XMEMSET(&tpmSession, 0, sizeof(tpmSession)); - XMEMSET(&policyCC, 0, sizeof(policyCC)); XMEMSET(&policy, 0, sizeof(policy)); rc = wolfTPM2_StartSession(dev, &tpmSession, NULL, NULL, TPM_SE_POLICY, TPM_ALG_NULL); if (rc == TPM_RC_SUCCESS) { - policyCC.policySession = tpmSession.handle.hndl; - policyCC.code = TPM_CC_FieldUpgradeStartVendor; - rc = TPM2_PolicyCommandCode(&policyCC); + rc = wolfTPM2_PolicyCommandCode(dev, &tpmSession, + TPM_CC_FieldUpgradeStartVendor); if (rc == TPM_RC_SUCCESS) { word32 policySz = (word32)sizeof(policy.authPolicy.buffer); rc = wolfTPM2_GetPolicyDigest(dev, tpmSession.handle.hndl, @@ -7580,17 +7720,14 @@ static int tpm2_ifx_firmware_start(WOLFTPM2_DEV* dev, TPM_ALG_ID hashAlg, { int rc; WOLFTPM2_SESSION tpmSession; - PolicyCommandCode_In policyCC; XMEMSET(&tpmSession, 0, sizeof(tpmSession)); - XMEMSET(&policyCC, 0, sizeof(policyCC)); rc = wolfTPM2_StartSession(dev, &tpmSession, NULL, NULL, TPM_SE_POLICY, TPM_ALG_NULL); if (rc == TPM_RC_SUCCESS) { - policyCC.policySession = tpmSession.handle.hndl; - policyCC.code = TPM_CC_FieldUpgradeStartVendor; - rc = TPM2_PolicyCommandCode(&policyCC); + rc = wolfTPM2_PolicyCommandCode(dev, &tpmSession, + TPM_CC_FieldUpgradeStartVendor); if (rc == TPM_RC_SUCCESS) { /* build command for manifest header */ uint16_t val16; diff --git a/wolftpm/tpm2.h b/wolftpm/tpm2.h index e18c36f2..d2e1fb2c 100644 --- a/wolftpm/tpm2.h +++ b/wolftpm/tpm2.h @@ -1711,6 +1711,67 @@ static const BYTE TPM_20_EK_AUTH_POLICY_SHA512[] = { }; #endif +#ifdef WOLFTPM_PROVISIONING +/* Precalcualted IDevID/IAK Policies */ +/* PolicyOR: + * 1: PolicyUser (section 7.3.6.1) + * 2: PolicyCertify (section 7.3.6.2) + * 3: PolicyActivateCredential (section 7.3.6.3) + * 4: PolicyDelegationNV (section 7.3.6.4)*/ +static const BYTE TPM_20_IDEVID_POLICY[] = { + 0xAD, 0x6B, 0x3A, 0x22, 0x84, 0xFD, 0x69, 0x8A, + 0x07, 0x10, 0xBF, 0x5C, 0xC1, 0xB9, 0xBD, 0xF1, + 0x5E, 0x25, 0x32, 0xE3, 0xF6, 0x01, 0xFA, 0x4B, + 0x93, 0xA6, 0xA8, 0xFA, 0x8D, 0xE5, 0x79, 0xEA +}; +static const BYTE TPM_20_IAK_POLICY[] = { + 0x54, 0x37, 0x18, 0x23, 0x26, 0xE4, 0x14, 0xFC, + 0xA7, 0x97, 0xD5, 0xF1, 0x74, 0x61, 0x5A, 0x16, + 0x41, 0xF6, 0x12, 0x55, 0x79, 0x7C, 0x3A, 0x2B, + 0x22, 0xC2, 0x1D, 0x12, 0x0B, 0x2D, 0x1E, 0x07 +}; +#ifdef WOLFSSL_SHA384 +static const BYTE TPM_20_IDEVID_POLICY_SHA384[] = { + 0x4D, 0xB1, 0xAA, 0x83, 0x6D, 0x0B, 0x56, 0x15, + 0xDF, 0x6E, 0xE5, 0x3A, 0x40, 0xEF, 0x70, 0xC6, + 0x1C, 0x21, 0x7F, 0x43, 0x03, 0xD4, 0x46, 0x95, + 0x92, 0x59, 0x72, 0xBC, 0x92, 0x70, 0x06, 0xCF, + 0xA5, 0xCB, 0xDF, 0x6D, 0xC1, 0x8C, 0x4D, 0xBE, + 0x32, 0x9B, 0x2F, 0x15, 0x42, 0xC3, 0xDD, 0x33 +}; +static const BYTE TPM_20_IAK_POLICY_SHA384[] = { + 0x12, 0x9D, 0x94, 0xEB, 0xF8, 0x45, 0x56, 0x65, + 0x2C, 0x6E, 0xEF, 0x43, 0xBB, 0xB7, 0x57, 0x51, + 0x2A, 0xC8, 0x7E, 0x52, 0xBE, 0x7B, 0x34, 0x9C, + 0xA6, 0xCE, 0x4D, 0x82, 0x6F, 0x74, 0x9F, 0xCF, + 0x67, 0x2F, 0x51, 0x71, 0x6C, 0x5C, 0xBB, 0x60, + 0x5F, 0x31, 0x3B, 0xF3, 0x45, 0xAA, 0xB3, 0x12 +}; +#endif +#ifdef WOLFSSL_SHA512 +static const BYTE TPM_20_IDEVID_POLICY_SHA512[] = { + 0x7D, 0xD7, 0x50, 0x0F, 0xD6, 0xC1, 0xB9, 0x4F, + 0x97, 0xA6, 0xAF, 0x91, 0x0D, 0xA1, 0x47, 0x30, + 0x1E, 0xF2, 0x8F, 0x66, 0x2F, 0xEE, 0x06, 0xF2, + 0x25, 0xA4, 0xCC, 0xAD, 0xDA, 0x3B, 0x4E, 0x6B, + 0x38, 0xE6, 0x6B, 0x2F, 0x3A, 0xD5, 0xDE, 0xE1, + 0xA0, 0x50, 0x3C, 0xD2, 0xDA, 0xED, 0xB1, 0xE6, + 0x8C, 0xFE, 0x4F, 0x84, 0xB0, 0x3A, 0x8C, 0xD2, + 0x2B, 0xB6, 0xA9, 0x76, 0xF0, 0x71, 0xA7, 0x2F +}; +static const BYTE TPM_20_IAK_POLICY_SHA512[] = { + 0x80, 0x60, 0xD1, 0xFB, 0x31, 0x71, 0x6A, 0x29, + 0xE4, 0x8A, 0x6E, 0x5F, 0xEC, 0xE0, 0x88, 0xBC, + 0xFC, 0x1B, 0x27, 0x8F, 0xC1, 0x62, 0x25, 0x5E, + 0x81, 0xC3, 0xEC, 0xA3, 0x54, 0x4C, 0xD4, 0x4A, + 0xF9, 0x44, 0x10, 0xC3, 0x71, 0x5D, 0x56, 0x1C, + 0xCC, 0xD9, 0xE3, 0x9A, 0x6C, 0xB2, 0x64, 0x6D, + 0x43, 0x53, 0x5B, 0xB5, 0x4E, 0xA8, 0x87, 0x10, + 0xDE, 0xB5, 0xF7, 0x83, 0x6B, 0xD9, 0xB5, 0x86 +}; +#endif +#endif /* WOLFTPM_PROVISIONING */ + /* HAL IO Callbacks */ struct TPM2_CTX; diff --git a/wolftpm/tpm2_types.h b/wolftpm/tpm2_types.h index 2fd545ea..dae9258f 100644 --- a/wolftpm/tpm2_types.h +++ b/wolftpm/tpm2_types.h @@ -226,9 +226,8 @@ typedef int64_t INT64; #ifndef WOLFTPM_CUSTOM_TYPES #include - #define XSTRTOL(s,e,b) strtol((s),(e),(b)) + #define XSTRTOUL(s,e,b) strtoul((s),(e),(b)) #define XATOI(s) atoi((s)) - #endif /* make sure file IO macros are available for examples */ diff --git a/wolftpm/tpm2_wrap.h b/wolftpm/tpm2_wrap.h index 9aa96e0c..37bdd856 100644 --- a/wolftpm/tpm2_wrap.h +++ b/wolftpm/tpm2_wrap.h @@ -58,13 +58,27 @@ typedef struct WOLFTPM2_DEV { TPM2_AUTH_SESSION session[MAX_SESSION_NUM]; } WOLFTPM2_DEV; -/* WOLFTPM2_KEYBLOB can be cast to WOLFTPM2_KEY. - * Both structures must have "handle" and "pub" as first members */ +/* Public Key with Handle. + * Must have "handle" and "pub" as first members */ typedef struct WOLFTPM2_KEY { WOLFTPM2_HANDLE handle; TPM2B_PUBLIC pub; } WOLFTPM2_KEY; +/* Primary Key - From TPM2_CreatePrimary that include creation hash and ticket. + * WOLFTPM2_PKEY can be cast to WOLFTPM2_KEY. + * Must have "handle" and "pub" as first members */ +typedef struct WOLFTPM2_PKEY { + WOLFTPM2_HANDLE handle; + TPM2B_PUBLIC pub; + + TPM2B_DIGEST creationHash; + TPMT_TK_CREATION creationTicket; +} WOLFTPM2_PKEY; + +/* Private/Public Key: + * WOLFTPM2_KEYBLOB can be cast to WOLFTPM2_KEY + * Must have "handle" and "pub" as first members */ typedef struct WOLFTPM2_KEYBLOB { WOLFTPM2_HANDLE handle; TPM2B_PUBLIC pub; @@ -595,6 +609,7 @@ WOLFTPM_API int wolfTPM2_CreateAuthSession_EkPolicy(WOLFTPM2_DEV* dev, \param authSz integer value, specifying the size of the password authorization, in bytes \sa wolfTPM2_CreateKey + \sa wolfTPM2_CreatePrimaryKey_ex \sa wolfTPM2_GetKeyTemplate_RSA \sa wolfTPM2_GetKeyTemplate_ECC */ @@ -602,6 +617,33 @@ WOLFTPM_API int wolfTPM2_CreatePrimaryKey(WOLFTPM2_DEV* dev, WOLFTPM2_KEY* key, TPM_HANDLE primaryHandle, TPMT_PUBLIC* publicTemplate, const byte* auth, int authSz); +/*! + \ingroup wolfTPM2_Wrappers + \brief Single function to prepare and create a TPM 2.0 Primary Key + \note TPM 2.0 allows only asymmetric RSA or ECC primary keys. Afterwards, both symmetric and asymmetric keys can be created under a TPM 2.0 Primary Key + Typically, Primary Keys are used to create Hierarchies of TPM 2.0 Keys. + The TPM uses a Primary Key to wrap the other keys, signing or decrypting. + + \return TPM_RC_SUCCESS: successful + \return TPM_RC_FAILURE: generic failure (check TPM IO and TPM return code) + \return BAD_FUNC_ARG: check the provided arguments + + \param dev pointer to a TPM2_DEV struct + \param pkey pointer to an empty struct of WOLFTPM2_PKEY type including the creation hash and ticket. + \param primaryHandle integer value, specifying one of four TPM 2.0 Primary Seeds: TPM_RH_OWNER, TPM_RH_ENDORSEMENT, TPM_RH_PLATFORM or TPM_RH_NULL + \param publicTemplate pointer to a TPMT_PUBLIC structure populated manually or using one of the wolfTPM2_GetKeyTemplate_... wrappers + \param auth pointer to a string constant, specifying the password authorization for the Primary Key + \param authSz integer value, specifying the size of the password authorization, in bytes + + \sa wolfTPM2_CreateKey + \sa wolfTPM2_CreatePrimaryKey + \sa wolfTPM2_GetKeyTemplate_RSA + \sa wolfTPM2_GetKeyTemplate_ECC +*/ +WOLFTPM_API int wolfTPM2_CreatePrimaryKey_ex(WOLFTPM2_DEV* dev, WOLFTPM2_PKEY* pkey, + TPM_HANDLE primaryHandle, TPMT_PUBLIC* publicTemplate, + const byte* auth, int authSz); + /*! \ingroup wolfTPM2_Wrappers \brief Change the authorization secret of a TPM 2.0 key @@ -2801,6 +2843,18 @@ WOLFTPM_API int wolfTPM2_GetKeyTemplate_RSA_AIK(TPMT_PUBLIC* publicTemplate); */ WOLFTPM_API int wolfTPM2_GetKeyTemplate_ECC_AIK(TPMT_PUBLIC* publicTemplate); +#ifdef WOLFTPM_PROVISIONING +WOLFTPM_API int wolfTPM2_GetKeyTemplate_RSA_IAK(TPMT_PUBLIC* publicTemplate, int keyBits, + TPM_ALG_ID hashAlg); +WOLFTPM_API int wolfTPM2_GetKeyTemplate_ECC_IAK(TPMT_PUBLIC* publicTemplate, + TPM_ECC_CURVE curveID, TPM_ALG_ID hashAlg); + +WOLFTPM_API int wolfTPM2_GetKeyTemplate_ECC_IDevID(TPMT_PUBLIC* publicTemplate, + TPM_ECC_CURVE curveID, TPM_ALG_ID hashAlg); +WOLFTPM_API int wolfTPM2_GetKeyTemplate_RSA_IDevID(TPMT_PUBLIC* publicTemplate, int keyBits, + TPM_ALG_ID hashAlg); +#endif /* WOLFTPM_PROVISIONING */ + /*! \ingroup wolfTPM2_Wrappers \brief Sets the unique area of a public template used by Create or CreatePrimary. @@ -3691,6 +3745,29 @@ WOLFTPM_API int wolfTPM2_PolicyPCRMake(TPM_ALG_ID pcrAlg, byte* pcrArray, word32 pcrArraySz, const byte* pcrDigest, word32 pcrDigestSz, byte* digest, word32* digestSz); +/*! + \ingroup wolfTPM2_Wrappers + + \brief Utility for creating a policy hash. + Generic helper that takes command code and input array. + policyDigestnew = hash(policyDigestOld || [cc] || [Input]) + + \return TPM_RC_SUCCESS: successful + \return INPUT_SIZE_E: policyDigestSz is too small to hold the returned digest + \return BAD_FUNC_ARG: check the provided arguments + + \param pcrAlg the hash algorithm to use with pcr policy + \param digest input/out digest (input "old" / output "new") + \param digestSz input/out digest size + \param input pointer to a array to use (optional) + \param inputSz size of input + + \sa wolfTPM2_PolicyPCRMake +*/ +WOLFTPM_API int wolfTPM2_PolicyHash(TPM_ALG_ID hashAlg, + byte* digest, word32* digestSz, TPM_CC cc, + const byte* input, word32 inputSz); + /*! \ingroup wolfTPM2_Wrappers @@ -3708,7 +3785,7 @@ WOLFTPM_API int wolfTPM2_PolicyPCRMake(TPM_ALG_ID pcrAlg, \param policyRefSz optional nonce size \sa wolfTPM2_PolicyPCRMake - \sa wolfTPM2_PolicyPCRMake + \sa wolfTPM2_PolicyHash */ WOLFTPM_API int wolfTPM2_PolicyAuthorizeMake(TPM_ALG_ID pcrAlg, const TPM2B_PUBLIC* pub, byte* digest, word32* digestSz, @@ -3729,6 +3806,7 @@ WOLFTPM_API int wolfTPM2_PolicyAuthorizeMake(TPM_ALG_ID pcrAlg, \param authSz integer value, specifying the size of the password authorization, in bytes \sa wolfTPM2_PolicyAuthValue + \sa wolfTPM2_PolicyCommandCode */ WOLFTPM_API int wolfTPM2_PolicyPassword(WOLFTPM2_DEV* dev, WOLFTPM2_SESSION* tpmSession, const byte* auth, int authSz); @@ -3747,10 +3825,28 @@ WOLFTPM_API int wolfTPM2_PolicyPassword(WOLFTPM2_DEV* dev, \param authSz integer value, specifying the size of the password authorization, in bytes \sa wolfTPM2_PolicyPassword + \sa wolfTPM2_PolicyCommandCode */ WOLFTPM_API int wolfTPM2_PolicyAuthValue(WOLFTPM2_DEV* dev, WOLFTPM2_SESSION* tpmSession, const byte* auth, int authSz); +/*! + \ingroup wolfTPM2_Wrappers + + \brief Wrapper for setting a policy command code + + \return TPM_RC_SUCCESS: successful + \return BAD_FUNC_ARG: check the provided arguments + + \param dev pointer to a TPM2_DEV struct + \param tpmSession pointer to a WOLFTPM2_SESSION struct used with wolfTPM2_StartSession and wolfTPM2_SetAuthSession + \param cc TPM_CC command code + + \sa wolfTPM2_PolicyPassword + \sa wolfTPM2_PolicyAuthValue +*/ +WOLFTPM_API int wolfTPM2_PolicyCommandCode(WOLFTPM2_DEV* dev, + WOLFTPM2_SESSION* tpmSession, TPM_CC cc); /* Pre-provisioned IAK and IDevID key/cert from TPM vendor */