Skip to content

Commit e1184f1

Browse files
committed
Fix F-570, F-572, F-573, F-574, F-575, F-645, F-646, F-647, F-648, F-649,
F-657, F-658, F-659, F-660, F-732, F-733, F-734, F-735, F-736, F-740, F-741, F-742, F-1108, F-1109, F-1484, F-1485, F-1486, F-1487, F-1488, F-1489
1 parent 34282bb commit e1184f1

30 files changed

Lines changed: 423 additions & 114 deletions

src/benchmark/clu_bench_setup.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ int wolfCLU_benchSetup(int argc, char** argv)
7474
}
7575

7676
ret = wolfCLU_checkForArg("-time", 5, argc, argv);
77-
if (ret > 0) {
77+
if (ret > 0 && ret + 1 < argc) {
7878
/* time for each test in seconds */
7979
time = XATOI(argv[ret+1]);
8080
if (time < 1 || time > 10) {

src/certgen/clu_certgen_ed25519.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ int make_self_signed_ed25519_certificate(char* keyPath, char* certOut)
6262
}
6363
if (XFSEEK(keyFile, 0, SEEK_SET) != 0 || (int)XFREAD(keyBuf, 1, keyFileSz, keyFile) != keyFileSz) {
6464
XFCLOSE(keyFile);
65+
XFREE(keyBuf, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
6566
return WOLFCLU_FAILURE;
6667
}
6768
XFCLOSE(keyFile);

src/certgen/clu_certgen_rsa.c

Lines changed: 51 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ int make_self_signed_rsa_certificate(char* keyPath, char* certOut, int oid)
3232
{
3333
int ret = 0;
3434
word32 index = 0;
35+
int keyInit = 0, rngInit = 0;
3536

3637
Cert newCert;
3738
RsaKey key;
@@ -42,10 +43,10 @@ int make_self_signed_rsa_certificate(char* keyPath, char* certOut, int oid)
4243
XFILE file;
4344
XFILE pemFile;
4445
byte* keyBuf;
45-
int certBufSz;
46-
byte* certBuf;
46+
int certBufSz = 0;
47+
byte* certBuf = NULL;
4748
int pemBufSz;
48-
byte* pemBuf;
49+
byte* pemBuf = NULL;
4950

5051
keyFile = XFOPEN(keyPath, "rb");
5152
if (keyFile == NULL) {
@@ -62,6 +63,7 @@ int make_self_signed_rsa_certificate(char* keyPath, char* certOut, int oid)
6263
}
6364
if (XFSEEK(keyFile, 0, SEEK_SET) != 0 || (int)XFREAD(keyBuf, 1, keyFileSz, keyFile) != keyFileSz) {
6465
XFCLOSE(keyFile);
66+
XFREE(keyBuf, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
6567
return WOLFCLU_FAILURE;
6668
}
6769
XFCLOSE(keyFile);
@@ -72,19 +74,22 @@ int make_self_signed_rsa_certificate(char* keyPath, char* certOut, int oid)
7274
XFREE(keyBuf, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
7375
return ret;
7476
}
77+
keyInit = 1;
7578

7679
ret = wc_InitRng(&rng);
7780
if (ret != 0) {
7881
wolfCLU_LogError("Failed to initialize rng.\nRET: %d", ret);
7982
XFREE(keyBuf, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
83+
wc_FreeRsaKey(&key);
8084
return ret;
8185
}
86+
rngInit = 1;
8287

8388
ret = wc_RsaPrivateKeyDecode(keyBuf, &index, &key, keyFileSz);
8489
XFREE(keyBuf, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
8590
if (ret != 0 ) {
8691
wolfCLU_LogError("Failed to decode private key.\nRET: %d", ret);
87-
return ret;
92+
goto cleanup;
8893
}
8994

9095
wc_InitCert(&newCert);
@@ -99,36 +104,44 @@ int make_self_signed_rsa_certificate(char* keyPath, char* certOut, int oid)
99104

100105
WOLFCLU_LOG(WOLFCLU_L0, "Enter your countries 2 digit code (ex: United States -> US): ");
101106
if (XFGETS(country,CTC_NAME_SIZE, stdin) == NULL) {
102-
return WOLFCLU_FAILURE;
107+
ret = WOLFCLU_FAILURE;
108+
goto cleanup;
103109
}
104110
country[CTC_NAME_SIZE-1] = '\0';
105111
WOLFCLU_LOG(WOLFCLU_L0, "Enter the name of the province you are located at: ");
106112
if (XFGETS(province,CTC_NAME_SIZE, stdin) == NULL) {
107-
return WOLFCLU_FAILURE;
113+
ret = WOLFCLU_FAILURE;
114+
goto cleanup;
108115
}
109116
WOLFCLU_LOG(WOLFCLU_L0, "Enter the name of the city you are located at: ");
110117
if (XFGETS(city,CTC_NAME_SIZE, stdin) == NULL) {
111-
return WOLFCLU_FAILURE;
118+
ret = WOLFCLU_FAILURE;
119+
goto cleanup;
112120
}
113121
WOLFCLU_LOG(WOLFCLU_L0, "Enter the name of your orginization: ");
114122
if (XFGETS(org,CTC_NAME_SIZE, stdin) == NULL) {
115-
return WOLFCLU_FAILURE;
123+
ret = WOLFCLU_FAILURE;
124+
goto cleanup;
116125
}
117126
WOLFCLU_LOG(WOLFCLU_L0, "Enter the name of your unit: ");
118127
if (XFGETS(unit,CTC_NAME_SIZE, stdin) == NULL) {
119-
return WOLFCLU_FAILURE;
128+
ret = WOLFCLU_FAILURE;
129+
goto cleanup;
120130
}
121131
WOLFCLU_LOG(WOLFCLU_L0, "Enter the common name of your domain: ");
122132
if (XFGETS(commonName,CTC_NAME_SIZE, stdin) == NULL) {
123-
return WOLFCLU_FAILURE;
133+
ret = WOLFCLU_FAILURE;
134+
goto cleanup;
124135
}
125136
WOLFCLU_LOG(WOLFCLU_L0, "Enter your email address: ");
126137
if (XFGETS(email,CTC_NAME_SIZE, stdin) == NULL) {
127-
return WOLFCLU_FAILURE;
138+
ret = WOLFCLU_FAILURE;
139+
goto cleanup;
128140
}
129141
WOLFCLU_LOG(WOLFCLU_L0, "Enter the number of days this certificate should be valid: ");
130142
if (XFGETS(daysValid,CTC_NAME_SIZE, stdin) == NULL) {
131-
return WOLFCLU_FAILURE;
143+
ret = WOLFCLU_FAILURE;
144+
goto cleanup;
132145
}
133146

134147
XSTRNCPY(newCert.subject.country, country, CTC_NAME_SIZE);
@@ -162,22 +175,23 @@ int make_self_signed_rsa_certificate(char* keyPath, char* certOut, int oid)
162175
certBuf = (byte*) XMALLOC(FOURK_SZ, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
163176
if (certBuf == NULL) {
164177
wolfCLU_LogError("Failed to initialize buffer to stort certificate.");
165-
return -1;
178+
ret = -1;
179+
goto cleanup;
166180
}
167181
XMEMSET(certBuf, 0, FOURK_SZ);
168182

169183
ret = wc_MakeCert(&newCert, certBuf, FOURK_SZ, &key, NULL, &rng);
170184
if (ret < 0) {
171185
wolfCLU_LogError("Failed to make certificate.");
172-
return ret;
186+
goto cleanup;
173187
}
174188
WOLFCLU_LOG(WOLFCLU_L0, "MakeCert returned %d", ret);
175189

176-
ret = wc_SignCert(newCert.bodySz, newCert.sigType, certBuf, FOURK_SZ, &key,
190+
ret = wc_SignCert(newCert.bodySz, newCert.sigType, certBuf, FOURK_SZ, &key,
177191
NULL, &rng);
178192
if (ret < 0) {
179193
wolfCLU_LogError("Failed to sign certificate.");
180-
return ret;
194+
goto cleanup;
181195
}
182196
WOLFCLU_LOG(WOLFCLU_L0, "SignCert returned %d", ret);
183197

@@ -189,7 +203,8 @@ int make_self_signed_rsa_certificate(char* keyPath, char* certOut, int oid)
189203
file = XFOPEN(certOut, "wb");
190204
if (!file) {
191205
wolfCLU_LogError("failed to open file: %s", certOut);
192-
return -1;
206+
ret = -1;
207+
goto cleanup;
193208
}
194209

195210
ret = (int)XFWRITE(certBuf, 1, certBufSz, file);
@@ -205,30 +220,44 @@ int make_self_signed_rsa_certificate(char* keyPath, char* certOut, int oid)
205220
pemBuf = (byte*)XMALLOC(FOURK_SZ, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
206221
if (pemBuf == NULL) {
207222
wolfCLU_LogError("Failed to initialize pem buffer.");
208-
return -1;
223+
ret = -1;
224+
goto cleanup;
209225
}
210226
XMEMSET(pemBuf, 0, FOURK_SZ);
211227

212228
pemBufSz = wc_DerToPem(certBuf, certBufSz, pemBuf, FOURK_SZ, CERT_TYPE);
213229
if (pemBufSz < 0) {
214230
wolfCLU_LogError("Failed to convert from der to pem.");
215-
return -1;
231+
ret = -1;
232+
goto cleanup;
216233
}
217234

218235
WOLFCLU_LOG(WOLFCLU_L0, "Resulting pem buffer is %d bytes", pemBufSz);
219236

220237
pemFile = XFOPEN(certOut, "wb");
221238
if (!pemFile) {
222239
wolfCLU_LogError("failed to open file: %s", certOut);
223-
return -1;
240+
ret = -1;
241+
goto cleanup;
224242
}
225243
XFWRITE(pemBuf, 1, pemBufSz, pemFile);
226244
XFCLOSE(pemFile);
227245
WOLFCLU_LOG(WOLFCLU_L0, "Successfully converted the der to pem. Result is in: %s\n",
228246
certOut);
229247

230-
free_things_rsa(&pemBuf, &certBuf, NULL, &key, NULL, &rng);
231-
return 1;
248+
ret = 1;
249+
250+
cleanup:
251+
if (pemBuf != NULL)
252+
XFREE(pemBuf, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
253+
if (certBuf != NULL)
254+
XFREE(certBuf, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
255+
if (keyInit)
256+
wc_FreeRsaKey(&key);
257+
if (rngInit)
258+
wc_FreeRng(&rng);
259+
260+
return ret;
232261
}
233262

234263
void free_things_rsa(byte** a, byte** b, byte** c, RsaKey* d, RsaKey* e,

src/crypto/clu_crypto_setup.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -186,14 +186,14 @@ int wolfCLU_setup(int argc, char** argv, char action)
186186
return WOLFCLU_FATAL_ERROR;
187187
}
188188
else {
189-
ivString = (char*)XMALLOC(XSTRLEN(optarg), HEAP_HINT,
189+
ivString = (char*)XMALLOC(XSTRLEN(optarg) + 1, HEAP_HINT,
190190
DYNAMIC_TYPE_TMP_BUFFER);
191191
if (ivString == NULL) {
192192
wolfCLU_freeBins(pwdKey, iv, key, NULL, NULL);
193193
return MEMORY_E;
194194
}
195195

196-
XSTRLCPY(ivString, optarg, XSTRLEN(optarg));
196+
XSTRLCPY(ivString, optarg, XSTRLEN(optarg) + 1);
197197
ret = wolfCLU_hexToBin(ivString, &iv, &ivSize,
198198
NULL, NULL, NULL,
199199
NULL, NULL, NULL,
@@ -268,14 +268,14 @@ int wolfCLU_setup(int argc, char** argv, char action)
268268
else {
269269
char* keyString;
270270

271-
keyString = (char*)XMALLOC(XSTRLEN(optarg), HEAP_HINT,
271+
keyString = (char*)XMALLOC(XSTRLEN(optarg) + 1, HEAP_HINT,
272272
DYNAMIC_TYPE_TMP_BUFFER);
273273
if (keyString == NULL) {
274274
wolfCLU_freeBins(pwdKey, iv, key, NULL, NULL);
275275
return MEMORY_E;
276276
}
277277

278-
XSTRLCPY(keyString, optarg, XSTRLEN(optarg));
278+
XSTRLCPY(keyString, optarg, XSTRLEN(optarg) + 1);
279279
ret = wolfCLU_hexToBin(keyString, &key, &numBits,
280280
NULL, NULL, NULL,
281281
NULL, NULL, NULL,

src/genkey/clu_genkey.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -386,9 +386,10 @@ static int wolfCLU_ECC_write_priv_der(WOLFSSL_BIO* out, WOLFSSL_EC_KEY* key)
386386
}
387387

388388
if (ret > 0) {
389-
WOLFCLU_LOG(WOLFCLU_L0, "writing out %d bytes for private key", derSz);
390-
ret = wolfSSL_BIO_write(out, der, derSz);
391-
if (ret != derSz) {
389+
int actualDerSz = ret;
390+
WOLFCLU_LOG(WOLFCLU_L0, "writing out %d bytes for private key", actualDerSz);
391+
ret = wolfSSL_BIO_write(out, der, actualDerSz);
392+
if (ret != actualDerSz) {
392393
ret = WOLFCLU_FATAL_ERROR;
393394
}
394395
WOLFCLU_LOG(WOLFCLU_L0, "ret of write = %d", ret);

src/genkey/clu_genkey_setup.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ int wolfCLU_genKeySetup(int argc, char** argv)
451451

452452
/* get the height argument */
453453
ret = wolfCLU_checkForArg("-height", 7, argc, argv);
454-
if (ret > 0 || argv[ret+1] != NULL) {
454+
if (ret > 0 && argv[ret+1] != NULL) {
455455
WOLFCLU_LOG(WOLFCLU_L0, "Height: %s", argv[ret+1]);
456456

457457
if (XSTRNCMP(argv[ret+1], "20", 2) == 0
@@ -473,7 +473,7 @@ int wolfCLU_genKeySetup(int argc, char** argv)
473473

474474
/* get the layer argument */
475475
ret = wolfCLU_checkForArg("-layer", 6, argc, argv);
476-
if (ret > 0 || argv[ret+1] != NULL) {
476+
if (ret > 0 && argv[ret+1] != NULL) {
477477
WOLFCLU_LOG(WOLFCLU_L0, "Layer: %s", argv[ret+1]);
478478

479479
switch (height) {
@@ -610,7 +610,7 @@ int wolfCLU_genKeySetup(int argc, char** argv)
610610

611611
/* get the height argument */
612612
ret = wolfCLU_checkForArg("-height", 7, argc, argv);
613-
if (ret > 0 || argv[ret+1] != NULL) {
613+
if (ret > 0 && argv[ret+1] != NULL) {
614614
WOLFCLU_LOG(WOLFCLU_L0, "Height: %s", argv[ret+1]);
615615

616616
if (XSTRNCMP(argv[ret+1], "10", 2) == 0) {

src/hash/clu_alg_hash.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,27 +40,39 @@ int wolfCLU_algHashSetup(int argc, char** argv, int algorithm)
4040
alg = (char*)"md5";
4141
size = WC_MD5_DIGEST_SIZE;
4242
break;
43+
#else
44+
wolfCLU_LogError("MD5 not compiled in");
45+
return NOT_COMPILED_IN;
4346
#endif
4447

4548
case WOLFCLU_CERT_SHA256:
4649
#ifndef NO_SHA256
4750
alg = (char*)"sha256";
4851
size = WC_SHA256_DIGEST_SIZE;
4952
break;
53+
#else
54+
wolfCLU_LogError("SHA-256 not compiled in");
55+
return NOT_COMPILED_IN;
5056
#endif
5157

5258
case WOLFCLU_CERT_SHA384:
5359
#ifdef WOLFSSL_SHA384
5460
alg = (char*)"sha384";
5561
size = WC_SHA384_DIGEST_SIZE;
5662
break;
63+
#else
64+
wolfCLU_LogError("SHA-384 not compiled in");
65+
return NOT_COMPILED_IN;
5766
#endif
5867

5968
case WOLFCLU_CERT_SHA512:
6069
#ifdef WOLFSSL_SHA512
6170
alg = (char*)"sha512";
6271
size = WC_SHA512_DIGEST_SIZE;
6372
break;
73+
#else
74+
wolfCLU_LogError("SHA-512 not compiled in");
75+
return NOT_COMPILED_IN;
6476
#endif
6577

6678
default:

src/hash/clu_hash_setup.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ int wolfCLU_hashSetup(int argc, char** argv)
9494

9595
/* returns location of the arg in question if present */
9696
ret = wolfCLU_checkForArg("-in", 3, argc, argv);
97-
if (ret > 0) {
97+
if (ret > 0 && ret + 1 < argc) {
9898
bioIn = wolfSSL_BIO_new_file(argv[ret+1], "rb");
9999
if (bioIn == NULL) {
100100
wolfCLU_LogError("unable to open file %s", argv[ret+1]);
@@ -104,7 +104,7 @@ int wolfCLU_hashSetup(int argc, char** argv)
104104
}
105105

106106
ret = wolfCLU_checkForArg("-out", 4, argc, argv);
107-
if (ret > 0) {
107+
if (ret > 0 && ret + 1 < argc) {
108108
bioOut = wolfSSL_BIO_new_file(argv[ret+1], "wb");
109109
if (bioOut == NULL) {
110110
wolfCLU_LogError("unable to open output file %s",
@@ -114,7 +114,7 @@ int wolfCLU_hashSetup(int argc, char** argv)
114114
}
115115

116116
ret = wolfCLU_checkForArg("-size", 5, argc, argv);
117-
if (ret > 0) {
117+
if (ret > 0 && ret + 1 < argc) {
118118
/* size of output */
119119
#ifndef HAVE_BLAKE2
120120
wolfCLU_LogError("%s: -size is only valid when blake2 is enabled.",

src/ocsp/clu_ocsp.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -884,6 +884,7 @@ static int ocspResponder(OcspResponderConfig* config)
884884
freeIndexEntries(indexEntries);
885885
XFREE(caCertDer, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
886886
XFREE(signerCertDer, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
887+
wolfCLU_ForceZero(signerKeyDer, signerKeyDerSz);
887888
XFREE(signerKeyDer, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
888889
XFREE(caSubject, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
889890

src/pkcs/clu_pkcs12.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ int wolfCLU_PKCS12(int argc, char** argv)
234234
}
235235
}
236236

237+
wolfCLU_ForceZero(password, MAX_PASSWORD_SIZE);
237238
wolfSSL_BIO_free(bioIn);
238239
wolfSSL_BIO_free(bioOut);
239240
wolfSSL_EVP_PKEY_free(pkey);

0 commit comments

Comments
 (0)