diff --git a/jni/jni_aes.c b/jni/jni_aes.c index 88562ab..0986e04 100644 --- a/jni/jni_aes.c +++ b/jni/jni_aes.c @@ -19,6 +19,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ +#include + #ifdef WOLFSSL_USER_SETTINGS #include #elif !defined(__ANDROID__) @@ -36,24 +38,26 @@ JNIEXPORT jlong JNICALL Java_com_wolfssl_wolfcrypt_Aes_mallocNativeStruct( JNIEnv* env, jobject this) { - void* ret = NULL; - #ifndef NO_AES - ret = (void*)XMALLOC(sizeof(Aes), NULL, DYNAMIC_TYPE_TMP_BUFFER); + Aes* aes = NULL; - if (ret == NULL) { + aes = (Aes*)XMALLOC(sizeof(Aes), NULL, DYNAMIC_TYPE_TMP_BUFFER); + if (aes == NULL) { throwOutOfMemoryException(env, "Failed to allocate Aes object"); } else { - XMEMSET(ret, 0, sizeof(Aes)); + XMEMSET(aes, 0, sizeof(Aes)); } - LogStr("new Aes() = %p\n", ret); + LogStr("new Aes() = %p\n", aes); + + return (jlong)(uintptr_t)aes; + #else throwNotCompiledInException(env); -#endif - return (jlong)ret; + return (jlong)0; +#endif } JNIEXPORT void JNICALL diff --git a/jni/jni_chacha.c b/jni/jni_chacha.c index 100ff1c..b18de4d 100644 --- a/jni/jni_chacha.c +++ b/jni/jni_chacha.c @@ -20,6 +20,7 @@ */ #include + #ifdef WOLFSSL_USER_SETTINGS #include #elif !defined(__ANDROID__) @@ -40,21 +41,26 @@ JNIEXPORT jlong JNICALL Java_com_wolfssl_wolfcrypt_Chacha_mallocNativeStruct( JNIEnv* env, jobject this) { - void* ret = 0; - #ifdef HAVE_CHACHA - ret = (void*)XMALLOC(sizeof(ChaCha), NULL, DYNAMIC_TYPE_TMP_BUFFER); + ChaCha* chacha = NULL; - if (ret == NULL) + chacha = (ChaCha*)XMALLOC(sizeof(ChaCha), NULL, DYNAMIC_TYPE_TMP_BUFFER); + if (chacha == NULL) { throwOutOfMemoryException(env, "Failed to allocate ChaCha object"); + } + else { + XMEMSET(chacha, 0, sizeof(ChaCha)); + } + + LogStr("new ChaCha object allocated = %p\n", chacha); + + return (jlong)(uintptr_t)chacha; - XMEMSET(ret, 0, sizeof(ChaCha)); - LogStr("new ChaCha object allocated = %p\n", ret); #else throwNotCompiledInException(env); -#endif - return (jlong)(uintptr_t)ret; + return (jlong)0; +#endif } JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Chacha_wc_1Chacha_1setIV @@ -162,6 +168,8 @@ Java_com_wolfssl_wolfcrypt_Chacha_wc_1Chacha_1process( } if (ret == 0) { + XMEMSET(output, 0, inputSz); + ret = wc_Chacha_Process(chacha, output, input, inputSz); } diff --git a/jni/jni_curve25519.c b/jni/jni_curve25519.c index a4439bb..228620a 100644 --- a/jni/jni_curve25519.c +++ b/jni/jni_curve25519.c @@ -19,6 +19,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ +#include + #ifdef WOLFSSL_USER_SETTINGS #include #elif !defined(__ANDROID__) @@ -44,20 +46,26 @@ JNIEXPORT jlong JNICALL Java_com_wolfssl_wolfcrypt_Curve25519_mallocNativeStruct( JNIEnv* env, jobject this) { - void* ret = 0; - #ifdef HAVE_CURVE25519 - ret = XMALLOC(sizeof(curve25519_key), NULL, DYNAMIC_TYPE_TMP_BUFFER); + curve25519_key* key = NULL; - if (ret == NULL) + key = (curve25519_key*)XMALLOC(sizeof(curve25519_key), NULL, + DYNAMIC_TYPE_TMP_BUFFER); + if (key == NULL) { throwOutOfMemoryException(env, "Failed to allocate Curve25519 object"); + } + else { + XMEMSET(key, 0, sizeof(curve25519_key)); + } - LogStr("new Curve25519() = %p\n", (void*)ret); + LogStr("new Curve25519() = %p\n", key); + + return (jlong)(uintptr_t)key; #else throwNotCompiledInException(env); -#endif - return (jlong) ret; + return (jlong)0; +#endif } JNIEXPORT void JNICALL @@ -277,6 +285,7 @@ Java_com_wolfssl_wolfcrypt_Curve25519_wc_1curve25519_1export_1private( throwOutOfMemoryException(env, "Failed to allocate key buffer"); return result; } + XMEMSET(output, 0, outputSz); ret = (!curve25519) ? BAD_FUNC_ARG @@ -332,6 +341,7 @@ Java_com_wolfssl_wolfcrypt_Curve25519_wc_1curve25519_1export_1public ( throwOutOfMemoryException(env, "Failed to allocate key buffer"); return result; } + XMEMSET(output, 0, outputSz); ret = (!curve25519) ? BAD_FUNC_ARG @@ -394,6 +404,7 @@ Java_com_wolfssl_wolfcrypt_Curve25519_wc_1curve25519_1make_1shared_1secret( "Failed to allocate shared secret buffer"); return result; } + XMEMSET(output, 0, outputSz); ret = (!curve25519 || !pub) ? BAD_FUNC_ARG diff --git a/jni/jni_des3.c b/jni/jni_des3.c index cf9a99c..8ade840 100644 --- a/jni/jni_des3.c +++ b/jni/jni_des3.c @@ -19,6 +19,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ +#include + #ifdef WOLFSSL_USER_SETTINGS #include #elif !defined(__ANDROID__) @@ -36,20 +38,25 @@ JNIEXPORT jlong JNICALL Java_com_wolfssl_wolfcrypt_Des3_mallocNativeStruct( JNIEnv* env, jobject this) { - jlong ret = 0; - #ifndef NO_DES3 - ret = (jlong) XMALLOC(sizeof(Des3), NULL, DYNAMIC_TYPE_TMP_BUFFER); + Des3* des = NULL; - if (!ret) + des = (Des3*) XMALLOC(sizeof(Des3), NULL, DYNAMIC_TYPE_TMP_BUFFER); + if (des == NULL) { throwOutOfMemoryException(env, "Failed to allocate Des3 object"); + } + else { + XMEMSET(des, 0, sizeof(Des3)); + } - LogStr("new Des3() = %p\n", (void*)ret); + LogStr("new Des3() = %p\n", des); + + return (jlong)(uintptr_t)des; #else throwNotCompiledInException(env); -#endif - return ret; + return (jlong)0; +#endif } JNIEXPORT void JNICALL diff --git a/jni/jni_ecc.c b/jni/jni_ecc.c index 104244a..2aab98a 100644 --- a/jni/jni_ecc.c +++ b/jni/jni_ecc.c @@ -19,6 +19,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ +#include + #ifdef WOLFSSL_USER_SETTINGS #include #elif !defined(__ANDROID__) @@ -44,24 +46,25 @@ JNIEXPORT jlong JNICALL Java_com_wolfssl_wolfcrypt_Ecc_mallocNativeStruct( JNIEnv* env, jobject this) { - void* ret = NULL; - #ifdef HAVE_ECC - ret = (void*)XMALLOC(sizeof(ecc_key), NULL, DYNAMIC_TYPE_TMP_BUFFER); + ecc_key* ecc = NULL; - if (ret == NULL) { + ecc = (ecc_key*)XMALLOC(sizeof(ecc_key), NULL, DYNAMIC_TYPE_TMP_BUFFER); + if (ecc == NULL) { throwOutOfMemoryException(env, "Failed to allocate Ecc object"); } else { - XMEMSET(ret, 0, sizeof(ecc_key)); + XMEMSET(ecc, 0, sizeof(ecc_key)); } - LogStr("new Ecc() = %p\n", (void*)ret); + LogStr("new Ecc() = %p\n", ecc); + + return (jlong)(uintptr_t)ecc; #else throwNotCompiledInException(env); -#endif - return (jlong) ret; + return (jlong)0; +#endif } JNIEXPORT void JNICALL diff --git a/jni/jni_ed25519.c b/jni/jni_ed25519.c index 256e366..1c28ba7 100644 --- a/jni/jni_ed25519.c +++ b/jni/jni_ed25519.c @@ -19,6 +19,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ +#include + #ifdef WOLFSSL_USER_SETTINGS #include #elif !defined(__ANDROID__) @@ -44,20 +46,25 @@ JNIEXPORT jlong JNICALL Java_com_wolfssl_wolfcrypt_Ed25519_mallocNativeStruct( JNIEnv* env, jobject this) { - void* ret = 0; - #ifdef HAVE_ED25519 - ret = XMALLOC(sizeof(ed25519_key), NULL, DYNAMIC_TYPE_TMP_BUFFER); + ed25519_key* key = NULL; - if (ret == NULL) + key = (ed25519_key*)XMALLOC(sizeof(ed25519_key), NULL, DYNAMIC_TYPE_TMP_BUFFER); + if (key == NULL) { throwOutOfMemoryException(env, "Failed to allocate Ed25519 object"); + } + else { + XMEMSET(key, 0, sizeof(ed25519_key)); + } - LogStr("new Ed25519() = %p\n", (void*)ret); + LogStr("new Ed25519() = %p\n", key); + + return (jlong)(uintptr_t)key; #else throwNotCompiledInException(env); -#endif - return (jlong) ret; + return (jlong)0; +#endif } JNIEXPORT void JNICALL @@ -303,6 +310,7 @@ Java_com_wolfssl_wolfcrypt_Ed25519_wc_1ed25519_1export_1private( throwOutOfMemoryException(env, "Failed to allocate key buffer"); return result; } + XMEMSET(output, 0, outputSz); ret = (!ed25519) ? BAD_FUNC_ARG @@ -358,6 +366,7 @@ Java_com_wolfssl_wolfcrypt_Ed25519_wc_1ed25519_1export_1private_1only( throwOutOfMemoryException(env, "Failed to allocate key buffer"); return result; } + XMEMSET(output, 0, outputSz); ret = (!ed25519) ? BAD_FUNC_ARG @@ -413,6 +422,7 @@ Java_com_wolfssl_wolfcrypt_Ed25519_wc_1ed25519_1export_1public( throwOutOfMemoryException(env, "Failed to allocate key buffer"); return result; } + XMEMSET(output, 0, outputSz); ret = (!ed25519) ? BAD_FUNC_ARG @@ -460,13 +470,23 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_wolfcrypt_Ed25519_wc_1ed25519_1sig /* getNativeStruct may throw exception, prevent throwing another */ return NULL; } - msg = getByteArray(env, msg_in); - len = getByteArrayLength(env, msg_in); - output = XMALLOC(outlen, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (!ed25519) { + if (ed25519 == NULL) { ret = BAD_FUNC_ARG; - } else { + } + + if (ret == 0) { + msg = getByteArray(env, msg_in); + len = getByteArrayLength(env, msg_in); + output = XMALLOC(outlen, NULL, DYNAMIC_TYPE_TMP_BUFFER); + if (output == NULL) { + ret = MEMORY_E; + } + } + + if (ret == 0) { + XMEMSET(output, 0, outlen); + ret = wc_ed25519_sign_msg(msg, len, output, &outlen, ed25519); } diff --git a/jni/jni_hmac.c b/jni/jni_hmac.c index d49913a..82abae4 100644 --- a/jni/jni_hmac.c +++ b/jni/jni_hmac.c @@ -19,6 +19,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ +#include + #ifdef WOLFSSL_USER_SETTINGS #include #elif !defined(__ANDROID__) @@ -104,20 +106,26 @@ JNIEXPORT jlong JNICALL Java_com_wolfssl_wolfcrypt_Hmac_mallocNativeStruct( JNIEnv* env, jobject this) { - jlong ret = 0; - #ifndef NO_HMAC - ret = (jlong) XMALLOC(sizeof(Hmac), NULL, DYNAMIC_TYPE_TMP_BUFFER); + Hmac* hmac = NULL; - if (!ret) + hmac = (Hmac*) XMALLOC(sizeof(Hmac), NULL, DYNAMIC_TYPE_TMP_BUFFER); + if (hmac == NULL) { throwOutOfMemoryException(env, "Failed to allocate Hmac object"); + } + else { + XMEMSET(hmac, 0, sizeof(Hmac)); + } + + LogStr("new Hmac() = %p\n", hmac); + + return (jlong)(uintptr_t)hmac; - LogStr("new Hmac() = %p\n", (void*)ret); #else throwNotCompiledInException(env); -#endif - return ret; + return (jlong)0; +#endif } JNIEXPORT void JNICALL diff --git a/jni/jni_md5.c b/jni/jni_md5.c index 12a13ff..7f7c2de 100644 --- a/jni/jni_md5.c +++ b/jni/jni_md5.c @@ -20,6 +20,7 @@ */ #include + #ifdef WOLFSSL_USER_SETTINGS #include #elif !defined(__ANDROID__) @@ -50,20 +51,25 @@ JNIEXPORT jlong JNICALL Java_com_wolfssl_wolfcrypt_Md5_mallocNativeStruct_1internal( JNIEnv* env, jobject this) { - jlong ret = 0; - #ifndef NO_MD5 - ret = (jlong)(uintptr_t)XMALLOC(sizeof(Md5), NULL, DYNAMIC_TYPE_TMP_BUFFER); + Md5* md5 = NULL; - if (!ret) + md5 = (Md5*)XMALLOC(sizeof(Md5), NULL, DYNAMIC_TYPE_TMP_BUFFER); + if (md5 == NULL) { throwOutOfMemoryException(env, "Failed to allocate Md5 object"); + } + else { + XMEMSET(md5, 0, sizeof(Md5)); + } - LogStr("new Md5() = %p\n", (void*)ret); + LogStr("new Md5() = %p\n", md5); + + return (jlong)(uintptr_t)md5; #else throwNotCompiledInException(env); -#endif - return ret; + return (jlong)0; +#endif } JNIEXPORT void JNICALL diff --git a/jni/jni_rng.c b/jni/jni_rng.c index fbbd903..99d3f03 100644 --- a/jni/jni_rng.c +++ b/jni/jni_rng.c @@ -19,6 +19,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ +#include + #ifdef WOLFSSL_USER_SETTINGS #include #elif !defined(__ANDROID__) @@ -43,20 +45,25 @@ JNIEXPORT jlong JNICALL Java_com_wolfssl_wolfcrypt_Rng_mallocNativeStruct( JNIEnv* env, jobject this) { - jlong ret = 0; - #ifndef WC_NO_RNG - ret = (jlong) XMALLOC(sizeof(RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER); + RNG* rng = NULL; - if (!ret) + rng = (RNG*)XMALLOC(sizeof(RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER); + if (rng == NULL) { throwOutOfMemoryException(env, "Failed to allocate Rng object"); + } + else { + XMEMSET(rng, 0, sizeof(RNG)); + } - LogStr("new Rng() = %p\n", (void*)ret); + LogStr("new Rng() = %p\n", rng); + + return (jlong)(uintptr_t)rng; #else throwNotCompiledInException(env); -#endif - return ret; + return (jlong)0; +#endif } JNIEXPORT void JNICALL diff --git a/jni/jni_rsa.c b/jni/jni_rsa.c index 1e78391..9564711 100644 --- a/jni/jni_rsa.c +++ b/jni/jni_rsa.c @@ -19,6 +19,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ +#include + #ifdef WOLFSSL_USER_SETTINGS #include #elif !defined(__ANDROID__) @@ -45,23 +47,25 @@ JNIEXPORT jlong JNICALL Java_com_wolfssl_wolfcrypt_Rsa_mallocNativeStruct( JNIEnv* env, jobject this) { - void* ret = NULL; - #ifndef NO_RSA - ret = (void*)XMALLOC(sizeof(RsaKey), NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (ret == NULL) { + RsaKey* rsa = NULL; + + rsa = (RsaKey*)XMALLOC(sizeof(RsaKey), NULL, DYNAMIC_TYPE_TMP_BUFFER); + if (rsa == NULL) { throwOutOfMemoryException(env, "Failed to allocate Rsa object"); } else { - XMEMSET(ret, 0, sizeof(RsaKey)); + XMEMSET(rsa, 0, sizeof(RsaKey)); } - LogStr("new Rsa() = %p\n", (void*)ret); + LogStr("new Rsa() = %p\n", rsa); + + return (jlong)(uintptr_t)rsa; #else throwNotCompiledInException(env); -#endif - return (jlong)ret; + return (jlong)0; +#endif } JNIEXPORT jlong JNICALL Java_com_wolfssl_wolfcrypt_Rsa_getDefaultRsaExponent @@ -366,6 +370,8 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_wolfcrypt_Rsa_wc_1RsaKeyToDer } if (ret == 0) { + XMEMSET(output, 0, outputSz); + ret = wc_RsaKeyToDer(key, output, outputSz); if (ret > 0) { outputSz = ret; @@ -441,6 +447,8 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_wolfcrypt_Rsa_wc_1RsaKeyToPublicDe } if (ret == 0) { + XMEMSET(output, 0, outputSz); + ret = wc_RsaKeyToPublicDer(key, output, outputSz); if (ret > 0) { outputSz = ret; @@ -898,6 +906,8 @@ Java_com_wolfssl_wolfcrypt_Rsa_wc_1RsaPublicEncrypt( } if (ret == 0) { + XMEMSET(output, 0, outputSz); + ret = wc_RsaPublicEncrypt(plaintext, size, output, outputSz, key, rng); if (ret > 0) { outputSz = ret; @@ -974,6 +984,8 @@ Java_com_wolfssl_wolfcrypt_Rsa_wc_1RsaPrivateDecrypt( } if (ret == 0) { + XMEMSET(output, 0, outputSz); + ret = wc_RsaPrivateDecrypt(ciphertext, size, output, outputSz, key); if (ret > 0) { outputSz = ret; @@ -1057,6 +1069,8 @@ Java_com_wolfssl_wolfcrypt_Rsa_wc_1RsaSSL_1Sign( } if (ret == 0) { + XMEMSET(output, 0, outputSz); + ret = wc_RsaSSL_Sign(data, size, output, outputSz, key, rng); if (ret > 0) { outputSz = ret; @@ -1133,6 +1147,8 @@ Java_com_wolfssl_wolfcrypt_Rsa_wc_1RsaSSL_1Verify( } if (ret == 0) { + XMEMSET(output, 0, outputSz); + ret = wc_RsaSSL_Verify(signature, size, output, outputSz, key); if (ret > 0) { outputSz = ret; diff --git a/jni/jni_sha.c b/jni/jni_sha.c index 4887404..0e2d8f6 100644 --- a/jni/jni_sha.c +++ b/jni/jni_sha.c @@ -19,6 +19,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ +#include + #ifdef WOLFSSL_USER_SETTINGS #include #elif !defined(__ANDROID__) @@ -67,80 +69,100 @@ JNIEXPORT jlong JNICALL Java_com_wolfssl_wolfcrypt_Sha_mallocNativeStruct_1internal( JNIEnv* env, jobject this) { - jlong ret = 0; - #ifndef NO_SHA - ret = (jlong) XMALLOC(sizeof(Sha), NULL, DYNAMIC_TYPE_TMP_BUFFER); + Sha* sha = NULL; - if (!ret) + sha = (Sha*) XMALLOC(sizeof(Sha), NULL, DYNAMIC_TYPE_TMP_BUFFER); + if (sha == NULL) { throwOutOfMemoryException(env, "Failed to allocate Sha object"); + } + else { + XMEMSET(sha, 0, sizeof(Sha)); + } - LogStr("new Sha() = %p\n", (void*)ret); + LogStr("new Sha() = %p\n", sha); + + return (jlong)(uintptr_t)sha; #else throwNotCompiledInException(env); -#endif - return ret; + return (jlong)0; +#endif } JNIEXPORT jlong JNICALL Java_com_wolfssl_wolfcrypt_Sha256_mallocNativeStruct_1internal( JNIEnv* env, jobject this) { - jlong ret = 0; - #ifndef NO_SHA256 - ret = (jlong) XMALLOC(sizeof(Sha256), NULL, DYNAMIC_TYPE_TMP_BUFFER); + Sha256* sha = NULL; - if (!ret) + sha = (Sha256*) XMALLOC(sizeof(Sha256), NULL, DYNAMIC_TYPE_TMP_BUFFER); + if (sha == NULL) { throwOutOfMemoryException(env, "Failed to allocate Sha256 object"); + } + else { + XMEMSET(sha, 0, sizeof(Sha256)); + } - LogStr("new Sha256() = %p\n", (void*)ret); + LogStr("new Sha256() = %p\n", sha); + + return (jlong)(uintptr_t)sha; #else throwNotCompiledInException(env); -#endif - return ret; + return (jlong)0; +#endif } JNIEXPORT jlong JNICALL Java_com_wolfssl_wolfcrypt_Sha384_mallocNativeStruct_1internal( JNIEnv* env, jobject this) { - jlong ret = 0; - #ifdef WOLFSSL_SHA384 - ret = (jlong) XMALLOC(sizeof(Sha384), NULL, DYNAMIC_TYPE_TMP_BUFFER); + Sha384* sha = NULL; - if (!ret) + sha = (Sha384*) XMALLOC(sizeof(Sha384), NULL, DYNAMIC_TYPE_TMP_BUFFER); + if (sha == NULL) { throwOutOfMemoryException(env, "Failed to allocate Sha384 object"); + } + else { + XMEMSET(sha, 0, sizeof(Sha384)); + } - LogStr("new Sha384() = %p\n", (void*)ret); + LogStr("new Sha384() = %p\n", sha); + + return (jlong)(uintptr_t)sha; #else throwNotCompiledInException(env); -#endif - return ret; + return (jlong)0; +#endif } JNIEXPORT jlong JNICALL Java_com_wolfssl_wolfcrypt_Sha512_mallocNativeStruct_1internal( JNIEnv* env, jobject this) { - jlong ret = 0; - #ifdef WOLFSSL_SHA512 - ret = (jlong) XMALLOC(sizeof(Sha512), NULL, DYNAMIC_TYPE_TMP_BUFFER); + Sha512* sha = NULL; - if (!ret) + sha = (Sha512*) XMALLOC(sizeof(Sha512), NULL, DYNAMIC_TYPE_TMP_BUFFER); + if (sha == NULL) { throwOutOfMemoryException(env, "Failed to allocate Sha512 object"); + } + else { + XMEMSET(sha, 0, sizeof(Sha512)); + } - LogStr("new Sha512() = %p\n", (void*)ret); + LogStr("new Sha512() = %p\n", sha); + + return (jlong)(uintptr_t)sha; #else throwNotCompiledInException(env); -#endif - return ret; + return (jlong)0; +#endif } JNIEXPORT void JNICALL