Skip to content

Commit f4987d0

Browse files
committed
address pr comments after code update
1 parent 22b84ba commit f4987d0

7 files changed

Lines changed: 65 additions & 40 deletions

File tree

wolfcrypt/src/hwpuf.c

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,15 @@
3838
#include <wolfssl/wolfcrypt/port/nxp/hwpuf_port.h>
3939
#endif
4040

41+
static int hwpuf_registered = 0;
4142

4243
WOLFSSL_API int wc_HWPUF_Register(wc_HWPUF* hwpuf, void* heap, int devId)
4344
{
4445
int ret = CRYPTOCB_UNAVAILABLE;
4546

4647
if (hwpuf == NULL)
4748
return BAD_FUNC_ARG;
48-
if (hwpuf->registered)
49+
if (hwpuf_registered)
4950
return HWPUF_REGISTER_E;
5051

5152
ForceZero(hwpuf, sizeof(wc_HWPUF));
@@ -55,12 +56,14 @@ WOLFSSL_API int wc_HWPUF_Register(wc_HWPUF* hwpuf, void* heap, int devId)
5556
#ifdef WOLFSSL_NXP_HWPUF
5657
ret = nxp_hwpuf_RegisterDevice(hwpuf);
5758
#endif
58-
59-
if (ret == 0)
60-
hwpuf->registered = 1;
61-
else
59+
if (ret != 0) {
60+
if (ret != CRYPTOCB_UNAVAILABLE) {
61+
ret = HWPUF_REGISTER_E;
62+
}
6263
ForceZero(hwpuf, sizeof(wc_HWPUF));
63-
64+
return ret;
65+
}
66+
hwpuf_registered = 1;
6467
return ret;
6568
}
6669

@@ -70,15 +73,15 @@ WOLFSSL_API int wc_HWPUF_Unregister(wc_HWPUF* hwpuf)
7073

7174
if (hwpuf == NULL)
7275
return BAD_FUNC_ARG;
73-
if (!hwpuf->registered)
76+
if (!hwpuf_registered)
7477
return 0;
7578

7679
#ifdef WOLFSSL_NXP_HWPUF
7780
ret = nxp_hwpuf_UnregisterDevice(hwpuf);
7881
#endif
7982

8083
ForceZero(hwpuf, sizeof(wc_HWPUF));
81-
84+
hwpuf_registered = 0;
8285
return ret;
8386
}
8487

@@ -88,7 +91,7 @@ WOLFSSL_API int wc_HWPUF_Init(wc_HWPUF* hwpuf)
8891

8992
if (hwpuf == NULL)
9093
return BAD_FUNC_ARG;
91-
if (!hwpuf->registered)
94+
if (!hwpuf_registered)
9295
return HWPUF_REGISTER_E;
9396
if ((hwpuf->flags & WC_HWPUF_FLAG_INITED) != 0)
9497
return 0;
@@ -106,7 +109,7 @@ WOLFSSL_API int wc_HWPUF_Deinit(wc_HWPUF* hwpuf)
106109

107110
if (hwpuf == NULL)
108111
return BAD_FUNC_ARG;
109-
if (!hwpuf->registered)
112+
if (!hwpuf_registered)
110113
return HWPUF_REGISTER_E;
111114

112115
ret = wc_CryptoCb_HwpufDeinit(hwpuf);

wolfcrypt/src/port/nxp/hwpuf_port.c

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,12 @@
4343
#include <wolfcrypt/src/misc.c>
4444
#endif
4545

46+
typedef enum nxp_hwpuf_keytype {
47+
nxp_hwpuf_keytype_user = 0,
48+
nxp_hwpuf_keytype_intrinsic = 1,
49+
nxp_hwpuf_keytype_max = nxp_hwpuf_keytype_intrinsic
50+
} nxp_hwpuf_keytype;
51+
4652
typedef struct nxp_hwpuf_ctx {
4753
word32 keyMask; /* unique per reset */
4854
} nxp_hwpuf_ctx;
@@ -51,18 +57,8 @@ static nxp_hwpuf_ctx ctx;
5157
static puf_config_t conf;
5258

5359

54-
static int getACFromPFR(byte *ac)
55-
{
56-
int ret;
57-
flash_config_t flashInstance;
58-
59-
memset(&flashInstance, 0, sizeof(flash_config_t));
60-
FLASH_Init(&flashInstance);
61-
FFR_Init(&flashInstance);
62-
63-
ret = FFR_KeystoreGetAC(&flashInstance, ac);
64-
return ret != kStatus_Success;
65-
}
60+
#define NXP_HWPUF_USER_KEY 0
61+
#define NXP_HWPUF_INTRINSIC_KEY 0
6662

6763
static int keyCodeCheck(byte* keyCode, word32* keytype,
6864
word32* keyidx, word32* keysize)
@@ -71,16 +67,18 @@ static int keyCodeCheck(byte* keyCode, word32* keytype,
7167
*keyidx = keyCode[1];
7268
*keysize = keyCode[3] == 0 ? 512 : 8 * keyCode[3] ;
7369

74-
if (*keytype >= 2)
70+
if (*keytype > nxp_hwpuf_keytype_max)
7571
return 1;
76-
if (*keyidx >= 16)
72+
if (*keyidx > kPUF_KeyIndexMax)
7773
return 2;
7874
if ( !HWPUF_KEY_SIZE_IS_VALID(*keysize) )
7975
return 3;
8076

8177
return 0;
8278
}
8379

80+
static int nxp_rng_initialized = 0;
81+
8482
static int nxp_hwpuf_Init(wc_HWPUF* hwpuf)
8583
{
8684
WOLFSSL_ENTER("nxp_hwpuf_Init");
@@ -93,6 +91,10 @@ static int nxp_hwpuf_Init(wc_HWPUF* hwpuf)
9391
PUF_Deinit(PUF, &conf);
9492
return HWPUF_INIT_E;
9593
}
94+
if (!nxp_rng_initialized) {
95+
RNG_Init(RNG);
96+
nxp_rng_initialized = 1;
97+
}
9698
ctx.keyMask = RNG->RANDOM_NUMBER;
9799
return 0;
98100
}
@@ -191,6 +193,12 @@ static int nxp_hwpuf_SetKey(wc_HWPUF* hwpuf, byte keyIdx,
191193
if (hwpuf == NULL)
192194
return BAD_FUNC_ARG;
193195

196+
(void)keyIdx;
197+
(void)key;
198+
(void)keySz;
199+
(void)keyCode;
200+
(void)keyCodeSz;
201+
194202
return CRYPTOCB_UNAVAILABLE;
195203
}
196204

@@ -255,12 +263,14 @@ static int nxp_hwpuf_Zeroize(wc_HWPUF* hwpuf)
255263
return 0;
256264
}
257265

258-
static int nxp_hwpuf_CryptoDevCb(int devId, wc_CryptoInfo* info, void* ctx)
266+
static int nxp_hwpuf_CryptoDevCb(int devId, wc_CryptoInfo* info, void* devCtx)
259267
{
260268
int ret = CRYPTOCB_UNAVAILABLE;
261269

262270
WOLFSSL_ENTER("nxp_hwpuf_CryptoDevCb");
263271

272+
(void)devCtx;
273+
264274
if (info == NULL)
265275
return BAD_FUNC_ARG;
266276
if (devId == INVALID_DEVID)

wolfcrypt/test/test.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23431,7 +23431,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t hwpuf_test(void)
2343123431
if (XMEMCMP(key32_1, key32_2, 32) != 0)
2343223432
return WC_TEST_RET_ENC_NC;
2343323433

23434-
/* ---- Test 7: generate a key and send directly to hw bus ---- */
23434+
/* ---- Test 6: generate a key and send directly to hw bus ---- */
2343523435
ret = wc_HWPUF_GenerateKey(&hwpuf, 0, 32, keyCode32, sizeof(keyCode32));
2343623436
if (ret != 0)
2343723437
return WC_TEST_RET_ENC_EC(ret);
@@ -23440,13 +23440,19 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t hwpuf_test(void)
2344023440
if (ret != 0)
2344123441
return WC_TEST_RET_ENC_EC(ret);
2344223442
{ /* key1 should be zeroed */
23443-
int idx;
23443+
word32 idx;
2344423444
for (idx = 0; idx < sizeof(key32_2); ++idx) {
2344523445
if (key32_2[idx])
2344623446
return WC_TEST_RET_ENC_NC;
2344723447
}
2344823448
}
2344923449

23450+
/* ---- Test 7: set key fails for now ---- */
23451+
if (wc_HWPUF_SetKey(&hwpuf, 7, key32_2, sizeof(key32_2),
23452+
keyCode32, sizeof(keyCode32))
23453+
!= WC_NO_ERR_TRACE(CRYPTOCB_UNAVAILABLE))
23454+
return WC_TEST_RET_ENC_NC;
23455+
2345023456
/* ---- Test 8: Bad argument checks ---- */
2345123457
/* null hwpuf */
2345223458
if (wc_HWPUF_Init(NULL) != WC_NO_ERR_TRACE(BAD_FUNC_ARG))
@@ -23492,6 +23498,11 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t hwpuf_test(void)
2349223498
!= WC_NO_ERR_TRACE(HWPUF_START_E))
2349323499
return WC_TEST_RET_ENC_NC;
2349423500

23501+
/* ---- Test 10: double register fails ---- */
23502+
if (wc_HWPUF_Register(&hwpuf, NULL, INVALID_DEVID)
23503+
!= WC_NO_ERR_TRACE(HWPUF_REGISTER_E))
23504+
return WC_TEST_RET_ENC_NC;
23505+
2349523506
/* ---- clean up ---- */
2349623507
(void)wc_HWPUF_Deinit(&hwpuf);
2349723508
ret = wc_HWPUF_Unregister(&hwpuf);

wolfssl/wolfcrypt/cryptocb.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -580,7 +580,7 @@ typedef struct wc_CryptoInfo {
580580
#endif
581581
#ifdef WOLFSSL_HWPUF
582582
struct {
583-
void* hwpuf; /* wc_HWPUF* context */
583+
wc_HWPUF* hwpuf; /* wc_HWPUF* context */
584584
int type; /* enum wc_HwpufType - discriminator */
585585
const void* ctx; /* read-only caller context */
586586
union {

wolfssl/wolfcrypt/error-crypt.h

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -330,16 +330,15 @@ enum wolfCrypt_ErrorCodes {
330330

331331
HWPUF_REGISTER_E = -1019, /* HWPUF registration failed */
332332
HWPUF_INIT_E = -1020, /* HWPUF initialization failed */
333-
HWPUF_DEINIT_E = -1021, /* HWPUF deinitialization failed */
334-
HWPUF_ENROLL_E = -1022, /* HWPUF enrollment failed */
335-
HWPUF_START_E = -1023, /* HWPUF start failed */
336-
HWPUF_GENERATE_KEY_E= -1024, /* HWPUF generate key failed */
337-
HWPUF_SET_KEY_E = -1025, /* HWPUF set key failed */
338-
HWPUF_GET_KEY_E = -1026, /* HWPUF get key failed */
339-
HWPUF_ZEROIZE_E = -1027, /* HWPUF zeroize failed */
340-
341-
WC_SPAN2_LAST_E = -1027, /* Update to indicate last used error code */
342-
WC_LAST_E = -1027, /* the last code used either here or in
333+
HWPUF_ENROLL_E = -1021, /* HWPUF enrollment failed */
334+
HWPUF_START_E = -1022, /* HWPUF start failed */
335+
HWPUF_GENERATE_KEY_E= -1023, /* HWPUF generate key failed */
336+
HWPUF_SET_KEY_E = -1024, /* HWPUF set key failed */
337+
HWPUF_GET_KEY_E = -1025, /* HWPUF get key failed */
338+
HWPUF_ZEROIZE_E = -1026, /* HWPUF zeroize failed */
339+
340+
WC_SPAN2_LAST_E = -1026, /* Update to indicate last used error code */
341+
WC_LAST_E = -1026, /* the last code used either here or in
343342
* error-ssl.h */
344343

345344
WC_SPAN2_MIN_CODE_E = -1999, /* Last usable code in span 2 */

wolfssl/wolfcrypt/hwpuf.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ enum wc_HwpufType {
6565
};
6666

6767
typedef struct wc_HWPUF {
68-
int registered;
6968
word32 flags;
7069
int devId;
7170
void* heap;

wolfssl/wolfcrypt/settings.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2204,9 +2204,12 @@
22042204
#define WOLFSSL_NXP_CASPER_RSA_PUB_EXPTMOD
22052205
#define NO_WOLFSSL_SHA256_INTERLEAVE
22062206
#endif
2207-
#if defined(WOLFSSL_NXP_HWPUF) && !defined(WOLF_CRYPTO_CB)
2207+
2208+
#if defined(WOLFSSL_HWPUF) && defined(WOLFSSL_NXP_HWPUF)
2209+
#ifndef WOLF_CRYPTO_CB
22082210
#define WOLF_CRYPTO_CB
22092211
#endif
2212+
#endif
22102213

22112214
#ifdef FREESCALE_LTC_TFM_RSA_4096_ENABLE
22122215
#undef USE_CERT_BUFFERS_4096

0 commit comments

Comments
 (0)