Skip to content

Commit 8b49e0a

Browse files
committed
Fix -Wcast-qual errors by replacing void* with typed id/label params in _common helpers and add input validation.
1 parent 88396d7 commit 8b49e0a

3 files changed

Lines changed: 86 additions & 44 deletions

File tree

wolfcrypt/src/aes.c

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13567,8 +13567,8 @@ int wc_AesCcmEncrypt_ex(Aes* aes, byte* out, const byte* in, word32 sz,
1356713567
#endif
1356813568

1356913569
static Aes* _AesNew_common(void* heap, int devId, int *result_code,
13570-
int aesInitType, const void* aesInitData,
13571-
int aesInitDataLen)
13570+
int aesInitType, unsigned char* id,
13571+
int idLen, const char* label)
1357213572
{
1357313573
int ret;
1357413574
Aes* aes = (Aes*)XMALLOC(sizeof(Aes), heap, DYNAMIC_TYPE_AES);
@@ -13579,16 +13579,29 @@ static Aes* _AesNew_common(void* heap, int devId, int *result_code,
1357913579
switch (aesInitType) {
1358013580
#ifdef WOLF_PRIVATE_KEY_ID
1358113581
case AES_NEW_INIT_ID:
13582-
ret = wc_AesInit_Id(aes, (unsigned char*)(uintptr_t)aesInitData,
13583-
aesInitDataLen, heap, devId);
13582+
if (id == NULL || idLen == 0 || label != NULL) {
13583+
ret = BAD_FUNC_ARG;
13584+
}
13585+
else {
13586+
ret = wc_AesInit_Id(aes, id, idLen, heap, devId);
13587+
}
1358413588
break;
1358513589
case AES_NEW_INIT_LABEL:
13586-
ret = wc_AesInit_Label(aes, (const char*)aesInitData,
13587-
heap, devId);
13590+
if (label == NULL || id != NULL || idLen != 0) {
13591+
ret = BAD_FUNC_ARG;
13592+
}
13593+
else {
13594+
ret = wc_AesInit_Label(aes, label, heap, devId);
13595+
}
1358813596
break;
1358913597
#endif
1359013598
default:
13591-
ret = wc_AesInit(aes, heap, devId);
13599+
if (id != NULL || idLen != 0 || label != NULL) {
13600+
ret = BAD_FUNC_ARG;
13601+
}
13602+
else {
13603+
ret = wc_AesInit(aes, heap, devId);
13604+
}
1359213605
break;
1359313606
}
1359413607
if (ret != 0) {
@@ -13597,8 +13610,9 @@ static Aes* _AesNew_common(void* heap, int devId, int *result_code,
1359713610
}
1359813611
}
1359913612
(void)aesInitType;
13600-
(void)aesInitData;
13601-
(void)aesInitDataLen;
13613+
(void)id;
13614+
(void)idLen;
13615+
(void)label;
1360213616

1360313617
if (result_code != NULL) {
1360413618
*result_code = ret;
@@ -13610,22 +13624,22 @@ static Aes* _AesNew_common(void* heap, int devId, int *result_code,
1361013624
Aes* wc_AesNew(void* heap, int devId, int *result_code)
1361113625
{
1361213626
return _AesNew_common(heap, devId, result_code,
13613-
AES_NEW_INIT_PLAIN, NULL, 0);
13627+
AES_NEW_INIT_PLAIN, NULL, 0, NULL);
1361413628
}
1361513629

1361613630
#ifdef WOLF_PRIVATE_KEY_ID
1361713631
Aes* wc_AesNew_Id(unsigned char* id, int len, void* heap, int devId,
1361813632
int *result_code)
1361913633
{
1362013634
return _AesNew_common(heap, devId, result_code,
13621-
AES_NEW_INIT_ID, id, len);
13635+
AES_NEW_INIT_ID, id, len, NULL);
1362213636
}
1362313637

1362413638
Aes* wc_AesNew_Label(const char* label, void* heap, int devId,
1362513639
int *result_code)
1362613640
{
1362713641
return _AesNew_common(heap, devId, result_code,
13628-
AES_NEW_INIT_LABEL, label, 0);
13642+
AES_NEW_INIT_LABEL, NULL, 0, label);
1362913643
}
1363013644
#endif /* WOLF_PRIVATE_KEY_ID */
1363113645

wolfcrypt/src/cmac.c

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,8 @@ void ShiftAndXorRb(byte* out, byte* in)
106106

107107
static int _InitCmac_common(Cmac* cmac, const byte* key, word32 keySz,
108108
int type, void* unused, void* heap, int devId,
109-
int aesInitType, const void* aesInitData,
110-
int aesInitDataLen)
109+
int aesInitType, unsigned char* id, int idLen,
110+
const char* label)
111111
{
112112
int ret = 0;
113113
#if defined(WOLFSSL_SE050) && defined(WOLFSSL_SE050_CRYPT)
@@ -128,23 +128,24 @@ static int _InitCmac_common(Cmac* cmac, const byte* key, word32 keySz,
128128
* inspect them to determine the hardware key slot. */
129129
#ifdef WOLF_PRIVATE_KEY_ID
130130
cmac->aesInitType = aesInitType;
131-
if (aesInitType == CMAC_AES_INIT_ID && aesInitData != NULL &&
132-
aesInitDataLen > 0 &&
133-
aesInitDataLen <= (int)sizeof(cmac->id)) {
134-
XMEMCPY(cmac->id, aesInitData, (word32)aesInitDataLen);
135-
cmac->idLen = aesInitDataLen;
131+
if (aesInitType == CMAC_AES_INIT_ID && id != NULL &&
132+
idLen > 0 &&
133+
idLen <= (int)sizeof(cmac->id)) {
134+
XMEMCPY(cmac->id, id, (word32)idLen);
135+
cmac->idLen = idLen;
136136
}
137-
else if (aesInitType == CMAC_AES_INIT_LABEL && aesInitData != NULL) {
138-
int labelLen = (int)XSTRLEN((const char*)aesInitData);
137+
else if (aesInitType == CMAC_AES_INIT_LABEL && label != NULL) {
138+
int labelLen = (int)XSTRLEN(label);
139139
if (labelLen > 0 && labelLen < (int)sizeof(cmac->label)) {
140-
XMEMCPY(cmac->label, aesInitData, (word32)labelLen);
140+
XMEMCPY(cmac->label, label, (word32)labelLen);
141141
cmac->labelLen = labelLen;
142142
}
143143
}
144144
#endif
145145
(void)aesInitType;
146-
(void)aesInitData;
147-
(void)aesInitDataLen;
146+
(void)id;
147+
(void)idLen;
148+
(void)label;
148149

149150
#ifdef WOLF_CRYPTO_CB
150151
/* Set devId regardless of value (invalid or not) */
@@ -178,16 +179,29 @@ static int _InitCmac_common(Cmac* cmac, const byte* key, word32 keySz,
178179
switch (aesInitType) {
179180
#ifdef WOLF_PRIVATE_KEY_ID
180181
case CMAC_AES_INIT_ID:
181-
ret = wc_AesInit_Id(&cmac->aes, (unsigned char*)(uintptr_t)aesInitData,
182-
aesInitDataLen, heap, devId);
182+
if (id == NULL || idLen == 0 || label != NULL) {
183+
ret = BAD_FUNC_ARG;
184+
}
185+
else {
186+
ret = wc_AesInit_Id(&cmac->aes, id, idLen, heap, devId);
187+
}
183188
break;
184189
case CMAC_AES_INIT_LABEL:
185-
ret = wc_AesInit_Label(&cmac->aes, (const char*)aesInitData,
186-
heap, devId);
190+
if (label == NULL || id != NULL || idLen != 0) {
191+
ret = BAD_FUNC_ARG;
192+
}
193+
else {
194+
ret = wc_AesInit_Label(&cmac->aes, label, heap, devId);
195+
}
187196
break;
188197
#endif
189198
default:
190-
ret = wc_AesInit(&cmac->aes, heap, devId);
199+
if (id != NULL || idLen != 0 || label != NULL) {
200+
ret = BAD_FUNC_ARG;
201+
}
202+
else {
203+
ret = wc_AesInit(&cmac->aes, heap, devId);
204+
}
191205
break;
192206
}
193207
if (ret != 0) {
@@ -238,7 +252,7 @@ int wc_InitCmac_ex(Cmac* cmac, const byte* key, word32 keySz,
238252
int type, void* unused, void* heap, int devId)
239253
{
240254
return _InitCmac_common(cmac, key, keySz, type, unused, heap, devId,
241-
CMAC_AES_INIT_PLAIN, NULL, 0);
255+
CMAC_AES_INIT_PLAIN, NULL, 0, NULL);
242256
}
243257

244258

@@ -261,7 +275,7 @@ int wc_InitCmac_Id(Cmac* cmac, const byte* key, word32 keySz,
261275
void* heap, int devId)
262276
{
263277
return _InitCmac_common(cmac, key, keySz, type, unused, heap, devId,
264-
CMAC_AES_INIT_ID, id, len);
278+
CMAC_AES_INIT_ID, id, len, NULL);
265279
}
266280

267281

@@ -271,7 +285,7 @@ int wc_InitCmac_Label(Cmac* cmac, const byte* key, word32 keySz,
271285
void* heap, int devId)
272286
{
273287
return _InitCmac_common(cmac, key, keySz, type, unused, heap, devId,
274-
CMAC_AES_INIT_LABEL, label, 0);
288+
CMAC_AES_INIT_LABEL, NULL, 0, label);
275289
}
276290
#endif /* WOLF_PRIVATE_KEY_ID */
277291

wolfcrypt/src/rsa.c

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -192,8 +192,8 @@ static void wc_RsaCleanup(RsaKey* key)
192192
#endif
193193

194194
static RsaKey* _NewRsaKey_common(void* heap, int devId, int *result_code,
195-
int rsaInitType, const void* rsaInitData,
196-
int rsaInitDataLen)
195+
int rsaInitType, unsigned char* id,
196+
int idLen, const char* label)
197197
{
198198
int ret;
199199
RsaKey* key = (RsaKey*)XMALLOC(sizeof(RsaKey), heap, DYNAMIC_TYPE_RSA);
@@ -204,16 +204,29 @@ static RsaKey* _NewRsaKey_common(void* heap, int devId, int *result_code,
204204
switch (rsaInitType) {
205205
#ifdef WOLF_PRIVATE_KEY_ID
206206
case RSA_NEW_INIT_ID:
207-
ret = wc_InitRsaKey_Id(key, (unsigned char*)(uintptr_t)rsaInitData,
208-
rsaInitDataLen, heap, devId);
207+
if (id == NULL || idLen == 0 || label != NULL) {
208+
ret = BAD_FUNC_ARG;
209+
}
210+
else {
211+
ret = wc_InitRsaKey_Id(key, id, idLen, heap, devId);
212+
}
209213
break;
210214
case RSA_NEW_INIT_LABEL:
211-
ret = wc_InitRsaKey_Label(key, (const char*)rsaInitData,
212-
heap, devId);
215+
if (label == NULL || id != NULL || idLen != 0) {
216+
ret = BAD_FUNC_ARG;
217+
}
218+
else {
219+
ret = wc_InitRsaKey_Label(key, label, heap, devId);
220+
}
213221
break;
214222
#endif
215223
default:
216-
ret = wc_InitRsaKey_ex(key, heap, devId);
224+
if (id != NULL || idLen != 0 || label != NULL) {
225+
ret = BAD_FUNC_ARG;
226+
}
227+
else {
228+
ret = wc_InitRsaKey_ex(key, heap, devId);
229+
}
217230
break;
218231
}
219232
if (ret != 0) {
@@ -222,8 +235,9 @@ static RsaKey* _NewRsaKey_common(void* heap, int devId, int *result_code,
222235
}
223236
}
224237
(void)rsaInitType;
225-
(void)rsaInitData;
226-
(void)rsaInitDataLen;
238+
(void)id;
239+
(void)idLen;
240+
(void)label;
227241

228242
if (result_code != NULL) {
229243
*result_code = ret;
@@ -235,22 +249,22 @@ static RsaKey* _NewRsaKey_common(void* heap, int devId, int *result_code,
235249
RsaKey* wc_NewRsaKey(void* heap, int devId, int *result_code)
236250
{
237251
return _NewRsaKey_common(heap, devId, result_code,
238-
RSA_NEW_INIT_PLAIN, NULL, 0);
252+
RSA_NEW_INIT_PLAIN, NULL, 0, NULL);
239253
}
240254

241255
#ifdef WOLF_PRIVATE_KEY_ID
242256
RsaKey* wc_NewRsaKey_Id(unsigned char* id, int len, void* heap, int devId,
243257
int *result_code)
244258
{
245259
return _NewRsaKey_common(heap, devId, result_code,
246-
RSA_NEW_INIT_ID, id, len);
260+
RSA_NEW_INIT_ID, id, len, NULL);
247261
}
248262

249263
RsaKey* wc_NewRsaKey_Label(const char* label, void* heap, int devId,
250264
int *result_code)
251265
{
252266
return _NewRsaKey_common(heap, devId, result_code,
253-
RSA_NEW_INIT_LABEL, label, 0);
267+
RSA_NEW_INIT_LABEL, NULL, 0, label);
254268
}
255269
#endif /* WOLF_PRIVATE_KEY_ID */
256270

0 commit comments

Comments
 (0)