diff --git a/src/tpm2_wrap.c b/src/tpm2_wrap.c index f5ad008..8dfd269 100644 --- a/src/tpm2_wrap.c +++ b/src/tpm2_wrap.c @@ -5009,24 +5009,7 @@ int wolfTPM2_CSR_SetCustomExt(WOLFTPM2_DEV* dev, WOLFTPM2_CSR* csr, } #if defined(WOLFSSL_ASN_TEMPLATE) && defined(WOLFSSL_CUSTOM_OID) && \ defined(HAVE_OID_ENCODING) - - if (XSTRLEN(oid) >= WOLFTPM2_MAX_OID_STRING_SZ) { - return BUFFER_E; - } - - XSTRNCPY(csr->exts_oids[csr->customCertExtCount], oid, - WOLFTPM2_MAX_OID_STRING_SZ); - rc = wc_SetCustomExtension(&csr->req, critical, - csr->exts_oids[csr->customCertExtCount], der, - derSz); - - if (rc == 0) { - csr->customCertExtCount++; - } else { - XMEMSET(csr->exts_oids[csr->customCertExtCount], 0, - WOLFTPM2_MAX_OID_STRING_SZ); - } - + rc = wc_SetCustomExtension(&csr->req, critical, oid, der, derSz); #else (void)critical; (void)oid; diff --git a/wolftpm/tpm2_types.h b/wolftpm/tpm2_types.h old mode 100644 new mode 100755 index e15af34..e6f301b --- a/wolftpm/tpm2_types.h +++ b/wolftpm/tpm2_types.h @@ -89,7 +89,7 @@ typedef int64_t INT64; #include #include #include - #include + #include #include #include #ifdef WOLF_CRYPTO_CB diff --git a/wolftpm/tpm2_wrap.h b/wolftpm/tpm2_wrap.h old mode 100644 new mode 100755 index 4a542fe..991d5d5 --- a/wolftpm/tpm2_wrap.h +++ b/wolftpm/tpm2_wrap.h @@ -83,24 +83,10 @@ typedef struct WOLFTPM2_HMAC { } WOLFTPM2_HMAC; #ifdef WOLFTPM2_CERT_GEN - -#ifndef WOLFTPM2_NUM_CUSTOM_EXT -#define WOLFTPM2_NUM_CUSTOM_EXT NUM_CUSTOM_EXT -#endif - -#ifndef WOLFTPM2_MAX_OID_STRING_SZ -#define WOLFTPM2_MAX_OID_STRING_SZ MAX_OID_STRING_SZ -#endif - typedef struct WOLFTPM2_CSR { -#if defined(WOLFSSL_ASN_TEMPLATE) && defined(WOLFSSL_CUSTOM_OID) && \ - defined(HAVE_OID_ENCODING) - int customCertExtCount; - char exts_oids[WOLFTPM2_NUM_CUSTOM_EXT][WOLFTPM2_MAX_OID_STRING_SZ]; -#endif /* WOLFSSL_ASN_TEMPLATE && WOLFSSL_CUSTOM_OID && HAVE_OID_ENCODING */ Cert req; } WOLFTPM2_CSR; -#endif /* WOLFTPM2_CERT_GEN */ +#endif #ifndef WOLFTPM2_MAX_BUFFER #define WOLFTPM2_MAX_BUFFER 2048 diff --git a/wrapper/CSharp/wolfTPM-tests.cs b/wrapper/CSharp/wolfTPM-tests.cs index 99b6aaf..05a6544 100644 --- a/wrapper/CSharp/wolfTPM-tests.cs +++ b/wrapper/CSharp/wolfTPM-tests.cs @@ -105,7 +105,8 @@ namespace tpm_csharp_test Console.WriteLine(sb.ToString()); } - private static void DumpByteArray(string filename, byte[] bytes) { + private static void DumpByteArray(string filename, byte[] bytes) + { var writer = new BinaryWriter(File.OpenWrite(filename)); writer.Write(bytes); } diff --git a/wrapper/CSharp/wolfTPM.cs b/wrapper/CSharp/wolfTPM.cs index 2d8c977..965ab50 100644 --- a/wrapper/CSharp/wolfTPM.cs +++ b/wrapper/CSharp/wolfTPM.cs @@ -747,7 +747,7 @@ namespace wolfTPM private static extern int wolfTPM2_CSR_SetCustomExt(IntPtr dev, IntPtr csr, int critical, - string oid, + byte[] oid, byte[] der, uint derSz); @@ -763,9 +763,13 @@ namespace wolfTPM /// Success: 0 public int SetCustomExtension(string oid, string der, int critical) { + /* Allocate a buffer here for OID and DER, since the underlying + * library wants to have the pointer available later. The garbage + * collection at end of caller frees memory */ + byte[] oidBuf = Encoding.ASCII.GetBytes(oid); byte[] derBuf = Encoding.ASCII.GetBytes(der); int rc = wolfTPM2_CSR_SetCustomExt(IntPtr.Zero, csr, critical, - oid, derBuf, (uint)der.Length); + oidBuf, derBuf, (uint)der.Length); if (rc != (int)Status.TPM_RC_SUCCESS && rc != (int)Status.NOT_COMPILED_IN) { throw new WolfTpm2Exception(