@@ -51,7 +51,7 @@ static const char* gClientCertEccFile = "./certs/tpm-ecc-cert.pem";
5151/******************************************************************************/
5252
5353static int TPM2_CSR_Generate (WOLFTPM2_DEV * dev , int keyType , WOLFTPM2_KEY * key ,
54- const char * outputPemFile , int makeSelfSignedCert , int devId )
54+ const char * outputPemFile , int makeSelfSignedCert , int devId , int sigType )
5555{
5656 int rc ;
5757 const char * subject = NULL ;
@@ -63,6 +63,7 @@ static int TPM2_CSR_Generate(WOLFTPM2_DEV* dev, int keyType, WOLFTPM2_KEY* key,
6363 const char * custOid = "1.2.3.4.5" ;
6464 const char * custOidVal = "This is NOT a critical extension" ;
6565 WOLFTPM2_CSR * csr = wolfTPM2_NewCSR ();
66+
6667 if (csr == NULL ) {
6768 return MEMORY_E ;
6869 }
@@ -82,7 +83,7 @@ static int TPM2_CSR_Generate(WOLFTPM2_DEV* dev, int keyType, WOLFTPM2_KEY* key,
8283#ifdef WOLFTPM2_NO_HEAP
8384 /* single shot API for CSR generation */
8485 rc = wolfTPM2_CSR_Generate_ex (dev , key , subject , keyUsage ,
85- CTC_FILETYPE_PEM , output , outputSz , 0 , makeSelfSignedCert ,
86+ CTC_FILETYPE_PEM , output , outputSz , sigType , makeSelfSignedCert ,
8687 devId );
8788#else
8889 rc = wolfTPM2_CSR_SetSubject (dev , csr , subject );
@@ -100,7 +101,7 @@ static int TPM2_CSR_Generate(WOLFTPM2_DEV* dev, int keyType, WOLFTPM2_KEY* key,
100101 }
101102 if (rc == 0 ) {
102103 rc = wolfTPM2_CSR_MakeAndSign_ex (dev , csr , key , CTC_FILETYPE_PEM ,
103- output , outputSz , 0 , makeSelfSignedCert , devId );
104+ output , outputSz , sigType , makeSelfSignedCert , devId );
104105 }
105106#endif
106107 if (rc >= 0 ) {
@@ -202,27 +203,36 @@ int TPM2_CSR_ExampleArgs(void* userCtx, int argc, char *argv[])
202203 if (rc == 0 ) {
203204 rc = TPM2_CSR_Generate (& dev , RSA_TYPE , & key ,
204205 makeSelfSignedCert ? gClientCertRsaFile : gClientCsrRsaFile ,
205- makeSelfSignedCert , tpmDevId );
206+ makeSelfSignedCert , tpmDevId , CTC_SHA256wRSA );
206207 }
207208 wolfTPM2_UnloadHandle (& dev , & key .handle );
208209 }
209210#endif /* !NO_RSA */
210211
211212#ifdef HAVE_ECC
212213 if (rc == 0 ) {
214+ int sigType = CTC_SHA256wECDSA ;
215+ TPM_ECC_CURVE curve = TPM_ECC_NIST_P256 ;
213216 tpmCtx .eccKey = & key ;
217+
218+ #if defined(NO_ECC256 ) && defined(HAVE_ECC384 ) && ECC_MIN_KEY_SZ <= 384
219+ /* make sure we use a curve that is enabled */
220+ sigType = CTC_SHA384wECDSA ;
221+ curve = TPM_ECC_NIST_P384 ;
222+ #endif
223+
214224 rc = wolfTPM2_GetKeyTemplate_ECC (& publicTemplate ,
215225 TPMA_OBJECT_sensitiveDataOrigin | TPMA_OBJECT_userWithAuth |
216226 TPMA_OBJECT_sign | TPMA_OBJECT_noDA ,
217- TPM_ECC_NIST_P256 , TPM_ALG_ECDSA );
227+ curve , TPM_ALG_ECDSA );
218228 if (rc == 0 ) {
219229 rc = getECCkey (& dev , & storageKey , & key , NULL , tpmDevId ,
220230 (byte * )gKeyAuth , sizeof (gKeyAuth )- 1 , & publicTemplate );
221231 }
222232 if (rc == 0 ) {
223233 rc = TPM2_CSR_Generate (& dev , ECC_TYPE , & key ,
224234 makeSelfSignedCert ? gClientCertEccFile : gClientCsrEccFile ,
225- makeSelfSignedCert , tpmDevId );
235+ makeSelfSignedCert , tpmDevId , sigType );
226236 }
227237 wolfTPM2_UnloadHandle (& dev , & key .handle );
228238 }
0 commit comments