Skip to content

Commit 2c1bdd1

Browse files
authored
Merge pull request wolfSSL#345 from cconlon/fenrir
Fenrir fixes
2 parents edd44f7 + 6daeaa7 commit 2c1bdd1

12 files changed

Lines changed: 382 additions & 80 deletions

native/com_wolfssl_WolfCryptECC.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,17 +73,16 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfCryptECC_doVerify
7373
(unsigned int)hashSz, &tmpResult, &myKey);
7474
if (ret != 0) {
7575
printf("wc_ecc_verify_hash failed, ret = %d\n", ret);
76-
wc_ecc_free(&myKey);
77-
return -1;
7876
}
7977
} else {
8078
printf("wc_ecc_import_x963 failed, ret = %d\n", ret);
81-
return -1;
8279
}
8380

8481
wc_ecc_free(&myKey);
8582

86-
(*jenv)->SetIntArrayRegion(jenv, result, 0, 1, &tmpResult);
83+
if (ret == 0) {
84+
(*jenv)->SetIntArrayRegion(jenv, result, 0, 1, &tmpResult);
85+
}
8786

8887
(void)jcl;
8988
return ret;
@@ -140,17 +139,18 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfCryptECC_doSign
140139
&rng, &myKey);
141140
if (ret != 0) {
142141
printf("wc_ecc_sign_hash failed, ret = %d\n", ret);
143-
wc_ecc_free(&myKey);
144-
return -1;
145142
}
146143
} else {
147144
printf("wc_EccPrivateKeyDecode failed, ret = %d\n", ret);
148-
return -1;
149145
}
150146

151147
wc_ecc_free(&myKey);
148+
wc_FreeRng(&rng);
152149

153-
(*jenv)->SetLongArrayRegion(jenv, outSz, 0, 1, (jlong*)&tmpOut);
150+
if (ret == 0) {
151+
tmp = (jlong)tmpOut;
152+
(*jenv)->SetLongArrayRegion(jenv, outSz, 0, 1, &tmp);
153+
}
154154

155155
(void)jcl;
156156
return ret;

native/com_wolfssl_WolfCryptRSA.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfCryptRSA_doSign
9292
}
9393

9494
wc_FreeRsaKey(&myKey);
95+
wc_FreeRng(&rng);
9596

9697
return ret;
9798
}
@@ -141,7 +142,6 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfCryptRSA_doVerify
141142
(unsigned int)outSz, &myKey);
142143
if (ret < 0) {
143144
printf("wc_RsaSSL_Verify failed, ret = %d\n", ret);
144-
return ret;
145145
}
146146
} else {
147147
printf("wc_RsaPublicKeyDecode failed, ret = %d\n", ret);
@@ -212,6 +212,7 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfCryptRSA_doEnc
212212
}
213213

214214
wc_FreeRsaKey(&myKey);
215+
wc_FreeRng(&rng);
215216

216217
return ret;
217218
}
@@ -444,7 +445,6 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfCryptRSA_doDec
444445
(unsigned int)outSz, &myKey);
445446
if (ret < 0) {
446447
printf("wc_RsaPrivateDecrypt failed, ret = %d\n", ret);
447-
return ret;
448448
}
449449
} else {
450450
printf("wc_RsaPrivateKeyDecode failed, ret = %d\n", ret);

native/com_wolfssl_WolfSSLCRL.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -660,7 +660,7 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_WolfSSLCRL_X509_1CRL_1get_1der
660660

661661
derArr = (*jenv)->NewByteArray(jenv, sz);
662662
if (derArr == NULL) {
663-
(*jenv)->ThrowNew(jenv, jcl,
663+
throwWolfSSLJNIException(jenv,
664664
"Failed to create byte array in native X509_CRL_get_der");
665665
XFREE(der, NULL, DYNAMIC_TYPE_OPENSSL);
666666
return NULL;
@@ -742,7 +742,7 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_WolfSSLCRL_X509_1CRL_1get_1pem
742742

743743
pemArr = (*jenv)->NewByteArray(jenv, pemSz);
744744
if (pemArr == NULL) {
745-
(*jenv)->ThrowNew(jenv, jcl,
745+
throwWolfSSLJNIException(jenv,
746746
"Failed to create byte array in native X509_CRL_get_pem");
747747
XFREE(pem, NULL, DYNAMIC_TYPE_TMP_BUFFER);
748748
return NULL;
@@ -801,7 +801,7 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_WolfSSLCRL_X509_1CRL_1get_1signatu
801801

802802
sigArr = (*jenv)->NewByteArray(jenv, sigSz);
803803
if (sigArr == NULL) {
804-
(*jenv)->ThrowNew(jenv, jcl,
804+
throwWolfSSLJNIException(jenv,
805805
"Failed to create byte array in native X509_CRL_get_signature");
806806
return NULL;
807807
}

native/com_wolfssl_WolfSSLCertManager.c

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,30 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSLCertManager_CertManagerLoadCA
6767
return (jint)BAD_FUNC_ARG;
6868
}
6969

70-
certFile = (*jenv)->GetStringUTFChars(jenv, f, 0);
71-
certPath = (*jenv)->GetStringUTFChars(jenv, d, 0);
70+
if (f != NULL) {
71+
certFile = (*jenv)->GetStringUTFChars(jenv, f, 0);
72+
if (certFile == NULL) {
73+
return (jint)MEMORY_E;
74+
}
75+
}
76+
if (d != NULL) {
77+
certPath = (*jenv)->GetStringUTFChars(jenv, d, 0);
78+
if (certPath == NULL) {
79+
if (certFile != NULL) {
80+
(*jenv)->ReleaseStringUTFChars(jenv, f, certFile);
81+
}
82+
return (jint)MEMORY_E;
83+
}
84+
}
7285

7386
ret = wolfSSL_CertManagerLoadCA(cm, certFile, certPath);
7487

75-
(*jenv)->ReleaseStringUTFChars(jenv, f, certFile);
76-
(*jenv)->ReleaseStringUTFChars(jenv, d, certPath);
88+
if (certFile != NULL) {
89+
(*jenv)->ReleaseStringUTFChars(jenv, f, certFile);
90+
}
91+
if (certPath != NULL) {
92+
(*jenv)->ReleaseStringUTFChars(jenv, d, certPath);
93+
}
7794

7895
return (jint)ret;
7996
#else

native/com_wolfssl_WolfSSLCertRequest.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,9 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSLCertRequest_X509_1REQ_1sign
340340
}
341341
(*jenv)->ReleaseByteArrayElements(jenv, keyBytes, (jbyte*)keyBuf,
342342
JNI_ABORT);
343-
(*jenv)->ReleaseStringUTFChars(jenv, digestAlg, mdName);
343+
if (mdName != NULL) {
344+
(*jenv)->ReleaseStringUTFChars(jenv, digestAlg, mdName);
345+
}
344346

345347
return (jint)ret;
346348
#else
@@ -484,7 +486,7 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_WolfSSLCertRequest_X509_1REQ_1get_
484486

485487
derArr = (*jenv)->NewByteArray(jenv, sz);
486488
if (derArr == NULL) {
487-
(*jenv)->ThrowNew(jenv, jcl,
489+
throwWolfSSLJNIException(jenv,
488490
"Failed to create byte array in native X509_REQ_get_der");
489491
return NULL;
490492
}
@@ -567,7 +569,7 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_WolfSSLCertRequest_X509_1REQ_1get_
567569

568570
pemArr = (*jenv)->NewByteArray(jenv, pemSz);
569571
if (pemArr == NULL) {
570-
(*jenv)->ThrowNew(jenv, jcl,
572+
throwWolfSSLJNIException(jenv,
571573
"Failed to create byte array in native X509_REQ_get_pem");
572574
XFREE(pem, NULL, DYNAMIC_TYPE_TMP_BUFFER);
573575
return NULL;

native/com_wolfssl_WolfSSLCertificate.c

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -970,7 +970,9 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1sign
970970
}
971971
(*jenv)->ReleaseByteArrayElements(jenv, fileBytes, (jbyte*)fileBuf,
972972
JNI_ABORT);
973-
(*jenv)->ReleaseStringUTFChars(jenv, digestAlg, mdName);
973+
if (mdName != NULL) {
974+
(*jenv)->ReleaseStringUTFChars(jenv, digestAlg, mdName);
975+
}
974976

975977
return (jint)ret;
976978
#else
@@ -1085,6 +1087,7 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1get_1der
10851087
jbyteArray derArr = NULL;
10861088
jclass excClass = NULL;
10871089
WOLFSSL_X509* x509 = (WOLFSSL_X509*)(uintptr_t)x509Ptr;
1090+
(void)jcl;
10881091

10891092
if (jenv == NULL || x509 == NULL) {
10901093
return NULL;
@@ -1097,7 +1100,7 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1get_1der
10971100

10981101
derArr = (*jenv)->NewByteArray(jenv, sz);
10991102
if (derArr == NULL) {
1100-
(*jenv)->ThrowNew(jenv, jcl,
1103+
throwWolfSSLJNIException(jenv,
11011104
"Failed to create byte array in native X509_get_der");
11021105
return NULL;
11031106
}
@@ -1133,6 +1136,7 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1get_1pem
11331136
jbyteArray pemArr = NULL;
11341137
jclass excClass = NULL;
11351138
WOLFSSL_X509* x509 = (WOLFSSL_X509*)(uintptr_t)x509Ptr;
1139+
(void)jcl;
11361140

11371141
if (jenv == NULL || x509 == NULL) {
11381142
return NULL;
@@ -1162,7 +1166,7 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1get_1pem
11621166

11631167
pemArr = (*jenv)->NewByteArray(jenv, pemSz);
11641168
if (pemArr == NULL) {
1165-
(*jenv)->ThrowNew(jenv, jcl,
1169+
throwWolfSSLJNIException(jenv,
11661170
"Failed to create byte array in native X509_get_pem");
11671171
XFREE(pem, NULL, DYNAMIC_TYPE_TMP_BUFFER);
11681172
return NULL;
@@ -1207,6 +1211,7 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1get_1tbs
12071211
const unsigned char* tbs;
12081212
WOLFSSL_X509* x509 = (WOLFSSL_X509*)(uintptr_t)x509Ptr;
12091213
jclass excClass = NULL;
1214+
(void)jcl;
12101215

12111216
if (jenv == NULL || x509 == NULL) {
12121217
return NULL;
@@ -1219,7 +1224,7 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1get_1tbs
12191224

12201225
tbsArr = (*jenv)->NewByteArray(jenv, sz);
12211226
if (tbsArr == NULL) {
1222-
(*jenv)->ThrowNew(jenv, jcl,
1227+
throwWolfSSLJNIException(jenv,
12231228
"Failed to create byte array in native X509_get_tbs");
12241229
return NULL;
12251230
}
@@ -1374,6 +1379,7 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1get_1sign
13741379
unsigned char* buf = NULL;
13751380
jbyteArray ret = NULL;
13761381
WOLFSSL_X509* x509 = (WOLFSSL_X509*)(uintptr_t)x509Ptr;
1382+
(void)jcl;
13771383

13781384
if (jenv == NULL || x509 == NULL) {
13791385
return NULL;
@@ -1385,7 +1391,7 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1get_1sign
13851391

13861392
ret = (*jenv)->NewByteArray(jenv, sz);
13871393
if (!ret) {
1388-
(*jenv)->ThrowNew(jenv, jcl,
1394+
throwWolfSSLJNIException(jenv,
13891395
"Failed to create byte array in native X509_get_signature");
13901396
return NULL;
13911397
}
@@ -1419,6 +1425,7 @@ JNIEXPORT jstring JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1get_1signatu
14191425
{
14201426
int type;
14211427
WOLFSSL_X509* x509 = (WOLFSSL_X509*)(uintptr_t)x509Ptr;
1428+
(void)jcl;
14221429

14231430
if (jenv == NULL || x509 == NULL) {
14241431
return NULL;
@@ -1438,9 +1445,9 @@ JNIEXPORT jstring JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1get_1signatu
14381445
case CTC_SHAwECDSA:
14391446
return (*jenv)->NewStringUTF(jenv, "SHAwithECDSA");
14401447
case CTC_SHA224wRSA:
1441-
return (*jenv)->NewStringUTF(jenv, "SHA244withRSA");
1448+
return (*jenv)->NewStringUTF(jenv, "SHA224withRSA");
14421449
case CTC_SHA224wECDSA:
1443-
return (*jenv)->NewStringUTF(jenv, "SHA244withECDSA");
1450+
return (*jenv)->NewStringUTF(jenv, "SHA224withECDSA");
14441451
case CTC_SHA256wRSA:
14451452
return (*jenv)->NewStringUTF(jenv, "SHA256withRSA");
14461453
case CTC_SHA256wECDSA:
@@ -1459,7 +1466,7 @@ JNIEXPORT jstring JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1get_1signatu
14591466
return (*jenv)->NewStringUTF(jenv, "RSASSA-PSS");
14601467

14611468
default:
1462-
(*jenv)->ThrowNew(jenv, jcl, "Unknown signature type");
1469+
throwWolfSSLJNIException(jenv, "Unknown signature type");
14631470
return NULL;
14641471
}
14651472
}
@@ -1773,6 +1780,7 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1get_1pubk
17731780
unsigned char* buf;
17741781
jbyteArray ret;
17751782
WOLFSSL_X509* x509 = (WOLFSSL_X509*)(uintptr_t)x509Ptr;
1783+
(void)jcl;
17761784

17771785
if (jenv == NULL || x509 == NULL) {
17781786
return NULL;
@@ -1784,7 +1792,7 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1get_1pubk
17841792

17851793
ret = (*jenv)->NewByteArray(jenv, sz);
17861794
if (!ret) {
1787-
(*jenv)->ThrowNew(jenv, jcl,
1795+
throwWolfSSLJNIException(jenv,
17881796
"Failed to create byte array in native X509_get_signature");
17891797
return NULL;
17901798
}
@@ -1818,6 +1826,7 @@ JNIEXPORT jstring JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1get_1pubkey_
18181826
{
18191827
int type;
18201828
WOLFSSL_X509* x509 = (WOLFSSL_X509*)(uintptr_t)x509Ptr;
1829+
(void)jcl;
18211830

18221831
if (jenv == NULL || x509 == NULL) {
18231832
return NULL;
@@ -1834,7 +1843,7 @@ JNIEXPORT jstring JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1get_1pubkey_
18341843
case ED25519k:
18351844
return (*jenv)->NewStringUTF(jenv, "EdDSA");
18361845
default:
1837-
(*jenv)->ThrowNew(jenv, jcl, "Unknown public key type");
1846+
throwWolfSSLJNIException(jenv, "Unknown public key type");
18381847
return NULL;
18391848
}
18401849
}
@@ -1944,6 +1953,7 @@ JNIEXPORT jbooleanArray JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1get_1k
19441953
jboolean values[9];
19451954
unsigned short kuse;
19461955
WOLFSSL_X509* x509 = (WOLFSSL_X509*)(uintptr_t)x509Ptr;
1956+
(void)jcl;
19471957

19481958
if (jenv == NULL || x509 == NULL) {
19491959
return NULL;
@@ -1953,7 +1963,7 @@ JNIEXPORT jbooleanArray JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1get_1k
19531963
if (kuse != 0) {
19541964
ret = (*jenv)->NewBooleanArray(jenv, 9);
19551965
if (!ret) {
1956-
(*jenv)->ThrowNew(jenv, jcl,
1966+
throwWolfSSLJNIException(jenv,
19571967
"Failed to create boolean array in native X509_get_key_usage");
19581968
return NULL;
19591969
}
@@ -1973,7 +1983,7 @@ JNIEXPORT jbooleanArray JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1get_1k
19731983
(*jenv)->ExceptionDescribe(jenv);
19741984
(*jenv)->ExceptionClear(jenv);
19751985
(*jenv)->DeleteLocalRef(jenv, ret);
1976-
(*jenv)->ThrowNew(jenv, jcl,
1986+
throwWolfSSLJNIException(jenv,
19771987
"Failed to set boolean region getting key usage");
19781988
return NULL;
19791989
}
@@ -2032,6 +2042,7 @@ static jobjectArray stackStringToArray(JNIEnv* jenv, jclass jcl,
20322042
jclass stringClass = NULL;
20332043
int count;
20342044
int i;
2045+
(void)jcl;
20352046

20362047
if (jenv == NULL || sk == NULL) {
20372048
return NULL;
@@ -2063,7 +2074,7 @@ static jobjectArray stackStringToArray(JNIEnv* jenv, jclass jcl,
20632074
(*jenv)->DeleteLocalRef(jenv, ret);
20642075
(*jenv)->DeleteLocalRef(jenv, stringClass);
20652076
wolfSSL_X509_email_free(sk);
2066-
(*jenv)->ThrowNew(jenv, jcl,
2077+
throwWolfSSLJNIException(jenv,
20672078
"Failed to create String in native AIA getter");
20682079
return NULL;
20692080
}
@@ -2076,7 +2087,7 @@ static jobjectArray stackStringToArray(JNIEnv* jenv, jclass jcl,
20762087
(*jenv)->DeleteLocalRef(jenv, ret);
20772088
(*jenv)->DeleteLocalRef(jenv, stringClass);
20782089
wolfSSL_X509_email_free(sk);
2079-
(*jenv)->ThrowNew(jenv, jcl,
2090+
throwWolfSSLJNIException(jenv,
20802091
"Failed to set String[] element in native AIA getter");
20812092
return NULL;
20822093
}
@@ -2249,6 +2260,7 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1get_1exte
22492260
unsigned char* data = NULL;
22502261
unsigned int sz = 0;
22512262
WOLFSSL_X509* x509 = (WOLFSSL_X509*)(uintptr_t)x509Ptr;
2263+
(void)jcl;
22522264

22532265
if (jenv == NULL || oidIn == NULL || x509 == NULL) {
22542266
return NULL;
@@ -2290,7 +2302,7 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_WolfSSLCertificate_X509_1get_1exte
22902302

22912303
ret = (*jenv)->NewByteArray(jenv, sz);
22922304
if (!ret) {
2293-
(*jenv)->ThrowNew(jenv, jcl,
2305+
throwWolfSSLJNIException(jenv,
22942306
"Failed to create byte array in native X509_get_extension");
22952307
return NULL;
22962308
}

0 commit comments

Comments
 (0)