Simplified fix for CSharp `SetCustomExtension`.

pull/239/head
David Garske 2022-08-26 10:50:06 -07:00
parent ccee50355d
commit 042f4c51aa
5 changed files with 11 additions and 37 deletions

View File

@ -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;

2
wolftpm/tpm2_types.h 100644 → 100755
View File

@ -89,7 +89,7 @@ typedef int64_t INT64;
#include <wolfssl/wolfcrypt/hash.h>
#include <wolfssl/wolfcrypt/rsa.h>
#include <wolfssl/wolfcrypt/ecc.h>
#include <wolfssl/wolfcrypt/asn.h>
#include <wolfssl/wolfcrypt/asn_public.h>
#include <wolfssl/wolfcrypt/hmac.h>
#include <wolfssl/wolfcrypt/aes.h>
#ifdef WOLF_CRYPTO_CB

16
wolftpm/tpm2_wrap.h 100644 → 100755
View File

@ -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

View File

@ -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);
}

View File

@ -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
/// <returns>Success: 0</returns>
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(