@@ -68,16 +68,10 @@ int TPM2_MakeCredential_Example(void* userCtx, int argc, char *argv[])
6868 const char * srkPubFile = "srk.pub" ;
6969 const char * pubFilename = NULL ;
7070
71- union {
72- MakeCredential_In makeCred ;
73- LoadExternal_In loadExtIn ;
74- byte maxInput [MAX_COMMAND_SIZE ];
75- } cmdIn ;
76- union {
77- MakeCredential_Out makeCred ;
78- LoadExternal_Out loadExtOut ;
79- byte maxOutput [MAX_RESPONSE_SIZE ];
80- } cmdOut ;
71+ MakeCredential_In makeCredIn ;
72+ MakeCredential_Out makeCredOut ;
73+ LoadExternal_In loadExtIn ;
74+ LoadExternal_Out loadExtOut ;
8175
8276 if (argc == 1 ) {
8377 printf ("Using public key from SRK to create the challenge\n" );
@@ -100,12 +94,6 @@ int TPM2_MakeCredential_Example(void* userCtx, int argc, char *argv[])
10094 goto exit_badargs ;
10195 }
10296
103- XMEMSET (& name , 0 , sizeof (name ));
104- XMEMSET (& cmdIn .makeCred , 0 , sizeof (cmdIn .makeCred ));
105- XMEMSET (& cmdOut .makeCred , 0 , sizeof (cmdOut .makeCred ));
106- XMEMSET (& cmdIn .loadExtIn , 0 , sizeof (cmdIn .loadExtIn ));
107- XMEMSET (& cmdOut .loadExtOut , 0 , sizeof (cmdOut .loadExtOut ));
108-
10997 printf ("Demo how to create a credential challenge for remote attestation\n" );
11098 printf ("Credential will be stored in %s\n" , output );
11199
@@ -125,24 +113,26 @@ int TPM2_MakeCredential_Example(void* userCtx, int argc, char *argv[])
125113 }
126114 rc = readKeyBlob (pubFilename , & primary );
127115 if (rc != 0 ) {
128- printf ("Failure to load %s\n" , pubFilename );
116+ printf ("Failure to read %s\n" , pubFilename );
129117 goto exit ;
130118 }
119+
131120 /* Prepare the key for use by the TPM */
132- XMEMCPY (& cmdIn .loadExtIn .inPublic , & primary .pub ,
133- sizeof (cmdIn .loadExtIn .inPublic ));
134- cmdIn .loadExtIn .hierarchy = TPM_RH_NULL ;
135- rc = TPM2_LoadExternal (& cmdIn .loadExtIn , & cmdOut .loadExtOut );
121+ XMEMSET (& loadExtIn , 0 , sizeof (loadExtIn ));
122+ XMEMSET (& loadExtOut , 0 , sizeof (loadExtOut ));
123+ XMEMCPY (& loadExtIn .inPublic , & primary .pub , sizeof (loadExtIn .inPublic ));
124+ loadExtIn .hierarchy = TPM_RH_NULL ;
125+ rc = TPM2_LoadExternal (& loadExtIn , & loadExtOut );
136126 if (rc != TPM_RC_SUCCESS ) {
137127 printf ("TPM2_LoadExternal: failed %d: %s\n" , rc ,
138128 wolfTPM2_GetRCString (rc ));
139129 return rc ;
140130 }
141131 printf ("Public key for encryption loaded\n" );
142- handle .hndl = cmdOut .loadExtOut .objectHandle ;
143-
132+ handle .hndl = loadExtOut .objectHandle ;
144133#if !defined(NO_FILESYSTEM ) && !defined(NO_WRITE_TEMP_FILES )
145134 /* Load AK Name digest */
135+ XMEMSET (& name , 0 , sizeof (name ));
146136 fp = XFOPEN ("ak.name" , "rb" );
147137 if (fp != XBADFILE ) {
148138 size_t nameReadSz = XFREAD ((BYTE * )& name , 1 , sizeof (name ), fp );
@@ -153,31 +143,37 @@ int TPM2_MakeCredential_Example(void* userCtx, int argc, char *argv[])
153143#endif
154144
155145 /* Create secret for the attestation server */
156- cmdIn .makeCred .credential .size = CRED_SECRET_SIZE ;
157- wolfTPM2_GetRandom (& dev , cmdIn .makeCred .credential .buffer ,
158- cmdIn .makeCred .credential .size );
159- /* Prepare the AK name */
160- cmdIn .makeCred .objectName .size = name .size ;
161- XMEMCPY (cmdIn .makeCred .objectName .name , name .name ,
162- cmdIn .makeCred .objectName .size );
146+ XMEMSET (& makeCredIn , 0 , sizeof (makeCredIn ));
147+ XMEMSET (& makeCredOut , 0 , sizeof (makeCredOut ));
148+ makeCredIn .credential .size = CRED_SECRET_SIZE ;
149+ wolfTPM2_GetRandom (& dev , makeCredIn .credential .buffer ,
150+ makeCredIn .credential .size );
151+ /* Set the object name */
152+ makeCredIn .objectName .size = name .size ;
153+ XMEMCPY (makeCredIn .objectName .name , name .name ,
154+ makeCredIn .objectName .size );
163155 /* Set TPM key and execute */
164- cmdIn . makeCred .handle = handle .hndl ;
165- rc = TPM2_MakeCredential (& cmdIn . makeCred , & cmdOut . makeCred );
156+ makeCredIn .handle = handle .hndl ;
157+ rc = TPM2_MakeCredential (& makeCredIn , & makeCredOut );
166158 if (rc != TPM_RC_SUCCESS ) {
167- printf ("TPM2_MakeCredentials failed 0x%x: %s\n" , rc ,
159+ printf ("TPM2_MakeCredential failed 0x%x: %s\n" , rc ,
168160 TPM2_GetRCString (rc ));
169161 goto exit ;
170162 }
171163 printf ("TPM2_MakeCredential success\n" );
172164
165+ printf ("Secret: %d\n" , makeCredIn .credential .size );
166+ TPM2_PrintBin (makeCredIn .credential .buffer ,
167+ makeCredIn .credential .size );
168+
173169#if !defined(NO_FILESYSTEM ) && !defined(NO_WRITE_TEMP_FILES )
174170 fp = XFOPEN (output , "wb" );
175171 if (fp != XBADFILE ) {
176- dataSize = (int )XFWRITE ((BYTE * )& cmdOut . makeCred .credentialBlob , 1 ,
177- sizeof (cmdOut . makeCred .credentialBlob ), fp );
172+ dataSize = (int )XFWRITE ((BYTE * )& makeCredOut .credentialBlob , 1 ,
173+ sizeof (makeCredOut .credentialBlob ), fp );
178174 if (dataSize > 0 ) {
179- dataSize += (int )XFWRITE ((BYTE * )& cmdOut . makeCred .secret , 1 ,
180- sizeof (cmdOut . makeCred .secret ), fp );
175+ dataSize += (int )XFWRITE ((BYTE * )& makeCredOut .secret , 1 ,
176+ sizeof (makeCredOut .secret ), fp );
181177 }
182178 XFCLOSE (fp );
183179 }
0 commit comments