Skip to content

Commit bab35c4

Browse files
add WOLF_CRYPTO_CB_FIND macro to guard find device ID callback
1 parent 71ca447 commit bab35c4

10 files changed

Lines changed: 185 additions & 77 deletions

File tree

wolfcrypt/src/aes.c

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4011,6 +4011,9 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
40114011
#endif
40124012

40134013
#ifdef WOLF_CRYPTO_CB
4014+
#ifndef WOLF_CRYPTO_CB_FIND
4015+
if (aes->devId != INVALID_DEVID)
4016+
#endif
40144017
{
40154018
int crypto_cb_ret = wc_CryptoCb_AesCbcEncrypt(aes, out, in, sz);
40164019
if (crypto_cb_ret != CRYPTOCB_UNAVAILABLE)
@@ -4144,6 +4147,9 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
41444147
#endif
41454148

41464149
#ifdef WOLF_CRYPTO_CB
4150+
#ifndef WOLF_CRYPTO_CB_FIND
4151+
if (aes->devId != INVALID_DEVID)
4152+
#endif
41474153
{
41484154
int crypto_cb_ret = wc_CryptoCb_AesCbcDecrypt(aes, out, in, sz);
41494155
if (crypto_cb_ret != CRYPTOCB_UNAVAILABLE)
@@ -4462,6 +4468,9 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
44624468
}
44634469

44644470
#ifdef WOLF_CRYPTO_CB
4471+
#ifndef WOLF_CRYPTO_CB_FIND
4472+
if (aes->devId != INVALID_DEVID)
4473+
#endif
44654474
{
44664475
int crypto_cb_ret = wc_CryptoCb_AesCtrEncrypt(aes, out, in, sz);
44674476
if (crypto_cb_ret != CRYPTOCB_UNAVAILABLE)
@@ -6655,6 +6664,9 @@ int wc_AesGcmEncrypt(Aes* aes, byte* out, const byte* in, word32 sz,
66556664
}
66566665

66576666
#ifdef WOLF_CRYPTO_CB
6667+
#ifndef WOLF_CRYPTO_CB_FIND
6668+
if (aes->devId != INVALID_DEVID)
6669+
#endif
66586670
{
66596671
int crypto_cb_ret =
66606672
wc_CryptoCb_AesGcmEncrypt(aes, out, in, sz, iv, ivSz, authTag,
@@ -7211,6 +7223,9 @@ int wc_AesGcmDecrypt(Aes* aes, byte* out, const byte* in, word32 sz,
72117223
}
72127224

72137225
#ifdef WOLF_CRYPTO_CB
7226+
#ifndef WOLF_CRYPTO_CB_FIND
7227+
if (aes->devId != INVALID_DEVID)
7228+
#endif
72147229
{
72157230
int crypto_cb_ret =
72167231
wc_CryptoCb_AesGcmDecrypt(aes, out, in, sz, iv, ivSz,
@@ -9103,6 +9118,9 @@ int wc_AesCcmEncrypt(Aes* aes, byte* out, const byte* in, word32 inSz,
91039118
}
91049119

91059120
#ifdef WOLF_CRYPTO_CB
9121+
#ifndef WOLF_CRYPTO_CB_FIND
9122+
if (aes->devId != INVALID_DEVID)
9123+
#endif
91069124
{
91079125
int crypto_cb_ret =
91089126
wc_CryptoCb_AesCcmEncrypt(aes, out, in, inSz, nonce, nonceSz,
@@ -9282,6 +9300,9 @@ int wc_AesCcmDecrypt(Aes* aes, byte* out, const byte* in, word32 inSz,
92829300
}
92839301

92849302
#ifdef WOLF_CRYPTO_CB
9303+
#ifndef WOLF_CRYPTO_CB_FIND
9304+
if (aes->devId != INVALID_DEVID)
9305+
#endif
92859306
{
92869307
int crypto_cb_ret =
92879308
wc_CryptoCb_AesCcmDecrypt(aes, out, in, inSz, nonce, nonceSz,
@@ -9801,6 +9822,9 @@ static WARN_UNUSED_RESULT int _AesEcbEncrypt(
98019822
word32 blocks = sz / AES_BLOCK_SIZE;
98029823

98039824
#ifdef WOLF_CRYPTO_CB
9825+
#ifndef WOLF_CRYPTO_CB_FIND
9826+
if (aes->devId != INVALID_DEVID)
9827+
#endif
98049828
{
98059829
int ret = wc_CryptoCb_AesEcbEncrypt(aes, out, in, sz);
98069830
if (ret != CRYPTOCB_UNAVAILABLE)
@@ -9837,6 +9861,9 @@ static WARN_UNUSED_RESULT int _AesEcbDecrypt(
98379861
word32 blocks = sz / AES_BLOCK_SIZE;
98389862

98399863
#ifdef WOLF_CRYPTO_CB
9864+
#ifndef WOLF_CRYPTO_CB_FIND
9865+
if (aes->devId != INVALID_DEVID)
9866+
#endif
98409867
{
98419868
int ret = wc_CryptoCb_AesEcbDecrypt(aes, out, in, sz);
98429869
if (ret != CRYPTOCB_UNAVAILABLE)

wolfcrypt/src/cmac.c

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,9 @@ int wc_InitCmac_ex(Cmac* cmac, const byte* key, word32 keySz,
115115
XMEMSET(cmac, 0, sizeof(Cmac));
116116

117117
#ifdef WOLF_CRYPTO_CB
118+
#ifndef WOLF_CRYPTO_CB_FIND
119+
if (devId != INVALID_DEVID)
120+
#endif
118121
{
119122
cmac->devId = devId;
120123
cmac->devCtx = NULL;
@@ -178,6 +181,9 @@ int wc_CmacUpdate(Cmac* cmac, const byte* in, word32 inSz)
178181
}
179182

180183
#ifdef WOLF_CRYPTO_CB
184+
#ifndef WOLF_CRYPTO_CB_FIND
185+
if (cmac->devId != INVALID_DEVID)
186+
#endif
181187
{
182188
ret = wc_CryptoCb_Cmac(cmac, NULL, 0, in, inSz,
183189
NULL, NULL, 0, NULL);
@@ -226,10 +232,15 @@ int wc_CmacFinal(Cmac* cmac, byte* out, word32* outSz)
226232
}
227233

228234
#ifdef WOLF_CRYPTO_CB
229-
ret = wc_CryptoCb_Cmac(cmac, NULL, 0, NULL, 0, out, outSz, 0, NULL);
230-
if (ret != CRYPTOCB_UNAVAILABLE)
231-
return ret;
232-
/* fall-through when unavailable */
235+
#ifndef WOLF_CRYPTO_CB_FIND
236+
if (cmac->devId != INVALID_DEVID)
237+
#endif
238+
{
239+
ret = wc_CryptoCb_Cmac(cmac, NULL, 0, NULL, 0, out, outSz, 0, NULL);
240+
if (ret != CRYPTOCB_UNAVAILABLE)
241+
return ret;
242+
/* fall-through when unavailable */
243+
}
233244
#endif
234245

235246
if (cmac->bufferSz == AES_BLOCK_SIZE) {

wolfcrypt/src/cryptocb.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,10 @@ typedef struct CryptoCb {
4949
void* ctx;
5050
} CryptoCb;
5151
static WOLFSSL_GLOBAL CryptoCb gCryptoDev[MAX_CRYPTO_DEVID_CALLBACKS];
52-
static CryptoDevCallbackFind CryptoCb_FindCb = NULL;
5352

53+
#ifdef WOLF_CRYPTO_CB_FIND
54+
static CryptoDevCallbackFind CryptoCb_FindCb = NULL;
55+
#endif
5456

5557
#ifdef DEBUG_CRYPTOCB
5658
static const char* GetAlgoTypeStr(int algo)
@@ -188,9 +190,11 @@ static CryptoCb* wc_CryptoCb_FindDevice(int devId, int algoType)
188190
{
189191
int localDevId = devId;
190192

193+
#ifdef WOLF_CRYPTO_CB_FIND
191194
if (CryptoCb_FindCb != NULL) {
192195
localDevId = CryptoCb_FindCb(devId, algoType);
193196
}
197+
#endif /* WOLF_CRYPTO_CB_FIND */
194198
return wc_CryptoCb_GetDevice(localDevId);
195199
}
196200

@@ -233,6 +237,7 @@ int wc_CryptoCb_GetDevIdAtIndex(int startIdx)
233237
}
234238

235239

240+
#ifdef WOLF_CRYPTO_CB_FIND
236241
/* Used to register a find device function. Useful for cases where the
237242
* device ID in the struct may not have been set but still wanting to use
238243
* a specific crypto callback device ID. The find callback is global and
@@ -241,6 +246,7 @@ void wc_CryptoCb_SetDeviceFindCb(CryptoDevCallbackFind cb)
241246
{
242247
CryptoCb_FindCb = cb;
243248
}
249+
#endif
244250

245251
int wc_CryptoCb_RegisterDevice(int devId, CryptoDevCallbackFunc cb, void* ctx)
246252
{

wolfcrypt/src/ecc.c

Lines changed: 57 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4428,17 +4428,22 @@ int wc_ecc_shared_secret(ecc_key* private_key, ecc_key* public_key, byte* out,
44284428
}
44294429

44304430
#ifdef WOLF_CRYPTO_CB
4431-
err = wc_CryptoCb_Ecdh(private_key, public_key, out, outlen);
4432-
#ifndef WOLF_CRYPTO_CB_ONLY_ECC
4433-
if (err != CRYPTOCB_UNAVAILABLE)
4434-
return err;
4435-
/* fall-through when unavailable */
4431+
#ifndef WOLF_CRYPTO_CB_FIND
4432+
if (private_key->devId != INVALID_DEVID)
44364433
#endif
4437-
#ifdef WOLF_CRYPTO_CB_ONLY_ECC
4438-
if (err == CRYPTOCB_UNAVAILABLE) {
4439-
err = NO_VALID_DEVID;
4434+
{
4435+
err = wc_CryptoCb_Ecdh(private_key, public_key, out, outlen);
4436+
#ifndef WOLF_CRYPTO_CB_ONLY_ECC
4437+
if (err != CRYPTOCB_UNAVAILABLE)
4438+
return err;
4439+
/* fall-through when unavailable */
4440+
#endif
4441+
#ifdef WOLF_CRYPTO_CB_ONLY_ECC
4442+
if (err == CRYPTOCB_UNAVAILABLE) {
4443+
err = NO_VALID_DEVID;
4444+
}
4445+
#endif
44404446
}
4441-
#endif
44424447
#endif
44434448

44444449
#ifndef WOLF_CRYPTO_CB_ONLY_ECC
@@ -5324,18 +5329,23 @@ static int _ecc_make_key_ex(WC_RNG* rng, int keysize, ecc_key* key,
53245329
key->flags = (byte)flags;
53255330

53265331
#ifdef WOLF_CRYPTO_CB
5327-
err = wc_CryptoCb_MakeEccKey(rng, keysize, key, curve_id);
5328-
#ifndef WOLF_CRYPTO_CB_ONLY_ECC
5329-
if (err != CRYPTOCB_UNAVAILABLE)
5330-
return err;
5331-
/* fall-through when unavailable */
5332+
#ifndef WOLF_CRYPTO_CB_FIND
5333+
if (key->devId != INVALID_DEVID)
53325334
#endif
5333-
#ifdef WOLF_CRYPTO_CB_ONLY_ECC
5334-
if (err == CRYPTOCB_UNAVAILABLE) {
5335-
return NO_VALID_DEVID;
5335+
{
5336+
err = wc_CryptoCb_MakeEccKey(rng, keysize, key, curve_id);
5337+
#ifndef WOLF_CRYPTO_CB_ONLY_ECC
5338+
if (err != CRYPTOCB_UNAVAILABLE)
5339+
return err;
5340+
/* fall-through when unavailable */
5341+
#endif
5342+
#ifdef WOLF_CRYPTO_CB_ONLY_ECC
5343+
if (err == CRYPTOCB_UNAVAILABLE) {
5344+
return NO_VALID_DEVID;
5345+
}
5346+
return err;
5347+
#endif
53365348
}
5337-
return err;
5338-
#endif
53395349
#endif
53405350

53415351
#ifndef WOLF_CRYPTO_CB_ONLY_ECC
@@ -6311,17 +6321,22 @@ int wc_ecc_sign_hash(const byte* in, word32 inlen, byte* out, word32 *outlen,
63116321
}
63126322

63136323
#ifdef WOLF_CRYPTO_CB
6314-
err = wc_CryptoCb_EccSign(in, inlen, out, outlen, rng, key);
6315-
#ifndef WOLF_CRYPTO_CB_ONLY_ECC
6316-
if (err != CRYPTOCB_UNAVAILABLE)
6317-
return err;
6318-
/* fall-through when unavailable */
6324+
#ifndef WOLF_CRYPTO_CB_FIND
6325+
if (key->devId != INVALID_DEVID)
63196326
#endif
6320-
#ifdef WOLF_CRYPTO_CB_ONLY_ECC
6321-
if (err == CRYPTOCB_UNAVAILABLE) {
6322-
err = NO_VALID_DEVID;
6327+
{
6328+
err = wc_CryptoCb_EccSign(in, inlen, out, outlen, rng, key);
6329+
#ifndef WOLF_CRYPTO_CB_ONLY_ECC
6330+
if (err != CRYPTOCB_UNAVAILABLE)
6331+
return err;
6332+
/* fall-through when unavailable */
6333+
#endif
6334+
#ifdef WOLF_CRYPTO_CB_ONLY_ECC
6335+
if (err == CRYPTOCB_UNAVAILABLE) {
6336+
err = NO_VALID_DEVID;
6337+
}
6338+
#endif
63236339
}
6324-
#endif
63256340
#endif
63266341

63276342
#ifndef WOLF_CRYPTO_CB_ONLY_ECC
@@ -8009,17 +8024,22 @@ int wc_ecc_verify_hash(const byte* sig, word32 siglen, const byte* hash,
80098024
}
80108025

80118026
#ifdef WOLF_CRYPTO_CB
8012-
err = wc_CryptoCb_EccVerify(sig, siglen, hash, hashlen, res, key);
8013-
#ifndef WOLF_CRYPTO_CB_ONLY_ECC
8014-
if (err != CRYPTOCB_UNAVAILABLE)
8015-
return err;
8016-
/* fall-through when unavailable */
8027+
#ifndef WOLF_CRYPTO_CB_FIND
8028+
if (key->devId != INVALID_DEVID)
80178029
#endif
8018-
#ifdef WOLF_CRYPTO_CB_ONLY_ECC
8019-
if (err == CRYPTOCB_UNAVAILABLE) {
8020-
err = NO_VALID_DEVID;
8030+
{
8031+
err = wc_CryptoCb_EccVerify(sig, siglen, hash, hashlen, res, key);
8032+
#ifndef WOLF_CRYPTO_CB_ONLY_ECC
8033+
if (err != CRYPTOCB_UNAVAILABLE)
8034+
return err;
8035+
/* fall-through when unavailable */
8036+
#endif
8037+
#ifdef WOLF_CRYPTO_CB_ONLY_ECC
8038+
if (err == CRYPTOCB_UNAVAILABLE) {
8039+
err = NO_VALID_DEVID;
8040+
}
8041+
#endif
80218042
}
8022-
#endif
80238043
#endif
80248044

80258045
#ifndef WOLF_CRYPTO_CB_ONLY_ECC

wolfcrypt/src/random.c

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1829,10 +1829,15 @@ int wc_RNG_GenerateBlock(WC_RNG* rng, byte* output, word32 sz)
18291829
return 0;
18301830

18311831
#ifdef WOLF_CRYPTO_CB
1832-
ret = wc_CryptoCb_RandomBlock(rng, output, sz);
1833-
if (ret != CRYPTOCB_UNAVAILABLE)
1834-
return ret;
1835-
/* fall-through when unavailable */
1832+
#ifndef WOLF_CRYPTO_CB_FIND
1833+
if (rng->devId != INVALID_DEVID)
1834+
#endif
1835+
{
1836+
ret = wc_CryptoCb_RandomBlock(rng, output, sz);
1837+
if (ret != CRYPTOCB_UNAVAILABLE)
1838+
return ret;
1839+
/* fall-through when unavailable */
1840+
}
18361841
#endif
18371842

18381843
#ifdef HAVE_INTEL_RDRAND
@@ -2581,7 +2586,11 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
25812586
#ifdef WOLF_CRYPTO_CB
25822587
int ret;
25832588

2584-
if (os != NULL) {
2589+
if (os != NULL
2590+
#ifndef WOLF_CRYPTO_CB_FIND
2591+
&& os->devId != INVALID_DEVID)
2592+
#endif
2593+
{
25852594
ret = wc_CryptoCb_RandomSeed(os, output, sz);
25862595
if (ret != CRYPTOCB_UNAVAILABLE)
25872596
return ret;
@@ -3700,6 +3709,9 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
37003709
}
37013710

37023711
#ifdef WOLF_CRYPTO_CB
3712+
#ifndef WOLF_CRYPTO_CB_FIND
3713+
if (os->devId != INVALID_DEVID)
3714+
#endif
37033715
{
37043716
ret = wc_CryptoCb_RandomSeed(os, output, sz);
37053717
if (ret != CRYPTOCB_UNAVAILABLE)

0 commit comments

Comments
 (0)