Fix printf type warnings. Added missing stdio.h for printf in examples. Added new API's `TPM2_SetActiveCtx`, `TPM2_ChipStartup`, `TPM2_SetHalIoCb` and `TPM2_Init_ex`. Fix to make sure TPM2_CTX is cleaned up after `wolfTPM2_Test`. Allowed way to indicate `BOOL` type already defined.

pull/67/head
David Garske 2019-05-07 14:35:23 -07:00
parent 3e9d70c159
commit 5f0c7ba6c1
12 changed files with 111 additions and 39 deletions

2
examples/csr/csr.c 100644 → 100755
View File

@ -32,6 +32,8 @@
#include <examples/csr/csr.h>
#include <wolfssl/wolfcrypt/asn_public.h>
#include <stdio.h>
static const char* gClientCertRsaFile = "./certs/tpm-rsa-cert.csr";
static const char* gClientCertEccFile = "./certs/tpm-ecc-cert.csr";

30
examples/native/native_test.c 100644 → 100755
View File

@ -27,6 +27,8 @@
#include <examples/tpm_io.h>
#include <examples/tpm_test.h>
#include <stdio.h>
/******************************************************************************/
/* --- BEGIN TPM Native API Tests -- */
/******************************************************************************/
@ -426,7 +428,7 @@ int TPM2_Native_Test(void* userCtx)
goto exit;
}
sessionHandle = cmdOut.authSes.sessionHandle;
printf("TPM2_StartAuthSession: sessionHandle 0x%x\n", sessionHandle);
printf("TPM2_StartAuthSession: sessionHandle 0x%x\n", (word32)sessionHandle);
/* Policy Get Digest */
@ -513,7 +515,7 @@ int TPM2_Native_Test(void* userCtx)
goto exit;
}
handle = cmdOut.hashSeqStart.sequenceHandle;
printf("TPM2_HashSequenceStart: sequenceHandle 0x%x\n", handle);
printf("TPM2_HashSequenceStart: sequenceHandle 0x%x\n", (word32)handle);
/* set auth for hashing handle */
session[0].auth.size = sizeof(usageAuth)-1;
@ -598,7 +600,7 @@ int TPM2_Native_Test(void* userCtx)
endorse.name = cmdOut.createPri.name;
endorse.symmetric = cmdIn.createPri.inPublic.publicArea.parameters.rsaDetail.symmetric;
printf("TPM2_CreatePrimary: Endorsement 0x%x (%d bytes)\n",
endorse.handle, endorse.pub.size);
(word32)endorse.handle, endorse.pub.size);
/* Create Primary (Storage) */
@ -630,7 +632,7 @@ int TPM2_Native_Test(void* userCtx)
storage.pub = cmdOut.createPri.outPublic;
storage.name = cmdOut.createPri.name;
printf("TPM2_CreatePrimary: Storage 0x%x (%d bytes)\n",
storage.handle, storage.pub.size);
(word32)storage.handle, storage.pub.size);
#if 0
/* Move new primary key into NV to persist */
@ -657,7 +659,7 @@ int TPM2_Native_Test(void* userCtx)
goto exit;
}
handle = cmdOut.loadExt.objectHandle;
printf("TPM2_LoadExternal: 0x%x\n", handle);
printf("TPM2_LoadExternal: 0x%x\n", (word32)handle);
/* Make a credential */
XMEMSET(&cmdIn.makeCred, 0, sizeof(cmdIn.makeCred));
@ -687,7 +689,7 @@ int TPM2_Native_Test(void* userCtx)
goto exit;
}
printf("TPM2_ReadPublic Handle 0x%x: pub %d, name %d, qualifiedName %d\n",
cmdIn.readPub.objectHandle,
(word32)cmdIn.readPub.objectHandle,
cmdOut.readPub.outPublic.size, cmdOut.readPub.name.size,
cmdOut.readPub.qualifiedName.size);
@ -736,7 +738,7 @@ int TPM2_Native_Test(void* userCtx)
goto exit;
}
hmacKey.handle = cmdOut.load.objectHandle;
printf("TPM2_Load New HMAC Key Handle 0x%x\n", hmacKey.handle);
printf("TPM2_Load New HMAC Key Handle 0x%x\n", (word32)hmacKey.handle);
/* set auth for HMAC handle */
session[0].auth.size = sizeof(usageAuth)-1;
@ -856,7 +858,7 @@ int TPM2_Native_Test(void* userCtx)
goto exit;
}
eccKey.handle = cmdOut.load.objectHandle;
printf("TPM2_Load ECDSA Key Handle 0x%x\n", eccKey.handle);
printf("TPM2_Load ECDSA Key Handle 0x%x\n", (word32)eccKey.handle);
/* set session auth for ecc key */
session[0].auth.size = sizeof(usageAuth)-1;
@ -942,7 +944,7 @@ int TPM2_Native_Test(void* userCtx)
goto exit;
}
eccKey.handle = cmdOut.load.objectHandle;
printf("TPM2_Load ECDH Key Handle 0x%x\n", eccKey.handle);
printf("TPM2_Load ECDH Key Handle 0x%x\n", (word32)eccKey.handle);
/* set session auth for ecc key */
session[0].auth.size = sizeof(usageAuth)-1;
@ -1034,7 +1036,7 @@ int TPM2_Native_Test(void* userCtx)
goto exit;
}
rsaKey.handle = cmdOut.load.objectHandle;
printf("TPM2_Load RSA Key Handle 0x%x\n", rsaKey.handle);
printf("TPM2_Load RSA Key Handle 0x%x\n", (word32)rsaKey.handle);
/* set session auth for RSA key */
session[0].auth.size = sizeof(usageAuth)-1;
@ -1110,7 +1112,7 @@ int TPM2_Native_Test(void* userCtx)
TPM2_GetRCString(rc));
goto exit;
}
printf("TPM2_NV_DefineSpace: 0x%x\n", nvIndex);
printf("TPM2_NV_DefineSpace: 0x%x\n", (word32)nvIndex);
/* Read NV */
XMEMSET(&cmdIn.nvReadPub, 0, sizeof(cmdIn.nvReadPub));
@ -1124,9 +1126,9 @@ int TPM2_Native_Test(void* userCtx)
printf("TPM2_NV_ReadPublic: Sz %d, Idx 0x%x, nameAlg %d, Attr 0x%x, "
"authPol %d, dataSz %d, name %d\n",
cmdOut.nvReadPub.nvPublic.size,
cmdOut.nvReadPub.nvPublic.nvPublic.nvIndex,
(word32)cmdOut.nvReadPub.nvPublic.nvPublic.nvIndex,
cmdOut.nvReadPub.nvPublic.nvPublic.nameAlg,
cmdOut.nvReadPub.nvPublic.nvPublic.attributes,
(word32)cmdOut.nvReadPub.nvPublic.nvPublic.attributes,
cmdOut.nvReadPub.nvPublic.nvPublic.authPolicy.size,
cmdOut.nvReadPub.nvPublic.nvPublic.dataSize,
cmdOut.nvReadPub.nvName.size);
@ -1209,7 +1211,7 @@ int TPM2_Native_Test(void* userCtx)
goto exit;
}
aesKey.handle = cmdOut.load.objectHandle;
printf("TPM2_Load New AES Key Handle 0x%x\n", aesKey.handle);
printf("TPM2_Load New AES Key Handle 0x%x\n", (word32)aesKey.handle);
/* set auth for AES handle */
session[0].auth.size = sizeof(usageAuth)-1;

2
examples/pkcs7/pkcs7.c 100644 → 100755
View File

@ -32,6 +32,8 @@
#include <examples/pkcs7/pkcs7.h>
#include <wolfssl/wolfcrypt/pkcs7.h>
#include <stdio.h>
/* Sign PKCS7 using TPM based key:
* Must Run:
* 1. `./examples/csr/csr`

2
examples/tls/tls_client.c 100644 → 100755
View File

@ -40,6 +40,8 @@
#define USE_CERT_BUFFERS_256
#include <wolfssl/certs_test.h>
#include <stdio.h>
#ifdef TLS_BENCH_MODE
double benchStart;
#endif

2
examples/tls/tls_client_notpm.c 100644 → 100755
View File

@ -40,6 +40,8 @@
#define USE_CERT_BUFFERS_256
#include <wolfssl/certs_test.h>
#include <stdio.h>
#ifdef TLS_BENCH_MODE
double benchStart;
#endif

2
examples/tls/tls_common.h 100644 → 100755
View File

@ -34,6 +34,8 @@
#include <wolfssl/ssl.h>
#include <stdio.h>
#ifdef __cplusplus
extern "C" {
#endif

2
examples/tls/tls_server.c 100644 → 100755
View File

@ -34,6 +34,8 @@
#include <wolfssl/ssl.h>
#include <stdio.h>
#ifdef TLS_BENCH_MODE
double benchStart;
#endif

2
examples/wrap/wrap_test.c 100644 → 100755
View File

@ -30,6 +30,8 @@
#include <examples/tpm_test.h>
#include <examples/wrap/wrap_test.h>
#include <stdio.h>
/* Configuration */
#define TPM2_DEMO_NV_TEST_INDEX 0x01800200
#define TPM2_DEMO_NV_TEST_SIZE 1024 /* max size on Infineon SLB9670 is 1664 */

View File

@ -245,6 +245,11 @@ TPM2_CTX* TPM2_GetActiveCtx(void)
return gActiveTPM;
}
void TPM2_SetActiveCtx(TPM2_CTX* ctx)
{
gActiveTPM = ctx;
}
TPM_RC TPM2_SetSessionAuth(TPMS_AUTH_COMMAND* cmd)
{
TPM_RC rc;
@ -261,7 +266,51 @@ TPM_RC TPM2_SetSessionAuth(TPMS_AUTH_COMMAND* cmd)
return rc;
}
TPM_RC TPM2_Init(TPM2_CTX* ctx, TPM2HalIoCb ioCb, void* userCtx)
/* Assumes caller has handled mutex protection */
TPM_RC TPM2_ChipStartup(TPM2_CTX* ctx, int timeoutTries)
{
TPM_RC rc;
if (ctx == NULL) {
return TPM_RC_FAILURE;
}
/* Wait for chip startup to complete */
rc = TPM2_TIS_StartupWait(ctx, timeoutTries);
if (rc == TPM_RC_SUCCESS) {
/* Request locality for TPM module */
rc = TPM2_TIS_RequestLocality(ctx, timeoutTries);
if (rc == TPM_RC_SUCCESS) {
/* Get device information */
rc = TPM2_TIS_GetInfo(ctx);
}
}
return rc;
}
TPM_RC TPM2_SetHalIoCb(TPM2_CTX* ctx, TPM2HalIoCb ioCb, void* userCtx)
{
TPM_RC rc;
if (ctx == NULL) {
return TPM_RC_FAILURE;
}
rc = TPM2_AcquireLock(ctx);
if (rc == TPM_RC_SUCCESS) {
ctx->ioCb = ioCb;
ctx->userCtx = userCtx;
TPM2_ReleaseLock(ctx);
}
return rc;
}
TPM_RC TPM2_Init_ex(TPM2_CTX* ctx, TPM2HalIoCb ioCb, void* userCtx,
int timeoutTries)
{
TPM_RC rc;
@ -270,8 +319,9 @@ TPM_RC TPM2_Init(TPM2_CTX* ctx, TPM2HalIoCb ioCb, void* userCtx)
}
XMEMSET(ctx, 0, sizeof(TPM2_CTX));
ctx->ioCb = ioCb;
ctx->userCtx = userCtx;
rc = TPM2_SetHalIoCb(ctx, ioCb, userCtx);
if (rc != TPM_RC_SUCCESS)
return rc;
#ifndef WOLFTPM2_NO_WOLFCRYPT
#ifdef DEBUG_WOLFSSL
@ -303,27 +353,21 @@ TPM_RC TPM2_Init(TPM2_CTX* ctx, TPM2HalIoCb ioCb, void* userCtx)
if (rc == TPM_RC_SUCCESS) {
/* Set the active TPM global */
gActiveTPM = ctx;
TPM2_SetActiveCtx(ctx);
/* Wait for chip startup to complete */
rc = TPM2_TIS_StartupWait(ctx, TPM_TIMEOUT_TRIES);
if (rc == TPM_RC_SUCCESS) {
/* Request locality for TPM module */
rc = TPM2_TIS_RequestLocality(ctx, TPM_TIMEOUT_TRIES);
if (rc == TPM_RC_SUCCESS) {
/* Get device information */
rc = TPM2_TIS_GetInfo(ctx);
}
}
/* Perform chip startup */
rc = TPM2_ChipStartup(ctx, timeoutTries);
TPM2_ReleaseLock(ctx);
}
return rc;
}
TPM_RC TPM2_Init(TPM2_CTX* ctx, TPM2HalIoCb ioCb, void* userCtx)
{
return TPM2_Init_ex(ctx, ioCb, userCtx, TPM_TIMEOUT_TRIES);
}
TPM_RC TPM2_Cleanup(TPM2_CTX* ctx)
{
TPM_RC rc;

View File

@ -34,7 +34,8 @@ static int wolfTPM2_GetCapabilities_NoDev(WOLFTPM2_CAPS* cap);
/* --- BEGIN Wrapper Device Functions -- */
/******************************************************************************/
static int wolfTPM2_Init_NoDev(TPM2_CTX* ctx, TPM2HalIoCb ioCb, void* userCtx)
static int wolfTPM2_Init_NoDev(TPM2_CTX* ctx, TPM2HalIoCb ioCb, void* userCtx,
int timeoutTries)
{
int rc;
Startup_In startupIn;
@ -45,7 +46,7 @@ static int wolfTPM2_Init_NoDev(TPM2_CTX* ctx, TPM2HalIoCb ioCb, void* userCtx)
if (ctx == NULL)
return BAD_FUNC_ARG;
rc = TPM2_Init(ctx, ioCb, userCtx);
rc = TPM2_Init_ex(ctx, ioCb, userCtx, timeoutTries);
if (rc != TPM_RC_SUCCESS) {
#ifdef DEBUG_WOLFTPM
printf("TPM2_Init failed %d: %s\n", rc, wolfTPM2_GetRCString(rc));
@ -101,7 +102,7 @@ int wolfTPM2_Test(TPM2HalIoCb ioCb, void* userCtx, WOLFTPM2_CAPS* caps)
int rc;
TPM2_CTX ctx;
rc = wolfTPM2_Init_NoDev(&ctx, ioCb, userCtx);
rc = wolfTPM2_Init_NoDev(&ctx, ioCb, userCtx, TPM_STARTUP_TEST_TRIES);
if (rc != TPM_RC_SUCCESS) {
return rc;
}
@ -111,6 +112,8 @@ int wolfTPM2_Test(TPM2HalIoCb ioCb, void* userCtx, WOLFTPM2_CAPS* caps)
rc = wolfTPM2_GetCapabilities_NoDev(caps);
}
TPM2_Cleanup(&ctx);
return rc;
}
@ -121,7 +124,7 @@ int wolfTPM2_Init(WOLFTPM2_DEV* dev, TPM2HalIoCb ioCb, void* userCtx)
if (dev == NULL)
return BAD_FUNC_ARG;
rc = wolfTPM2_Init_NoDev(&dev->ctx, ioCb, userCtx);
rc = wolfTPM2_Init_NoDev(&dev->ctx, ioCb, userCtx, TPM_TIMEOUT_TRIES);
if (rc != TPM_RC_SUCCESS) {
return rc;
}

View File

@ -2701,11 +2701,16 @@ WOLFTPM_API int TPM2_SetCommandSet(SetCommandSet_In* in);
/* Non-standard API's */
#define _TPM_Init TPM2_Init
WOLFTPM_API TPM_RC TPM2_Init(TPM2_CTX* ctx, TPM2HalIoCb ioCb, void* userCtx);
WOLFTPM_API TPM_RC TPM2_Init_ex(TPM2_CTX* ctx, TPM2HalIoCb ioCb, void* userCtx,
int timeoutTries);
WOLFTPM_API TPM_RC TPM2_Cleanup(TPM2_CTX* ctx);
/* Other API's - Not TPM Spec */
/* Other API's - Not in TPM Specification */
WOLFTPM_API TPM_RC TPM2_ChipStartup(TPM2_CTX* ctx, int timeoutTries);
WOLFTPM_API TPM_RC TPM2_SetHalIoCb(TPM2_CTX* ctx, TPM2HalIoCb ioCb, void* userCtx);
WOLFTPM_API TPM_RC TPM2_SetSessionAuth(TPMS_AUTH_COMMAND *cmd);
WOLFTPM_API void TPM2_SetActiveCtx(TPM2_CTX* ctx);
WOLFTPM_API TPM2_CTX* TPM2_GetActiveCtx(void);
WOLFTPM_API int TPM2_GetHashDigestSize(TPMI_ALG_HASH hashAlg);
@ -2722,8 +2727,6 @@ WOLFTPM_API int TPM2_GetWolfCurve(int curve_id);
#ifdef DEBUG_WOLFTPM
WOLFTPM_API void TPM2_PrintBin(const byte* buffer, word32 length);
#else
#define TPM2_PrintBin(b, l)
#endif

6
wolftpm/tpm2_types.h 100644 → 100755
View File

@ -45,7 +45,9 @@
typedef uint8_t UINT8;
typedef uint8_t BYTE;
typedef int8_t INT8;
#ifndef HAVE_BOOL
typedef int BOOL;
#endif
typedef uint16_t UINT16;
typedef int16_t INT16;
typedef uint32_t UINT32;
@ -178,6 +180,10 @@ typedef int64_t INT64;
#define MAX_SPI_FRAMESIZE 64
#endif
#ifndef TPM_STARTUP_TEST_TRIES
#define TPM_STARTUP_TEST_TRIES 2
#endif
#ifndef TPM_TIMEOUT_TRIES
#define TPM_TIMEOUT_TRIES 1000000
#endif