JNI: cleanup XMALLOC usage, call XMEMSET where needed

pull/53/head
Chris Conlon 2023-08-04 15:13:36 -06:00
parent 1fe2ad65fd
commit f63d9a1b0d
11 changed files with 219 additions and 107 deletions

View File

@ -19,6 +19,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <stdint.h>
#ifdef WOLFSSL_USER_SETTINGS
#include <wolfssl/wolfcrypt/settings.h>
#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

View File

@ -20,6 +20,7 @@
*/
#include <stdint.h>
#ifdef WOLFSSL_USER_SETTINGS
#include <wolfssl/wolfcrypt/settings.h>
#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);
}

View File

@ -19,6 +19,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <stdint.h>
#ifdef WOLFSSL_USER_SETTINGS
#include <wolfssl/wolfcrypt/settings.h>
#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

View File

@ -19,6 +19,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <stdint.h>
#ifdef WOLFSSL_USER_SETTINGS
#include <wolfssl/wolfcrypt/settings.h>
#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

View File

@ -19,6 +19,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <stdint.h>
#ifdef WOLFSSL_USER_SETTINGS
#include <wolfssl/wolfcrypt/settings.h>
#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

View File

@ -19,6 +19,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <stdint.h>
#ifdef WOLFSSL_USER_SETTINGS
#include <wolfssl/wolfcrypt/settings.h>
#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);
}

View File

@ -19,6 +19,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <stdint.h>
#ifdef WOLFSSL_USER_SETTINGS
#include <wolfssl/wolfcrypt/settings.h>
#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

View File

@ -20,6 +20,7 @@
*/
#include <stdint.h>
#ifdef WOLFSSL_USER_SETTINGS
#include <wolfssl/wolfcrypt/settings.h>
#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

View File

@ -19,6 +19,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <stdint.h>
#ifdef WOLFSSL_USER_SETTINGS
#include <wolfssl/wolfcrypt/settings.h>
#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

View File

@ -19,6 +19,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <stdint.h>
#ifdef WOLFSSL_USER_SETTINGS
#include <wolfssl/wolfcrypt/settings.h>
#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;

View File

@ -19,6 +19,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <stdint.h>
#ifdef WOLFSSL_USER_SETTINGS
#include <wolfssl/wolfcrypt/settings.h>
#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