Skip to content

Commit dbb5ee3

Browse files
authored
Merge pull request #6389 from JacobBarthelmeh/devid
always call crypto cb when compiled in
2 parents 6a48539 + 07c41c5 commit dbb5ee3

11 files changed

Lines changed: 175 additions & 78 deletions

File tree

wolfcrypt/src/aes.c

Lines changed: 36 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4219,7 +4219,10 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
42194219
#endif
42204220

42214221
#ifdef WOLF_CRYPTO_CB
4222-
if (aes->devId != INVALID_DEVID) {
4222+
#ifndef WOLF_CRYPTO_CB_FIND
4223+
if (aes->devId != INVALID_DEVID)
4224+
#endif
4225+
{
42234226
int crypto_cb_ret = wc_CryptoCb_AesCbcEncrypt(aes, out, in, sz);
42244227
if (crypto_cb_ret != CRYPTOCB_UNAVAILABLE)
42254228
return crypto_cb_ret;
@@ -4352,7 +4355,10 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
43524355
#endif
43534356

43544357
#ifdef WOLF_CRYPTO_CB
4355-
if (aes->devId != INVALID_DEVID) {
4358+
#ifndef WOLF_CRYPTO_CB_FIND
4359+
if (aes->devId != INVALID_DEVID)
4360+
#endif
4361+
{
43564362
int crypto_cb_ret = wc_CryptoCb_AesCbcDecrypt(aes, out, in, sz);
43574363
if (crypto_cb_ret != CRYPTOCB_UNAVAILABLE)
43584364
return crypto_cb_ret;
@@ -4670,7 +4676,10 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
46704676
}
46714677

46724678
#ifdef WOLF_CRYPTO_CB
4673-
if (aes->devId != INVALID_DEVID) {
4679+
#ifndef WOLF_CRYPTO_CB_FIND
4680+
if (aes->devId != INVALID_DEVID)
4681+
#endif
4682+
{
46744683
int crypto_cb_ret = wc_CryptoCb_AesCtrEncrypt(aes, out, in, sz);
46754684
if (crypto_cb_ret != CRYPTOCB_UNAVAILABLE)
46764685
return crypto_cb_ret;
@@ -6863,7 +6872,10 @@ int wc_AesGcmEncrypt(Aes* aes, byte* out, const byte* in, word32 sz,
68636872
}
68646873

68656874
#ifdef WOLF_CRYPTO_CB
6866-
if (aes->devId != INVALID_DEVID) {
6875+
#ifndef WOLF_CRYPTO_CB_FIND
6876+
if (aes->devId != INVALID_DEVID)
6877+
#endif
6878+
{
68676879
int crypto_cb_ret =
68686880
wc_CryptoCb_AesGcmEncrypt(aes, out, in, sz, iv, ivSz, authTag,
68696881
authTagSz, authIn, authInSz);
@@ -7419,7 +7431,10 @@ int wc_AesGcmDecrypt(Aes* aes, byte* out, const byte* in, word32 sz,
74197431
}
74207432

74217433
#ifdef WOLF_CRYPTO_CB
7422-
if (aes->devId != INVALID_DEVID) {
7434+
#ifndef WOLF_CRYPTO_CB_FIND
7435+
if (aes->devId != INVALID_DEVID)
7436+
#endif
7437+
{
74237438
int crypto_cb_ret =
74247439
wc_CryptoCb_AesGcmDecrypt(aes, out, in, sz, iv, ivSz,
74257440
authTag, authTagSz, authIn, authInSz);
@@ -9311,7 +9326,10 @@ int wc_AesCcmEncrypt(Aes* aes, byte* out, const byte* in, word32 inSz,
93119326
}
93129327

93139328
#ifdef WOLF_CRYPTO_CB
9314-
if (aes->devId != INVALID_DEVID) {
9329+
#ifndef WOLF_CRYPTO_CB_FIND
9330+
if (aes->devId != INVALID_DEVID)
9331+
#endif
9332+
{
93159333
int crypto_cb_ret =
93169334
wc_CryptoCb_AesCcmEncrypt(aes, out, in, inSz, nonce, nonceSz,
93179335
authTag, authTagSz, authIn, authInSz);
@@ -9490,7 +9508,10 @@ int wc_AesCcmDecrypt(Aes* aes, byte* out, const byte* in, word32 inSz,
94909508
}
94919509

94929510
#ifdef WOLF_CRYPTO_CB
9493-
if (aes->devId != INVALID_DEVID) {
9511+
#ifndef WOLF_CRYPTO_CB_FIND
9512+
if (aes->devId != INVALID_DEVID)
9513+
#endif
9514+
{
94949515
int crypto_cb_ret =
94959516
wc_CryptoCb_AesCcmDecrypt(aes, out, in, inSz, nonce, nonceSz,
94969517
authTag, authTagSz, authIn, authInSz);
@@ -10009,7 +10030,10 @@ static WARN_UNUSED_RESULT int _AesEcbEncrypt(
1000910030
word32 blocks = sz / AES_BLOCK_SIZE;
1001010031

1001110032
#ifdef WOLF_CRYPTO_CB
10012-
if (aes->devId != INVALID_DEVID) {
10033+
#ifndef WOLF_CRYPTO_CB_FIND
10034+
if (aes->devId != INVALID_DEVID)
10035+
#endif
10036+
{
1001310037
int ret = wc_CryptoCb_AesEcbEncrypt(aes, out, in, sz);
1001410038
if (ret != CRYPTOCB_UNAVAILABLE)
1001510039
return ret;
@@ -10045,7 +10069,10 @@ static WARN_UNUSED_RESULT int _AesEcbDecrypt(
1004510069
word32 blocks = sz / AES_BLOCK_SIZE;
1004610070

1004710071
#ifdef WOLF_CRYPTO_CB
10048-
if (aes->devId != INVALID_DEVID) {
10072+
#ifndef WOLF_CRYPTO_CB_FIND
10073+
if (aes->devId != INVALID_DEVID)
10074+
#endif
10075+
{
1004910076
int ret = wc_CryptoCb_AesEcbDecrypt(aes, out, in, sz);
1005010077
if (ret != CRYPTOCB_UNAVAILABLE)
1005110078
return ret;

wolfcrypt/src/cmac.c

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

117117
#ifdef WOLF_CRYPTO_CB
118-
if (devId != INVALID_DEVID) {
118+
#ifndef WOLF_CRYPTO_CB_FIND
119+
if (devId != INVALID_DEVID)
120+
#endif
121+
{
119122
cmac->devId = devId;
120123
cmac->devCtx = NULL;
121124

@@ -178,7 +181,10 @@ int wc_CmacUpdate(Cmac* cmac, const byte* in, word32 inSz)
178181
}
179182

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

228234
#ifdef WOLF_CRYPTO_CB
229-
if (cmac->devId != INVALID_DEVID) {
235+
#ifndef WOLF_CRYPTO_CB_FIND
236+
if (cmac->devId != INVALID_DEVID)
237+
#endif
238+
{
230239
ret = wc_CryptoCb_Cmac(cmac, NULL, 0, NULL, 0, out, outSz, 0, NULL);
231240
if (ret != CRYPTOCB_UNAVAILABLE)
232241
return ret;

wolfcrypt/src/cryptocb.c

Lines changed: 8 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,12 @@ 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 */
198+
(void)algoType;
194199
return wc_CryptoCb_GetDevice(localDevId);
195200
}
196201

@@ -233,6 +238,7 @@ int wc_CryptoCb_GetDevIdAtIndex(int startIdx)
233238
}
234239

235240

241+
#ifdef WOLF_CRYPTO_CB_FIND
236242
/* Used to register a find device function. Useful for cases where the
237243
* device ID in the struct may not have been set but still wanting to use
238244
* a specific crypto callback device ID. The find callback is global and
@@ -241,6 +247,7 @@ void wc_CryptoCb_SetDeviceFindCb(CryptoDevCallbackFind cb)
241247
{
242248
CryptoCb_FindCb = cb;
243249
}
250+
#endif
244251

245252
int wc_CryptoCb_RegisterDevice(int devId, CryptoDevCallbackFunc cb, void* ctx)
246253
{

wolfcrypt/src/ecc.c

Lines changed: 44 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4432,19 +4432,22 @@ int wc_ecc_shared_secret(ecc_key* private_key, ecc_key* public_key, byte* out,
44324432
}
44334433

44344434
#ifdef WOLF_CRYPTO_CB
4435-
if (private_key->devId != INVALID_DEVID) {
4435+
#ifndef WOLF_CRYPTO_CB_FIND
4436+
if (private_key->devId != INVALID_DEVID)
4437+
#endif
4438+
{
44364439
err = wc_CryptoCb_Ecdh(private_key, public_key, out, outlen);
4437-
#ifndef WOLF_CRYPTO_CB_ONLY_ECC
4440+
#ifndef WOLF_CRYPTO_CB_ONLY_ECC
44384441
if (err != CRYPTOCB_UNAVAILABLE)
44394442
return err;
44404443
/* fall-through when unavailable */
4441-
#endif
4442-
}
4443-
#ifdef WOLF_CRYPTO_CB_ONLY_ECC
4444-
else {
4445-
err = NO_VALID_DEVID;
4444+
#endif
4445+
#ifdef WOLF_CRYPTO_CB_ONLY_ECC
4446+
if (err == CRYPTOCB_UNAVAILABLE) {
4447+
err = NO_VALID_DEVID;
4448+
}
4449+
#endif
44464450
}
4447-
#endif
44484451
#endif
44494452

44504453
#ifndef WOLF_CRYPTO_CB_ONLY_ECC
@@ -5330,21 +5333,23 @@ static int _ecc_make_key_ex(WC_RNG* rng, int keysize, ecc_key* key,
53305333
key->flags = (byte)flags;
53315334

53325335
#ifdef WOLF_CRYPTO_CB
5333-
if (key->devId != INVALID_DEVID) {
5336+
#ifndef WOLF_CRYPTO_CB_FIND
5337+
if (key->devId != INVALID_DEVID)
5338+
#endif
5339+
{
53345340
err = wc_CryptoCb_MakeEccKey(rng, keysize, key, curve_id);
5335-
#ifndef WOLF_CRYPTO_CB_ONLY_ECC
5341+
#ifndef WOLF_CRYPTO_CB_ONLY_ECC
53365342
if (err != CRYPTOCB_UNAVAILABLE)
53375343
return err;
53385344
/* fall-through when unavailable */
5339-
#else
5345+
#endif
5346+
#ifdef WOLF_CRYPTO_CB_ONLY_ECC
5347+
if (err == CRYPTOCB_UNAVAILABLE) {
5348+
return NO_VALID_DEVID;
5349+
}
53405350
return err;
5341-
#endif
5342-
}
5343-
#ifdef WOLF_CRYPTO_CB_ONLY_ECC
5344-
else {
5345-
return NO_VALID_DEVID;
5351+
#endif
53465352
}
5347-
#endif
53485353
#endif
53495354

53505355
#ifndef WOLF_CRYPTO_CB_ONLY_ECC
@@ -6320,19 +6325,22 @@ int wc_ecc_sign_hash(const byte* in, word32 inlen, byte* out, word32 *outlen,
63206325
}
63216326

63226327
#ifdef WOLF_CRYPTO_CB
6323-
if (key->devId != INVALID_DEVID) {
6328+
#ifndef WOLF_CRYPTO_CB_FIND
6329+
if (key->devId != INVALID_DEVID)
6330+
#endif
6331+
{
63246332
err = wc_CryptoCb_EccSign(in, inlen, out, outlen, rng, key);
6325-
#ifndef WOLF_CRYPTO_CB_ONLY_ECC
6333+
#ifndef WOLF_CRYPTO_CB_ONLY_ECC
63266334
if (err != CRYPTOCB_UNAVAILABLE)
63276335
return err;
63286336
/* fall-through when unavailable */
6329-
#endif
6330-
}
6331-
#ifdef WOLF_CRYPTO_CB_ONLY_ECC
6332-
else {
6333-
err = NO_VALID_DEVID;
6337+
#endif
6338+
#ifdef WOLF_CRYPTO_CB_ONLY_ECC
6339+
if (err == CRYPTOCB_UNAVAILABLE) {
6340+
err = NO_VALID_DEVID;
6341+
}
6342+
#endif
63346343
}
6335-
#endif
63366344
#endif
63376345

63386346
#ifndef WOLF_CRYPTO_CB_ONLY_ECC
@@ -8020,19 +8028,22 @@ int wc_ecc_verify_hash(const byte* sig, word32 siglen, const byte* hash,
80208028
}
80218029

80228030
#ifdef WOLF_CRYPTO_CB
8023-
if (key->devId != INVALID_DEVID) {
8031+
#ifndef WOLF_CRYPTO_CB_FIND
8032+
if (key->devId != INVALID_DEVID)
8033+
#endif
8034+
{
80248035
err = wc_CryptoCb_EccVerify(sig, siglen, hash, hashlen, res, key);
8025-
#ifndef WOLF_CRYPTO_CB_ONLY_ECC
8036+
#ifndef WOLF_CRYPTO_CB_ONLY_ECC
80268037
if (err != CRYPTOCB_UNAVAILABLE)
80278038
return err;
80288039
/* fall-through when unavailable */
8029-
#endif
8030-
}
8031-
#ifdef WOLF_CRYPTO_CB_ONLY_ECC
8032-
else {
8033-
err = NO_VALID_DEVID;
8040+
#endif
8041+
#ifdef WOLF_CRYPTO_CB_ONLY_ECC
8042+
if (err == CRYPTOCB_UNAVAILABLE) {
8043+
err = NO_VALID_DEVID;
8044+
}
8045+
#endif
80348046
}
8035-
#endif
80368047
#endif
80378048

80388049
#ifndef WOLF_CRYPTO_CB_ONLY_ECC

wolfcrypt/src/random.c

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

18311831
#ifdef WOLF_CRYPTO_CB
1832-
if (rng->devId != INVALID_DEVID) {
1832+
#ifndef WOLF_CRYPTO_CB_FIND
1833+
if (rng->devId != INVALID_DEVID)
1834+
#endif
1835+
{
18331836
ret = wc_CryptoCb_RandomBlock(rng, output, sz);
18341837
if (ret != CRYPTOCB_UNAVAILABLE)
18351838
return ret;
@@ -2583,7 +2586,11 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
25832586
#ifdef WOLF_CRYPTO_CB
25842587
int ret;
25852588

2586-
if (os != NULL && os->devId != INVALID_DEVID) {
2589+
if (os != NULL
2590+
#ifndef WOLF_CRYPTO_CB_FIND
2591+
&& os->devId != INVALID_DEVID)
2592+
#endif
2593+
{
25872594
ret = wc_CryptoCb_RandomSeed(os, output, sz);
25882595
if (ret != CRYPTOCB_UNAVAILABLE)
25892596
return ret;
@@ -3702,7 +3709,10 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
37023709
}
37033710

37043711
#ifdef WOLF_CRYPTO_CB
3705-
if (os->devId != INVALID_DEVID) {
3712+
#ifndef WOLF_CRYPTO_CB_FIND
3713+
if (os->devId != INVALID_DEVID)
3714+
#endif
3715+
{
37063716
ret = wc_CryptoCb_RandomSeed(os, output, sz);
37073717
if (ret != CRYPTOCB_UNAVAILABLE)
37083718
return ret;

0 commit comments

Comments
 (0)