adds byte[] versions of Asn, Rsa, Dh and Md5;

improves byte[] release usage, copying buffer only when necessary.
pull/2/merge
Moisés Guimarães 2015-12-21 21:21:26 -03:00
parent daa71176a3
commit 156d72a69e
12 changed files with 1015 additions and 67 deletions

View File

@ -14,9 +14,17 @@ extern "C" {
* Method: encodeSignature
* Signature: (Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;JI)V
*/
JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Asn_encodeSignature
JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Asn_encodeSignature__Ljava_nio_ByteBuffer_2Ljava_nio_ByteBuffer_2JI
(JNIEnv *, jclass, jobject, jobject, jlong, jint);
/*
* Class: com_wolfssl_wolfcrypt_Asn
* Method: encodeSignature
* Signature: ([B[BJI)J
*/
JNIEXPORT jlong JNICALL Java_com_wolfssl_wolfcrypt_Asn_encodeSignature___3B_3BJI
(JNIEnv *, jclass, jbyteArray, jbyteArray, jlong, jint);
/*
* Class: com_wolfssl_wolfcrypt_Asn
* Method: getCTC_HashOID

View File

@ -316,17 +316,33 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_FreeRsaKey_1fips
* Method: RsaSSL_Sign_fips
* Signature: (Ljava/nio/ByteBuffer;JLjava/nio/ByteBuffer;JLcom/wolfssl/wolfcrypt/Rsa;Lcom/wolfssl/wolfcrypt/Rng;)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaSSL_1Sign_1fips
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaSSL_1Sign_1fips__Ljava_nio_ByteBuffer_2JLjava_nio_ByteBuffer_2JLcom_wolfssl_wolfcrypt_Rsa_2Lcom_wolfssl_wolfcrypt_Rng_2
(JNIEnv *, jclass, jobject, jlong, jobject, jlong, jobject, jobject);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: RsaSSL_Sign_fips
* Signature: ([BJ[BJLcom/wolfssl/wolfcrypt/Rsa;Lcom/wolfssl/wolfcrypt/Rng;)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaSSL_1Sign_1fips___3BJ_3BJLcom_wolfssl_wolfcrypt_Rsa_2Lcom_wolfssl_wolfcrypt_Rng_2
(JNIEnv *, jclass, jbyteArray, jlong, jbyteArray, jlong, jobject, jobject);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: RsaSSL_Verify_fips
* Signature: (Ljava/nio/ByteBuffer;JLjava/nio/ByteBuffer;JLcom/wolfssl/wolfcrypt/Rsa;)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaSSL_1Verify_1fips
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaSSL_1Verify_1fips__Ljava_nio_ByteBuffer_2JLjava_nio_ByteBuffer_2JLcom_wolfssl_wolfcrypt_Rsa_2
(JNIEnv *, jclass, jobject, jlong, jobject, jlong, jobject);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: RsaSSL_Verify_fips
* Signature: ([BJ[BJLcom/wolfssl/wolfcrypt/Rsa;)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaSSL_1Verify_1fips___3BJ_3BJLcom_wolfssl_wolfcrypt_Rsa_2
(JNIEnv *, jclass, jbyteArray, jlong, jbyteArray, jlong, jobject);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: RsaEncryptSize_fips
@ -340,17 +356,33 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaEncryptSize_1fips
* Method: RsaPrivateKeyDecode_fips
* Signature: (Ljava/nio/ByteBuffer;[JLcom/wolfssl/wolfcrypt/Rsa;J)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPrivateKeyDecode_1fips
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPrivateKeyDecode_1fips__Ljava_nio_ByteBuffer_2_3JLcom_wolfssl_wolfcrypt_Rsa_2J
(JNIEnv *, jclass, jobject, jlongArray, jobject, jlong);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: RsaPrivateKeyDecode_fips
* Signature: ([B[JLcom/wolfssl/wolfcrypt/Rsa;J)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPrivateKeyDecode_1fips___3B_3JLcom_wolfssl_wolfcrypt_Rsa_2J
(JNIEnv *, jclass, jbyteArray, jlongArray, jobject, jlong);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: RsaPublicKeyDecode_fips
* Signature: (Ljava/nio/ByteBuffer;[JLcom/wolfssl/wolfcrypt/Rsa;J)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPublicKeyDecode_1fips
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPublicKeyDecode_1fips__Ljava_nio_ByteBuffer_2_3JLcom_wolfssl_wolfcrypt_Rsa_2J
(JNIEnv *, jclass, jobject, jlongArray, jobject, jlong);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: RsaPublicKeyDecode_fips
* Signature: ([B[JLcom/wolfssl/wolfcrypt/Rsa;J)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPublicKeyDecode_1fips___3B_3JLcom_wolfssl_wolfcrypt_Rsa_2J
(JNIEnv *, jclass, jbyteArray, jlongArray, jobject, jlong);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: InitSha_fips
@ -532,17 +564,33 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_wolfCrypt_1SetStatus_1fip
* Method: RsaPublicEncrypt_fips
* Signature: (Ljava/nio/ByteBuffer;JLjava/nio/ByteBuffer;JLcom/wolfssl/wolfcrypt/Rsa;Lcom/wolfssl/wolfcrypt/Rng;)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPublicEncrypt_1fips
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPublicEncrypt_1fips__Ljava_nio_ByteBuffer_2JLjava_nio_ByteBuffer_2JLcom_wolfssl_wolfcrypt_Rsa_2Lcom_wolfssl_wolfcrypt_Rng_2
(JNIEnv *, jclass, jobject, jlong, jobject, jlong, jobject, jobject);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: RsaPublicEncrypt_fips
* Signature: ([BJ[BJLcom/wolfssl/wolfcrypt/Rsa;Lcom/wolfssl/wolfcrypt/Rng;)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPublicEncrypt_1fips___3BJ_3BJLcom_wolfssl_wolfcrypt_Rsa_2Lcom_wolfssl_wolfcrypt_Rng_2
(JNIEnv *, jclass, jbyteArray, jlong, jbyteArray, jlong, jobject, jobject);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: RsaPrivateDecrypt_fips
* Signature: (Ljava/nio/ByteBuffer;JLjava/nio/ByteBuffer;JLcom/wolfssl/wolfcrypt/Rsa;)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPrivateDecrypt_1fips
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPrivateDecrypt_1fips__Ljava_nio_ByteBuffer_2JLjava_nio_ByteBuffer_2JLcom_wolfssl_wolfcrypt_Rsa_2
(JNIEnv *, jclass, jobject, jlong, jobject, jlong, jobject);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: RsaPrivateDecrypt_fips
* Signature: ([BJ[BJLcom/wolfssl/wolfcrypt/Rsa;)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPrivateDecrypt_1fips___3BJ_3BJLcom_wolfssl_wolfcrypt_Rsa_2
(JNIEnv *, jclass, jbyteArray, jlong, jbyteArray, jlong, jobject);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: InitMd5
@ -556,17 +604,33 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_InitMd5
* Method: Md5Update
* Signature: (Lcom/wolfssl/wolfcrypt/Md5;Ljava/nio/ByteBuffer;J)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_Md5Update
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_Md5Update__Lcom_wolfssl_wolfcrypt_Md5_2Ljava_nio_ByteBuffer_2J
(JNIEnv *, jclass, jobject, jobject, jlong);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: Md5Update
* Signature: (Lcom/wolfssl/wolfcrypt/Md5;[BJ)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_Md5Update__Lcom_wolfssl_wolfcrypt_Md5_2_3BJ
(JNIEnv *, jclass, jobject, jbyteArray, jlong);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: Md5Final
* Signature: (Lcom/wolfssl/wolfcrypt/Md5;Ljava/nio/ByteBuffer;)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_Md5Final
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_Md5Final__Lcom_wolfssl_wolfcrypt_Md5_2Ljava_nio_ByteBuffer_2
(JNIEnv *, jclass, jobject, jobject);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: Md5Final
* Signature: (Lcom/wolfssl/wolfcrypt/Md5;[B)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_Md5Final__Lcom_wolfssl_wolfcrypt_Md5_2_3B
(JNIEnv *, jclass, jobject, jbyteArray);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: InitDhKey
@ -588,41 +652,81 @@ JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Fips_FreeDhKey
* Method: DhGenerateKeyPair
* Signature: (Lcom/wolfssl/wolfcrypt/Dh;Lcom/wolfssl/wolfcrypt/Rng;Ljava/nio/ByteBuffer;[JLjava/nio/ByteBuffer;[J)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhGenerateKeyPair
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhGenerateKeyPair__Lcom_wolfssl_wolfcrypt_Dh_2Lcom_wolfssl_wolfcrypt_Rng_2Ljava_nio_ByteBuffer_2_3JLjava_nio_ByteBuffer_2_3J
(JNIEnv *, jclass, jobject, jobject, jobject, jlongArray, jobject, jlongArray);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: DhGenerateKeyPair
* Signature: (Lcom/wolfssl/wolfcrypt/Dh;Lcom/wolfssl/wolfcrypt/Rng;[B[J[B[J)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhGenerateKeyPair__Lcom_wolfssl_wolfcrypt_Dh_2Lcom_wolfssl_wolfcrypt_Rng_2_3B_3J_3B_3J
(JNIEnv *, jclass, jobject, jobject, jbyteArray, jlongArray, jbyteArray, jlongArray);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: DhAgree
* Signature: (Lcom/wolfssl/wolfcrypt/Dh;Ljava/nio/ByteBuffer;[JLjava/nio/ByteBuffer;JLjava/nio/ByteBuffer;J)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhAgree
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhAgree__Lcom_wolfssl_wolfcrypt_Dh_2Ljava_nio_ByteBuffer_2_3JLjava_nio_ByteBuffer_2JLjava_nio_ByteBuffer_2J
(JNIEnv *, jclass, jobject, jobject, jlongArray, jobject, jlong, jobject, jlong);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: DhAgree
* Signature: (Lcom/wolfssl/wolfcrypt/Dh;[B[J[BJ[BJ)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhAgree__Lcom_wolfssl_wolfcrypt_Dh_2_3B_3J_3BJ_3BJ
(JNIEnv *, jclass, jobject, jbyteArray, jlongArray, jbyteArray, jlong, jbyteArray, jlong);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: DhKeyDecode
* Signature: (Ljava/nio/ByteBuffer;[JLcom/wolfssl/wolfcrypt/Dh;J)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhKeyDecode
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhKeyDecode__Ljava_nio_ByteBuffer_2_3JLcom_wolfssl_wolfcrypt_Dh_2J
(JNIEnv *, jclass, jobject, jlongArray, jobject, jlong);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: DhKeyDecode
* Signature: ([B[JLcom/wolfssl/wolfcrypt/Dh;J)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhKeyDecode___3B_3JLcom_wolfssl_wolfcrypt_Dh_2J
(JNIEnv *, jclass, jbyteArray, jlongArray, jobject, jlong);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: DhSetKey
* Signature: (Lcom/wolfssl/wolfcrypt/Dh;Ljava/nio/ByteBuffer;JLjava/nio/ByteBuffer;J)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhSetKey
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhSetKey__Lcom_wolfssl_wolfcrypt_Dh_2Ljava_nio_ByteBuffer_2JLjava_nio_ByteBuffer_2J
(JNIEnv *, jclass, jobject, jobject, jlong, jobject, jlong);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: DhSetKey
* Signature: (Lcom/wolfssl/wolfcrypt/Dh;[BJ[BJ)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhSetKey__Lcom_wolfssl_wolfcrypt_Dh_2_3BJ_3BJ
(JNIEnv *, jclass, jobject, jbyteArray, jlong, jbyteArray, jlong);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: DhParamsLoad
* Signature: (Ljava/nio/ByteBuffer;JLjava/nio/ByteBuffer;[JLjava/nio/ByteBuffer;[J)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhParamsLoad
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhParamsLoad__Ljava_nio_ByteBuffer_2JLjava_nio_ByteBuffer_2_3JLjava_nio_ByteBuffer_2_3J
(JNIEnv *, jclass, jobject, jlong, jobject, jlongArray, jobject, jlongArray);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: DhParamsLoad
* Signature: ([BJ[B[J[B[J)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhParamsLoad___3BJ_3B_3J_3B_3J
(JNIEnv *, jclass, jbyteArray, jlong, jbyteArray, jlongArray, jbyteArray, jlongArray);
/*
* Class: com_wolfssl_wolfcrypt_Fips
* Method: ecc_init

View File

@ -22,17 +22,33 @@ JNIEXPORT jlong JNICALL Java_com_wolfssl_wolfcrypt_Rsa_mallocNativeStruct
* Method: decodeRawPublicKey
* Signature: (Ljava/nio/ByteBuffer;JLjava/nio/ByteBuffer;J)V
*/
JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Rsa_decodeRawPublicKey
JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Rsa_decodeRawPublicKey__Ljava_nio_ByteBuffer_2JLjava_nio_ByteBuffer_2J
(JNIEnv *, jobject, jobject, jlong, jobject, jlong);
/*
* Class: com_wolfssl_wolfcrypt_Rsa
* Method: decodeRawPublicKey
* Signature: ([BJ[BJ)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Rsa_decodeRawPublicKey___3BJ_3BJ
(JNIEnv *, jobject, jbyteArray, jlong, jbyteArray, jlong);
/*
* Class: com_wolfssl_wolfcrypt_Rsa
* Method: exportRawPublicKey
* Signature: (Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)V
*/
JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Rsa_exportRawPublicKey
JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Rsa_exportRawPublicKey__Ljava_nio_ByteBuffer_2Ljava_nio_ByteBuffer_2
(JNIEnv *, jobject, jobject, jobject);
/*
* Class: com_wolfssl_wolfcrypt_Rsa
* Method: exportRawPublicKey
* Signature: ([B[J[B[J)I
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Rsa_exportRawPublicKey___3B_3J_3B_3J
(JNIEnv *, jobject, jbyteArray, jlongArray, jbyteArray, jlongArray);
/*
* Class: com_wolfssl_wolfcrypt_Rsa
* Method: makeKey

View File

@ -29,7 +29,7 @@ extern "C" {
void* getNativeStruct(JNIEnv* env, jobject this);
byte* getDirectBufferAddress(JNIEnv* env, jobject buffer);
byte* getByteArray(JNIEnv* env, jbyteArray array);
void releaseByteArray(JNIEnv* env, jbyteArray array, byte* elements, jint ret);
void releaseByteArray(JNIEnv* env, jbyteArray array, byte* elements, jint abort);
word32 getByteArrayLength(JNIEnv* env, jbyteArray array);
word32 getDirectBufferLimit(JNIEnv* env, jobject buffer);

View File

@ -28,11 +28,12 @@
#endif
#include <wolfssl/wolfcrypt/asn_public.h>
#include <wolfssl/wolfcrypt/error-crypt.h>
/* #define WOLFCRYPT_JNI_DEBUG_ON */
#include <wolfcrypt_jni_debug.h>
JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Asn_encodeSignature(
JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Asn_encodeSignature__Ljava_nio_ByteBuffer_2Ljava_nio_ByteBuffer_2JI(
JNIEnv* env, jclass class, jobject encoded_object, jobject hash_object,
jlong hashSize, jint hashOID)
{
@ -46,6 +47,24 @@ JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Asn_encodeSignature(
wc_EncodeSignature(encoded, hash, hashSize, hashOID));
}
JNIEXPORT jlong JNICALL Java_com_wolfssl_wolfcrypt_Asn_encodeSignature___3B_3BJI(
JNIEnv* env, jclass class, jbyteArray encoded_object,
jbyteArray hash_object, jlong hashSize, jint hashOID)
{
byte* encoded = getByteArray(env, encoded_object);
byte* hash = getByteArray(env, hash_object);
jlong ret = 0;
ret = (!encoded || !hash)
? BAD_FUNC_ARG
: wc_EncodeSignature(encoded, hash, hashSize, hashOID);
releaseByteArray(env, encoded_object, encoded, ret < 0);
releaseByteArray(env, hash_object, hash, ret < 0);
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Asn_getCTC_1HashOID(
JNIEnv* env, jclass class, jint type)
{

View File

@ -160,8 +160,8 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_AesSetKey_1fips__Lcom_wol
LogStr("iv:\n");
LogHex(iv, AES_BLOCK_SIZE);
releaseByteArray(env, key_buffer, key, ret);
releaseByteArray(env, iv_buffer, iv, ret);
releaseByteArray(env, key_buffer, key, 1);
releaseByteArray(env, iv_buffer, iv, 1);
#endif
@ -209,7 +209,7 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_AesSetIV_1fips__Lcom_wolf
LogStr("iv:\n");
LogHex(iv, AES_BLOCK_SIZE);
releaseByteArray(env, iv_buffer, iv, ret);
releaseByteArray(env, iv_buffer, iv, 1);
#endif
@ -267,7 +267,7 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_AesCbcEncrypt_1fips__Lcom
LogHex(out, size);
releaseByteArray(env, out_buffer, out, ret);
releaseByteArray(env, in_buffer, in, ret);
releaseByteArray(env, in_buffer, in, 1);
#endif
@ -325,7 +325,7 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_AesCbcDecrypt_1fips__Lcom
LogHex(out, size);
releaseByteArray(env, out_buffer, out, ret);
releaseByteArray(env, in_buffer, in, ret);
releaseByteArray(env, in_buffer, in, 1);
#endif
@ -375,7 +375,7 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_AesGcmSetKey_1fips__Lcom_
LogStr("key:\n");
LogHex(key, size);
releaseByteArray(env, key_buffer, key, ret);
releaseByteArray(env, key_buffer, key, 1);
#endif
@ -464,10 +464,10 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_AesGcmEncrypt_1fips__Lcom
LogHex(authIn, authInSz);
releaseByteArray(env, out_buffer, out, ret);
releaseByteArray(env, in_buffer, in, ret);
releaseByteArray(env, iv_buffer, iv, ret);
releaseByteArray(env, in_buffer, in, 1);
releaseByteArray(env, iv_buffer, iv, 1);
releaseByteArray(env, authTag_buffer, authTag, ret);
releaseByteArray(env, authIn_buffer, authIn, ret);
releaseByteArray(env, authIn_buffer, authIn, 1);
#endif
@ -556,10 +556,10 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_AesGcmDecrypt_1fips__Lcom
LogHex(authIn, authInSz);
releaseByteArray(env, out_buffer, out, ret);
releaseByteArray(env, in_buffer, in, ret);
releaseByteArray(env, iv_buffer, iv, ret);
releaseByteArray(env, in_buffer, in, 1);
releaseByteArray(env, iv_buffer, iv, 1);
releaseByteArray(env, authTag_buffer, authTag, ret);
releaseByteArray(env, authIn_buffer, authIn, ret);
releaseByteArray(env, authIn_buffer, authIn, 1);
#endif
@ -619,8 +619,8 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_Des3_1SetKey_1fips__Lcom_
LogStr("iv:\n");
LogHex(iv, DES3_IVLEN);
releaseByteArray(env, key_buffer, key, ret);
releaseByteArray(env, iv_buffer, iv, ret);
releaseByteArray(env, key_buffer, key, 1);
releaseByteArray(env, iv_buffer, iv, 1);
#endif
@ -667,7 +667,7 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_Des3_1SetIV_1fips__Lcom_w
LogStr("iv:\n");
LogHex(iv, DES_BLOCK_SIZE);
releaseByteArray(env, iv_buffer, iv, ret);
releaseByteArray(env, iv_buffer, iv, 1);
#endif
@ -724,7 +724,7 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_Des3_1CbcEncrypt_1fips__L
LogHex(out, size);
releaseByteArray(env, out_buffer, out, ret);
releaseByteArray(env, in_buffer, in, ret);
releaseByteArray(env, in_buffer, in, 1);
#endif
@ -781,7 +781,7 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_Des3_1CbcDecrypt_1fips__L
LogHex(out, size);
releaseByteArray(env, out_buffer, out, ret);
releaseByteArray(env, in_buffer, in, ret);
releaseByteArray(env, in_buffer, in, 1);
#endif
@ -839,7 +839,7 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_HmacSetKey_1fips__Lcom_wo
LogStr("key:\n");
LogHex(key, keySz);
releaseByteArray(env, key_buffer, key, ret);
releaseByteArray(env, key_buffer, key, 1);
#endif
@ -889,7 +889,7 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_HmacUpdate_1fips__Lcom_wo
LogStr("data:\n");
LogHex(data, len);
releaseByteArray(env, data_buffer, data, ret);
releaseByteArray(env, data_buffer, data, 1);
#endif
@ -1102,8 +1102,8 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RNG_1HealthTest_1fips__I_
LogStr("output:\n");
LogHex(output, outputSz);
releaseByteArray(env, entropyA_object, entropyA, ret);
releaseByteArray(env, entropyB_object, entropyB, ret);
releaseByteArray(env, entropyA_object, (byte*)entropyA, 1);
releaseByteArray(env, entropyB_object, (byte*)entropyB, 1);
releaseByteArray(env, output_object, output, ret);
#endif
@ -1160,7 +1160,7 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_FreeRsaKey_1fips(
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaSSL_1Sign_1fips(
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaSSL_1Sign_1fips__Ljava_nio_ByteBuffer_2JLjava_nio_ByteBuffer_2JLcom_wolfssl_wolfcrypt_Rsa_2Lcom_wolfssl_wolfcrypt_Rng_2(
JNIEnv* env, jclass class, jobject in_object, jlong inLen,
jobject out_object, jlong outLen, jobject rsa_object, jobject rng_object)
{
@ -1194,7 +1194,43 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaSSL_1Sign_1fips(
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaSSL_1Verify_1fips(
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaSSL_1Sign_1fips___3BJ_3BJLcom_wolfssl_wolfcrypt_Rsa_2Lcom_wolfssl_wolfcrypt_Rng_2(
JNIEnv* env, jclass class, jbyteArray in_object, jlong inLen,
jbyteArray out_object, jlong outLen, jobject rsa_object, jobject rng_object)
{
jint ret = NOT_COMPILED_IN;
#if defined(HAVE_FIPS) && !defined(NO_RSA)
byte* in = getByteArray(env, in_object);
byte* out = getByteArray(env, out_object);
RsaKey* key = (RsaKey*) getNativeStruct(env, rsa_object);
RNG* rng = (RNG*) getNativeStruct(env, rsa_object);
/**
* Providing an rng is optional. RNG_GenerateBlock will return BAD_FUNC_ARG
* on a NULL rng if an RNG is needed by RsaPad.
*/
ret = (!in || !out || !key)
? BAD_FUNC_ARG
: RsaSSL_Sign_fips(in, inLen, out, outLen, key, rng);
LogStr("RsaSSL_Sign_fips(in, inLen, out, outLen, key=%p, rng=%p) = %d\n",
key, rng, ret);
LogStr("in:\n");
LogHex((byte*) in, inLen);
LogStr("out:\n");
LogHex((byte*) out, outLen);
releaseByteArray(env, in_object, in, 1);
releaseByteArray(env, out_object, out, ret);
#endif
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaSSL_1Verify_1fips__Ljava_nio_ByteBuffer_2JLjava_nio_ByteBuffer_2JLcom_wolfssl_wolfcrypt_Rsa_2(
JNIEnv* env, jclass class, jobject in_object, jlong inLen,
jobject out_object, jlong outLen, jobject rsa_object)
{
@ -1223,6 +1259,37 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaSSL_1Verify_1fips(
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaSSL_1Verify_1fips___3BJ_3BJLcom_wolfssl_wolfcrypt_Rsa_2(
JNIEnv* env, jclass class, jbyteArray in_object, jlong inLen,
jbyteArray out_object, jlong outLen, jobject rsa_object)
{
jint ret = NOT_COMPILED_IN;
#if defined(HAVE_FIPS) && !defined(NO_RSA)
byte* in = getByteArray(env, in_object);
byte* out = getByteArray(env, out_object);
RsaKey* key = (RsaKey*) getNativeStruct(env, rsa_object);
ret = (!in || !out || !key)
? BAD_FUNC_ARG
: RsaSSL_Verify_fips(in, inLen, out, outLen, key);
LogStr("RsaSSL_Verify_fips(in, inLen, out, outLen, key=%p) = %d\n", key,
ret);
LogStr("in:\n");
LogHex((byte*) in, inLen);
LogStr("out:\n");
LogHex((byte*) out, outLen);
releaseByteArray(env, in_object, in, 1);
releaseByteArray(env, out_object, out, ret < 0);
#endif
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaEncryptSize_1fips(
JNIEnv* env, jclass class, jobject rsa_object)
{
@ -1244,7 +1311,7 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaEncryptSize_1fips(
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPrivateKeyDecode_1fips(
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPrivateKeyDecode_1fips__Ljava_nio_ByteBuffer_2_3JLcom_wolfssl_wolfcrypt_Rsa_2J(
JNIEnv* env, jclass class, jobject input_object, jlongArray inOutIdx,
jobject rsa_object, jlong inSz)
{
@ -1275,7 +1342,40 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPrivateKeyDecode_1fips
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPublicKeyDecode_1fips(
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPrivateKeyDecode_1fips___3B_3JLcom_wolfssl_wolfcrypt_Rsa_2J(
JNIEnv* env, jclass class, jbyteArray input_object, jlongArray inOutIdx,
jobject rsa_object, jlong inSz)
{
jint ret = NOT_COMPILED_IN;
#if defined(HAVE_FIPS) && !defined(NO_RSA)
word32 tmpIdx;
byte* input = getByteArray(env, input_object);
RsaKey* key = (RsaKey*) getNativeStruct(env, rsa_object);
(*env)->GetLongArrayRegion(env, inOutIdx, 0, 1, (jlong*) &tmpIdx);
ret = (!input || !key)
? BAD_FUNC_ARG
: RsaPrivateKeyDecode_fips(input, &tmpIdx, key, inSz);
(*env)->SetLongArrayRegion(env, inOutIdx, 0, 1, (jlong*) &tmpIdx);
LogStr("RsaPrivateKeyDecode_fips(input, inOutIdx, key=%p, inSz) = %d\n",
key, ret);
LogStr("input:\n");
LogHex((byte*) input, inSz);
releaseByteArray(env, input_object, input, 1);
#endif
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPublicKeyDecode_1fips__Ljava_nio_ByteBuffer_2_3JLcom_wolfssl_wolfcrypt_Rsa_2J(
JNIEnv* env, jclass class, jobject input_object, jlongArray inOutIdx,
jobject rsa_object, jlong inSz)
{
@ -1306,6 +1406,38 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPublicKeyDecode_1fips(
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPublicKeyDecode_1fips___3B_3JLcom_wolfssl_wolfcrypt_Rsa_2J(
JNIEnv* env, jclass class, jbyteArray input_object, jlongArray inOutIdx,
jobject rsa_object, jlong inSz)
{
jint ret = NOT_COMPILED_IN;
#if defined(HAVE_FIPS) && !defined(NO_RSA)
word32 tmpIdx;
byte* input = getByteArray(env, input_object);
RsaKey* key = (RsaKey*) getNativeStruct(env, rsa_object);
(*env)->GetLongArrayRegion(env, inOutIdx, 0, 1, (jlong*) &tmpIdx);
ret = (!input || !key)
? BAD_FUNC_ARG
: RsaPublicKeyDecode_fips(input, &tmpIdx, key, inSz);
(*env)->SetLongArrayRegion(env, inOutIdx, 0, 1, (jlong*) &tmpIdx);
LogStr("RsaPublicKeyDecode_fips(input, inOutIdx, key=%p, inSz) = %d\n", key,
ret);
LogStr("input:\n");
LogHex((byte*) input, inSz);
releaseByteArray(env, input_object, input, 1);
#endif
return ret;
}
/*
* wolfCrypt FIPS API - Message digest Service
*/
@ -1374,7 +1506,7 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_ShaUpdate_1fips__Lcom_wol
LogStr("data:\n");
LogHex(data, len);
releaseByteArray(env, data_buffer, data, ret);
releaseByteArray(env, data_buffer, data, 1);
#endif
@ -1493,7 +1625,7 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_Sha256Update_1fips__Lcom_
LogStr("data:\n");
LogHex(data, len);
releaseByteArray(env, data_buffer, data, ret);
releaseByteArray(env, data_buffer, data, 1);
#endif
@ -1612,7 +1744,7 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_Sha384Update_1fips__Lcom_
LogStr("data:\n");
LogHex(data, len);
releaseByteArray(env, data_buffer, data, ret);
releaseByteArray(env, data_buffer, data, 1);
#endif
@ -1731,7 +1863,7 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_Sha512Update_1fips__Lcom_
LogStr("data:\n");
LogHex(data, len);
releaseByteArray(env, data_buffer, data, ret);
releaseByteArray(env, data_buffer, data, 1);
#endif
@ -1814,7 +1946,7 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_wolfCrypt_1SetStatus_1fip
* wolfCrypt FIPS API - Key transport Service
*/
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPublicEncrypt_1fips(
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPublicEncrypt_1fips__Ljava_nio_ByteBuffer_2JLjava_nio_ByteBuffer_2JLcom_wolfssl_wolfcrypt_Rsa_2Lcom_wolfssl_wolfcrypt_Rng_2(
JNIEnv* env, jclass class, jobject in_object, jlong inLen,
jobject out_object, jlong outLen, jobject rsa_object, jobject rng_object)
{
@ -1849,7 +1981,44 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPublicEncrypt_1fips(
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPrivateDecrypt_1fips(
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPublicEncrypt_1fips___3BJ_3BJLcom_wolfssl_wolfcrypt_Rsa_2Lcom_wolfssl_wolfcrypt_Rng_2(
JNIEnv* env, jclass class, jbyteArray in_object, jlong inLen,
jbyteArray out_object, jlong outLen, jobject rsa_object, jobject rng_object)
{
jint ret = NOT_COMPILED_IN;
#if defined(HAVE_FIPS) && !defined(NO_RSA)
byte* in = getByteArray(env, in_object);
byte* out = getByteArray(env, out_object);
RsaKey* key = (RsaKey*) getNativeStruct(env, rsa_object);
RNG* rng = (RNG*) getNativeStruct(env, rsa_object);
/**
* Providing an rng is optional. RNG_GenerateBlock will return BAD_FUNC_ARG
* on a NULL rng if an RNG is needed by RsaPad.
*/
ret = (!in || !out || !key)
? BAD_FUNC_ARG
: RsaPublicEncrypt_fips(in, inLen, out, outLen, key, rng);
LogStr(
"RsaPublicEncrypt_fips(in, inLen, out, outLen, key=%p, rng=%p) = %d\n",
key, rng, ret);
LogStr("in:\n");
LogHex((byte*) in, inLen);
LogStr("out:\n");
LogHex((byte*) out, outLen);
releaseByteArray(env, in_object, in, 1);
releaseByteArray(env, out_object, out, ret < 0);
#endif
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPrivateDecrypt_1fips__Ljava_nio_ByteBuffer_2JLjava_nio_ByteBuffer_2JLcom_wolfssl_wolfcrypt_Rsa_2(
JNIEnv* env, jclass class, jobject in_object, jlong inLen,
jobject out_object, jlong outLen, jobject rsa_object)
{
@ -1878,6 +2047,37 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPrivateDecrypt_1fips(
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_RsaPrivateDecrypt_1fips___3BJ_3BJLcom_wolfssl_wolfcrypt_Rsa_2(
JNIEnv* env, jclass class, jbyteArray in_object, jlong inLen,
jbyteArray out_object, jlong outLen, jobject rsa_object)
{
jint ret = NOT_COMPILED_IN;
#if defined(HAVE_FIPS) && !defined(NO_RSA)
byte* in = getByteArray(env, in_object);
byte* out = getByteArray(env, out_object);
RsaKey* key = (RsaKey*) getNativeStruct(env, rsa_object);
ret = (!in || !out || !key)
? BAD_FUNC_ARG
: RsaPrivateDecrypt_fips(in, inLen, out, outLen, key);
LogStr("RsaPrivateDecrypt_fips(in, inLen, out, outLen, key=%p) = %d\n", key,
ret);
LogStr("in:\n");
LogHex((byte*) in, inLen);
LogStr("out:\n");
LogHex((byte*) out, outLen);
releaseByteArray(env, in_object, in, 1);
releaseByteArray(env, out_object, out, ret < 0);
#endif
return ret;
}
/*
* wolfCrypt FIPS API - Message digest MD5 Service
*/
@ -1902,7 +2102,7 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_InitMd5_1fips(
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_Md5Update_1fips(
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_Md5Update__Lcom_wolfssl_wolfcrypt_Md5_2Ljava_nio_ByteBuffer_2J(
JNIEnv* env, jclass class, jobject md5_object, jobject data_buffer,
jlong len)
{
@ -1928,7 +2128,36 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_Md5Update_1fips(
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_Md5Final_1fips(
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_Md5Update__Lcom_wolfssl_wolfcrypt_Md5_2_3BJ(
JNIEnv* env, jclass class, jobject md5_object, jbyteArray data_buffer,
jlong len)
{
jint ret = NOT_COMPILED_IN;
#if defined(HAVE_FIPS) && !defined(NO_MD5)
Md5* md5 = (Md5*) getNativeStruct(env, md5_object);
byte* data = getByteArray(env, data_buffer);
if (!md5 || !data)
ret = BAD_FUNC_ARG;
else {
Md5Update(md5, data, len);
ret = com_wolfssl_wolfcrypt_WolfCrypt_SUCCESS;
}
LogStr("Md5Update_fips(md5=%p, data, len) = %d\n", md5, ret);
LogStr("data:\n");
LogHex(data, len);
releaseByteArray(env, data_buffer, data, 1);
#endif
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_Md5Final__Lcom_wolfssl_wolfcrypt_Md5_2Ljava_nio_ByteBuffer_2(
JNIEnv* env, jclass class, jobject md5_object, jobject hash_buffer)
{
jint ret = NOT_COMPILED_IN;
@ -1953,6 +2182,34 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_Md5Final_1fips(
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_Md5Final__Lcom_wolfssl_wolfcrypt_Md5_2_3B(
JNIEnv* env, jclass class, jobject md5_object, jbyteArray hash_buffer)
{
jint ret = NOT_COMPILED_IN;
#if defined(HAVE_FIPS) && !defined(NO_MD5)
Md5* md5 = (Md5*) getNativeStruct(env, md5_object);
byte* hash = getByteArray(env, hash_buffer);
if (!md5 || !hash)
ret = BAD_FUNC_ARG;
else {
Md5Final(md5, hash);
ret = com_wolfssl_wolfcrypt_WolfCrypt_SUCCESS;
}
LogStr("Md5Final_fips(md5=%p, hash) = %d\n", md5, ret);
LogStr("hash:\n");
LogHex(hash, SHA_DIGEST_SIZE);
releaseByteArray(env, hash_buffer, hash, ret);
#endif
return ret;
}
/*
* wolfCrypt FIPS API - Key agreement Service
*/
@ -1983,7 +2240,7 @@ JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Fips_FreeDhKey(
#endif
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhGenerateKeyPair(
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhGenerateKeyPair__Lcom_wolfssl_wolfcrypt_Dh_2Lcom_wolfssl_wolfcrypt_Rng_2Ljava_nio_ByteBuffer_2_3JLjava_nio_ByteBuffer_2_3J(
JNIEnv* env, jclass class, jobject key_object, jobject rng_object,
jobject priv_buffer, jlongArray privSz, jobject pub_buffer,
jlongArray pubSz)
@ -2021,7 +2278,47 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhGenerateKeyPair(
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_1DhAgree(
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhGenerateKeyPair__Lcom_wolfssl_wolfcrypt_Dh_2Lcom_wolfssl_wolfcrypt_Rng_2_3B_3J_3B_3J(
JNIEnv* env, jclass class, jobject key_object, jobject rng_object,
jbyteArray priv_buffer, jlongArray privSz, jbyteArray pub_buffer,
jlongArray pubSz)
{
jint ret = NOT_COMPILED_IN;
#if defined(HAVE_FIPS) && !defined(NO_DH)
DhKey* key = (DhKey*) getNativeStruct(env, key_object);
RNG* rng = (RNG*) getNativeStruct(env, rng_object);
byte* priv = getByteArray(env, priv_buffer);
byte* pub = getByteArray(env, pub_buffer);
word32 tmpPrivSz, tmpPubSz;
(*env)->GetLongArrayRegion(env, privSz, 0, 1, (jlong*) &tmpPrivSz);
(*env)->GetLongArrayRegion(env, pubSz, 0, 1, (jlong*) &tmpPubSz);
ret = (!key || !rng || !priv || !pub)
? BAD_FUNC_ARG
: DhGenerateKeyPair(key, rng, priv, &tmpPrivSz, pub, &tmpPubSz);
(*env)->SetLongArrayRegion(env, privSz, 0, 1, (jlong*) &tmpPrivSz);
(*env)->SetLongArrayRegion(env, pubSz, 0, 1, (jlong*) &tmpPubSz);
LogStr("DhGenerateKeyPair(key=%p, rng=%p, priv, privSz, pub, pubSz) = %d\n",
key, rng, ret);
LogStr("priv:\n");
LogHex(priv, tmpPrivSz);
LogStr("pub:\n");
LogHex(pub, tmpPubSz);
releaseByteArray(env, priv_buffer, priv, ret < 0);
releaseByteArray(env, pub_buffer, pub, ret < 0);
#endif
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhAgree__Lcom_wolfssl_wolfcrypt_Dh_2Ljava_nio_ByteBuffer_2_3JLjava_nio_ByteBuffer_2JLjava_nio_ByteBuffer_2J(
JNIEnv* env, jclass class, jobject key_object, jobject agree_buffer,
jlongArray agreeSz, jobject priv_buffer, jlong privSz, jobject pub_buffer,
jlong pubSz)
@ -2059,7 +2356,48 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_1DhAgree(
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhKeyDecode(
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhAgree__Lcom_wolfssl_wolfcrypt_Dh_2_3B_3J_3BJ_3BJ(
JNIEnv* env, jclass class, jobject key_object, jbyteArray agree_buffer,
jlongArray agreeSz, jbyteArray priv_buffer, jlong privSz, jbyteArray pub_buffer,
jlong pubSz)
{
jint ret = NOT_COMPILED_IN;
#if defined(HAVE_FIPS) && !defined(NO_DH)
DhKey* key = (DhKey*) getNativeStruct(env, key_object);
byte* agree = getByteArray(env, agree_buffer);
byte* priv = getByteArray(env, priv_buffer);
byte* pub = getByteArray(env, pub_buffer);
word32 tmpAgreeSz;
(*env)->GetLongArrayRegion(env, agreeSz, 0, 1, (jlong*) &tmpAgreeSz);
ret = (!key || !agree || !priv || !pub)
? BAD_FUNC_ARG
: DhAgree(key, agree, &tmpAgreeSz, priv, privSz, pub, pubSz);
(*env)->SetLongArrayRegion(env, agreeSz, 0, 1, (jlong*) &tmpAgreeSz);
LogStr("DhAgree(key=%p, agree, agreeSz, priv, privSz, pub, pubSz) = %d\n",
key, ret);
LogStr("agree:\n");
LogHex(agree, tmpAgreeSz);
LogStr("priv:\n");
LogHex(priv, privSz);
LogStr("pub:\n");
LogHex(pub, pubSz);
releaseByteArray(env, agree_buffer, agree, ret < 0);
releaseByteArray(env, priv_buffer, priv, 1);
releaseByteArray(env, pub_buffer, pub, 1);
#endif
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhKeyDecode__Ljava_nio_ByteBuffer_2_3JLcom_wolfssl_wolfcrypt_Dh_2J(
JNIEnv* env, jclass class, jobject input_buffer, jlongArray inOutIdx,
jobject key_object, jlong inSz)
{
@ -2089,7 +2427,38 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhKeyDecode(
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhSetKey(
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhKeyDecode___3B_3JLcom_wolfssl_wolfcrypt_Dh_2J(
JNIEnv* env, jclass class, jbyteArray input_buffer, jlongArray inOutIdx,
jobject key_object, jlong inSz)
{
jint ret = NOT_COMPILED_IN;
#if defined(HAVE_FIPS) && !defined(NO_DH)
DhKey* key = (DhKey*) getNativeStruct(env, key_object);
byte* input = getByteArray(env, input_buffer);
word32 tmpInOutIdx;
(*env)->GetLongArrayRegion(env, inOutIdx, 0, 1, (jlong*) &tmpInOutIdx);
ret = (!key || !input)
? BAD_FUNC_ARG
: DhKeyDecode(input, &tmpInOutIdx, key, inSz);
(*env)->SetLongArrayRegion(env, inOutIdx, 0, 1, (jlong*) &tmpInOutIdx);
LogStr("DhKeyDecode(input, &inOutIdx, key=%p, inSz) = %d\n", key, ret);
LogStr("input:\n");
LogHex(input, inSz);
releaseByteArray(env, input_buffer, input, 1);
#endif
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhSetKey__Lcom_wolfssl_wolfcrypt_Dh_2Ljava_nio_ByteBuffer_2JLjava_nio_ByteBuffer_2J(
JNIEnv* env, jclass class, jobject key_object, jobject p_buffer, jlong pSz,
jobject g_buffer, jlong gSz)
{
@ -2117,7 +2486,37 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhSetKey(
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhParamsLoad(
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhSetKey__Lcom_wolfssl_wolfcrypt_Dh_2_3BJ_3BJ(
JNIEnv* env, jclass class, jobject key_object, jbyteArray p_buffer, jlong pSz,
jbyteArray g_buffer, jlong gSz)
{
jint ret = NOT_COMPILED_IN;
#if defined(HAVE_FIPS) && !defined(NO_DH)
DhKey* key = (DhKey*) getNativeStruct(env, key_object);
byte* p = getByteArray(env, p_buffer);
byte* g = getByteArray(env, g_buffer);
ret = (!key || !p || !g)
? BAD_FUNC_ARG
: DhSetKey(key, p, pSz, g, gSz);
LogStr("DhSetKey(key=%p, p, pSz, g, gSz) = %d\n", key, ret);
LogStr("p:\n");
LogHex(p, pSz);
LogStr("g:\n");
LogHex(g, gSz);
releaseByteArray(env, p_buffer, p, 1);
releaseByteArray(env, g_buffer, g, 1);
#endif
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhParamsLoad__Ljava_nio_ByteBuffer_2JLjava_nio_ByteBuffer_2_3JLjava_nio_ByteBuffer_2_3J(
JNIEnv* env, jclass class, jobject input_buffer, jlong inSz,
jobject p_buffer, jlongArray pInOutSz, jobject g_buffer,
jlongArray gInOutSz)
@ -2126,7 +2525,7 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhParamsLoad(
#if defined(HAVE_FIPS) && !defined(NO_DH)
byte* input = getDirectBufferAddress(env, p_buffer);
byte* input = getDirectBufferAddress(env, input_buffer);
byte* p = getDirectBufferAddress(env, p_buffer);
byte* g = getDirectBufferAddress(env, g_buffer);
word32 tmpPInOutSz, tmpGInOutSz;
@ -2155,6 +2554,47 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhParamsLoad(
return ret;
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_DhParamsLoad___3BJ_3B_3J_3B_3J(
JNIEnv* env, jclass class, jbyteArray input_buffer, jlong inSz,
jbyteArray p_buffer, jlongArray pInOutSz, jbyteArray g_buffer,
jlongArray gInOutSz)
{
jint ret = NOT_COMPILED_IN;
#if defined(HAVE_FIPS) && !defined(NO_DH)
byte* input = getByteArray(env, input_buffer);
byte* p = getByteArray(env, p_buffer);
byte* g = getByteArray(env, g_buffer);
word32 tmpPInOutSz, tmpGInOutSz;
(*env)->GetLongArrayRegion(env, pInOutSz, 0, 1, (jlong*) &tmpPInOutSz);
(*env)->GetLongArrayRegion(env, gInOutSz, 0, 1, (jlong*) &tmpGInOutSz);
ret = (!input || !p || !g)
? BAD_FUNC_ARG
: DhParamsLoad(input, inSz, p, &tmpPInOutSz, g, &tmpGInOutSz);
(*env)->SetLongArrayRegion(env, pInOutSz, 0, 1, (jlong*) &tmpPInOutSz);
(*env)->SetLongArrayRegion(env, gInOutSz, 0, 1, (jlong*) &tmpGInOutSz);
LogStr("DhParamsLoad(input, inSz, p, &pInOutSz, g, &gInOutSz) = %d\n", ret);
LogStr("input:\n");
LogHex(input, inSz);
LogStr("p:\n");
LogHex(p, tmpPInOutSz);
LogStr("g:\n");
LogHex(g, tmpGInOutSz);
releaseByteArray(env, input_buffer, input, 1);
releaseByteArray(env, p_buffer, p, 1);
releaseByteArray(env, g_buffer, g, 1);
#endif
return ret;
}
JNIEXPORT int JNICALL Java_com_wolfssl_wolfcrypt_Fips_ecc_1init(
JNIEnv *env, jclass class, jobject key_object)
{
@ -2327,7 +2767,7 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_ecc_1import_1x963___3BJLc
LogStr("in:\n");
LogHex(in, inLen);
releaseByteArray(env, in_buffer, in, ret);
releaseByteArray(env, in_buffer, in, 1);
#endif

View File

@ -85,8 +85,7 @@ byte* getDirectBufferAddress(JNIEnv* env, jobject buffer)
word32 getDirectBufferLimit(JNIEnv* env, jobject buffer)
{
jclass class = (*env)->GetObjectClass(env, buffer);
jmethodID method = (*env)->GetMethodID(env, class,
"limit", "()I");
jmethodID method = (*env)->GetMethodID(env, class, "limit", "()I");
return (word32) (*env)->CallIntMethod(env, buffer, method);
}
@ -94,8 +93,8 @@ word32 getDirectBufferLimit(JNIEnv* env, jobject buffer)
void setDirectBufferLimit(JNIEnv* env, jobject buffer, jint limit)
{
jclass class = (*env)->GetObjectClass(env, buffer);
jmethodID method = (*env)->GetMethodID(env, class,
"limit", "(I)Ljava/nio/Buffer;");
jmethodID method = (*env)->GetMethodID(env, class, "limit",
"(I)Ljava/nio/Buffer;");
(*env)->CallObjectMethod(env, buffer, method, limit);
}
@ -105,11 +104,11 @@ byte* getByteArray(JNIEnv* env, jbyteArray array)
return array ? (byte*)(*env)->GetByteArrayElements(env, array, NULL) : NULL;
}
void releaseByteArray(JNIEnv* env, jbyteArray array, byte* elements, jint ret)
void releaseByteArray(JNIEnv* env, jbyteArray array, byte* elements, jint abort)
{
if (elements)
(*env)->ReleaseByteArrayElements(env, array, (jbyte*) elements,
ret ? JNI_ABORT : 0);
abort ? JNI_ABORT : 0);
}
word32 getByteArrayLength(JNIEnv* env, jbyteArray array)

View File

@ -28,6 +28,7 @@
#endif
#include <wolfssl/wolfcrypt/rsa.h>
#include <wolfssl/wolfcrypt/error-crypt.h>
/* #define WOLFCRYPT_JNI_DEBUG_ON */
#include <wolfcrypt_jni_debug.h>
@ -53,7 +54,7 @@ JNIEXPORT jlong JNICALL Java_com_wolfssl_wolfcrypt_Rsa_mallocNativeStruct(
return ret;
}
JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Rsa_decodeRawPublicKey(
JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Rsa_decodeRawPublicKey__Ljava_nio_ByteBuffer_2JLjava_nio_ByteBuffer_2J(
JNIEnv* env, jobject this, jobject n_object, jlong nSize, jobject e_object,
jlong eSize)
{
@ -73,7 +74,31 @@ JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Rsa_decodeRawPublicKey(
#endif
}
JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Rsa_exportRawPublicKey(
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Rsa_decodeRawPublicKey___3BJ_3BJ(
JNIEnv* env, jobject this, jbyteArray n_object, jlong nSize,
jbyteArray e_object, jlong eSize)
{
jint ret = NOT_COMPILED_IN;
#ifndef NO_RSA
RsaKey* key = (RsaKey*) getNativeStruct(env, this);
byte* n = getByteArray(env, n_object);
byte* e = getByteArray(env, e_object);
ret = (!key || !n || !e)
? BAD_FUNC_ARG
: wc_RsaPublicKeyDecodeRaw(n, nSize, e, eSize, key);
releaseByteArray(env, n_object, n, ret);
releaseByteArray(env, e_object, e, ret);
#endif
return ret;
}
JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Rsa_exportRawPublicKey__Ljava_nio_ByteBuffer_2Ljava_nio_ByteBuffer_2(
JNIEnv* env, jobject this, jobject n_object, jobject e_object)
{
#ifdef NO_RSA
@ -98,6 +123,37 @@ JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Rsa_exportRawPublicKey(
#endif
}
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Rsa_exportRawPublicKey___3B_3B(
JNIEnv* env, jobject this, jbyteArray n_object, jlongArray nSize,
jbyteArray e_object, jlongArray eSize)
{
jint ret = NOT_COMPILED_IN;
#ifndef NO_RSA
RsaKey* key = (RsaKey*) getNativeStruct(env, this);
byte* n = getByteArray(env, n_object);
byte* e = getByteArray(env, e_object);
word32 nSz;
word32 eSz;
(*env)->GetLongArrayRegion(env, nSize, 0, 1, (jlong*) &nSz);
(*env)->GetLongArrayRegion(env, eSize, 0, 1, (jlong*) &eSz);
ret = (!key || !n || !e)
? BAD_FUNC_ARG
: RsaFlattenPublicKey(key, e, &eSz, n, &nSz);
(*env)->SetLongArrayRegion(env, nSize, 0, 1, (jlong*) &nSz);
(*env)->SetLongArrayRegion(env, eSize, 0, 1, (jlong*) &eSz);
releaseByteArray(env, n_object, n, ret);
releaseByteArray(env, e_object, e, ret);
#endif
return ret;
}
JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Rsa_makeKey(
JNIEnv *env, jobject this, jint size, jlong e, jobject rng_object)
{

View File

@ -36,5 +36,8 @@ public class Asn extends WolfObject {
public static native void encodeSignature(ByteBuffer encoded,
ByteBuffer hash, long hashSize, int hashOID);
public static native long encodeSignature(byte[] encoded,
byte[] hash, long hashSize, int hashOID);
public static native int getCTC_HashOID(int type);
}

View File

@ -735,6 +735,27 @@ public class Fips extends WolfObject {
public static native int RsaSSL_Sign_fips(ByteBuffer in, long inLen,
ByteBuffer out, long outLen, Rsa key, Rng rng);
/**
* Performs Rsa Signing Operation.
*
* @param in
* the input buffer.
* @param inLen
* the input length.
* @param out
* the output buffer.
* @param outLen
* the output length.
* @param key
* the Rsa object.
* @param rng
* the random source for padding.
*
* @return 0 on success, {@literal <} 0 on error.
*/
public static native int RsaSSL_Sign_fips(byte[] in, long inLen,
byte[] out, long outLen, Rsa key, Rng rng);
/**
* Performs Rsa Signature Verification.
*
@ -753,6 +774,25 @@ public class Fips extends WolfObject {
*/
public static native int RsaSSL_Verify_fips(ByteBuffer in, long inLen,
ByteBuffer out, long outLen, Rsa key);
/**
* Performs Rsa Signature Verification.
*
* @param in
* the input buffer.
* @param inLen
* the input length.
* @param out
* the output buffer.
* @param outLen
* the output length.
* @param key
* the Rsa object.
*
* @return 0 on success, {@literal <} 0 on error.
*/
public static native int RsaSSL_Verify_fips(byte[] in, long inLen,
byte[] out, long outLen, Rsa key);
/**
* Retrieves Rsa Output Size.
@ -782,6 +822,23 @@ public class Fips extends WolfObject {
public static native int RsaPrivateKeyDecode_fips(ByteBuffer input,
long[] inOutIdx, Rsa key, long inSz);
/**
* Decodes Rsa Private Key from buffer.
*
* @param input
* the input buffer.
* @param inOutIdx
* the key's starting index in the input.
* @param key
* the Rsa object.
* @param inSz
* the input length.
*
* @return 0 on success, {@literal <} 0 on error.
*/
public static native int RsaPrivateKeyDecode_fips(byte[] input,
long[] inOutIdx, Rsa key, long inSz);
/**
* Decodes Rsa Public Key from buffer.
*
@ -798,6 +855,23 @@ public class Fips extends WolfObject {
*/
public static native int RsaPublicKeyDecode_fips(ByteBuffer input,
long[] inOutIdx, Rsa key, long inSz);
/**
* Decodes Rsa Public Key from buffer.
*
* @param input
* the input buffer.
* @param inOutIdx
* the key's starting index in the input.
* @param key
* the Rsa object.
* @param inSz
* the input length.
*
* @return 0 on success, {@literal <} 0 on error.
*/
public static native int RsaPublicKeyDecode_fips(byte[] input,
long[] inOutIdx, Rsa key, long inSz);
/*
* wolfCrypt FIPS API - Message digest Service
@ -1114,6 +1188,27 @@ public class Fips extends WolfObject {
*/
public static native int RsaPublicEncrypt_fips(ByteBuffer in, long inLen,
ByteBuffer out, long outLen, Rsa key, Rng rng);
/**
* Performs Rsa Public Encryption.
*
* @param in
* the input buffer.
* @param inLen
* the input length.
* @param out
* the output buffer.
* @param outLen
* the output length.
* @param key
* the Rsa object.
* @param rng
* the random source for padding.
*
* @return 0 on success, {@literal <} 0 on error.
*/
public static native int RsaPublicEncrypt_fips(byte[] in, long inLen,
byte[] out, long outLen, Rsa key, Rng rng);
/**
* Performs Rsa Private Decryption.
@ -1133,6 +1228,25 @@ public class Fips extends WolfObject {
*/
public static native int RsaPrivateDecrypt_fips(ByteBuffer in, long inLen,
ByteBuffer out, long outLen, Rsa key);
/**
* Performs Rsa Private Decryption.
*
* @param in
* the input buffer.
* @param inLen
* the input length.
* @param out
* the output buffer.
* @param outLen
* the output length.
* @param key
* the Rsa object.
*
* @return 0 on success, {@literal <} 0 on error.
*/
public static native int RsaPrivateDecrypt_fips(byte[] in, long inLen,
byte[] out, long outLen, Rsa key);
/*
* wolfCrypt FIPS API - Message digest MD5 Service
@ -1162,6 +1276,20 @@ public class Fips extends WolfObject {
*/
public static native int Md5Update(Md5 md5, ByteBuffer data, long len);
/**
* Updates Md5 object with data.
*
* @param md5
* the Md5 object.
* @param data
* the input buffer.
* @param len
* the input length.
*
* @return 0 on success, {@literal <} 0 on error.
*/
public static native int Md5Update(Md5 md5, byte[] data, long len);
/**
* Outputs Md5 digest to hash.
*
@ -1173,6 +1301,18 @@ public class Fips extends WolfObject {
* @return 0 on success, {@literal <} 0 on error.
*/
public static native int Md5Final(Md5 md5, ByteBuffer hash);
/**
* Outputs Md5 digest to hash.
*
* @param md5
* the Md5 object.
* @param hash
* the output buffer.
*
* @return 0 on success, {@literal <} 0 on error.
*/
public static native int Md5Final(Md5 md5, byte[] hash);
/*
* wolfCrypt FIPS API - Key agreement Service
@ -1216,6 +1356,28 @@ public class Fips extends WolfObject {
*/
public static native int DhGenerateKeyPair(Dh key, Rng rng,
ByteBuffer priv, long[] privSz, ByteBuffer pub, long[] pubSz);
/**
* Generates the public part pub of size pubSz, private part priv of size
* privSz using rng for Dh key.
*
* @param key
* the Dh object.
* @param rng
* the random source.
* @param priv
* the private part buffer.
* @param privSz
* the private part length.
* @param pub
* the public part buffer.
* @param pubSz
* the the public part length.
*
* @return 0 on success, {@literal <} 0 on error.
*/
public static native int DhGenerateKeyPair(Dh key, Rng rng,
byte[] priv, long[] privSz, byte[] pub, long[] pubSz);
/**
* Creates the agreement agree of size agreeSz using Dh key private priv of
@ -1241,6 +1403,30 @@ public class Fips extends WolfObject {
public static native int DhAgree(Dh key, ByteBuffer agree, long[] agreeSz,
ByteBuffer priv, long privSz, ByteBuffer otherPub, long pubSz);
/**
* Creates the agreement agree of size agreeSz using Dh key private priv of
* size privSz and peers public key otherPub of size pubSz.
*
* @param key
* the Dh object.
* @param agree
* the agree buffer.
* @param agreeSz
* the agree length.
* @param priv
* the private part buffer.
* @param privSz
* the private part length.
* @param otherPub
* the peer's public part buffer.
* @param pubSz
* the the public part length.
*
* @return 0 on success, {@literal <} 0 on error.
*/
public static native int DhAgree(Dh key, byte[] agree, long[] agreeSz,
byte[] priv, long privSz, byte[] otherPub, long pubSz);
/**
* Decodes the DER group parameters from buffer input starting at index
* inOutIdx of size inSz into Dh key.
@ -1258,6 +1444,24 @@ public class Fips extends WolfObject {
*/
public static native int DhKeyDecode(ByteBuffer input, long[] inOutIdx,
Dh key, long inSz);
/**
* Decodes the DER group parameters from buffer input starting at index
* inOutIdx of size inSz into Dh key.
*
* @param input
* the parameters buffer.
* @param inOutIdx
* the parameters' starting index.
* @param key
* the Dh object.
* @param inSz
* the parameters buffer length. (not from inOutIdx)
*
* @return 0 on success, {@literal <} 0 on error.
*/
public static native int DhKeyDecode(byte[] input, long[] inOutIdx,
Dh key, long inSz);
/**
* Sets the group parameters for the Dh key from the unsigned binary inputs
@ -1278,6 +1482,26 @@ public class Fips extends WolfObject {
*/
public static native int DhSetKey(Dh key, ByteBuffer p, long pSz,
ByteBuffer g, long gSz);
/**
* Sets the group parameters for the Dh key from the unsigned binary inputs
* p of size pSz and g of size gSz.
*
* @param key
* the Dh object.
* @param p
* the prime buffer.
* @param pSz
* the prime length.
* @param g
* the primitive root molulo p buffer.
* @param gSz
* the primitive root modulo p length.
*
* @return 0 on success, {@literal <} 0 on error.
*/
public static native int DhSetKey(Dh key, byte[] p, long pSz,
byte[] g, long gSz);
/**
* Loads the Dh group parameters.
@ -1300,6 +1524,27 @@ public class Fips extends WolfObject {
public static native int DhParamsLoad(ByteBuffer input, long inSz,
ByteBuffer p, long[] pInOutSz, ByteBuffer g, long[] gInOutSz);
/**
* Loads the Dh group parameters.
*
* @param input
* the parameters buffer.
* @param inSz
* the parameters size.
* @param p
* the prime buffer.
* @param pInOutSz
* the prime length.
* @param g
* the primitive root molulo p buffer.
* @param gInOutSz
* the primitive root modulo p length.
*
* @return 0 on success, {@literal <} 0 on error.
*/
public static native int DhParamsLoad(byte[] input, long inSz,
byte[] p, long[] pInOutSz, byte[] g, long[] gInOutSz);
/**
* Initializes Ecc object for use. ecc_free must be called for resources
* deallocation.

View File

@ -36,7 +36,13 @@ public class Rsa extends NativeStruct {
public native void decodeRawPublicKey(ByteBuffer n, long nSize,
ByteBuffer e, long eSize);
public native int decodeRawPublicKey(byte[] n, long nSize, byte[] e,
long eSize);
public native void exportRawPublicKey(ByteBuffer n, ByteBuffer e);
public native int exportRawPublicKey(byte[] n, long[] nSize, byte[] e,
long[] eSize);
public native void makeKey(int size, long e, Rng rng);
}

View File

@ -58,7 +58,7 @@ public class RsaFipsTest {
}
@Test
public void VerifyShouldMatch() {
public void VerifyShouldMatchUsingByteBuffer() {
String[] modulus = new String[] {
"aff5f9e2e2622320d44dbf54f2274a0f96fa7d70a63ddaa563f4881143112bb3c36fe65ba0c9ad99d6fb6e53cb08e3938ee415b3a8cb7f9602f2154fab83dd160fa6f509ba2c41295af9eea8787d333e961461447fc60b3c61616ef5b94e822114e6fad44d1f2c476bc23bc03609e2e70a483d826409fdb7c50a91269a773976ef137e7fa477c3951e8fbcb48f2378aa5e430e8c60b481beeb63df9abe10c7ccf266e394fbd925e8725e4675fb6ad895caed4b31d751c8712533e1c42ebefe9166e1aa20631521858c7548c61626ede105f2812632bac96eb769c9be560beef4200b86409727a5a61d1cc5831785ba4d42f02dd298a56bbbd6c479ce724d5bb5",
"aa9100d03c11b45942ada8e3b23912bc1350522e970f0d0e3bbf63f11c69c6de8d815f02a2c16c7cbe9bf85f6df59ede3f495274b23331a71e8e8ac8b2b877b64ffeda0ffa0f28b71f4fcf35454eeb8afa3f2033e0c5c0a88c647cc9f95f072837d243f46cf37dbf5c8a871daf2b28c66615a53733b1a04cf9f5356cdf7b549971bc978bfdd0e5b383ade039978f9ecf2d2949391ce386acddd0a5d009b6e7cd79af069d8ec123217adf541ca7f6d6dd67180b94f34b985501a169ace495e6eb2ae1955556de5e589307f9f6d53bcc82ff67eb0cab511490903cf1ec8fd00242400a02335542073f7c074b5ef8907ef460b065b8c2a404fed15ba84cd9f8103b",
@ -110,4 +110,56 @@ public class RsaFipsTest {
assertEquals(WolfCrypt.SUCCESS, Fips.FreeRsaKey_fips(key));
}
}
@Test
public void VerifyShouldMatchUsingByteArray() {
String[] modulus = new String[] {
"aff5f9e2e2622320d44dbf54f2274a0f96fa7d70a63ddaa563f4881143112bb3c36fe65ba0c9ad99d6fb6e53cb08e3938ee415b3a8cb7f9602f2154fab83dd160fa6f509ba2c41295af9eea8787d333e961461447fc60b3c61616ef5b94e822114e6fad44d1f2c476bc23bc03609e2e70a483d826409fdb7c50a91269a773976ef137e7fa477c3951e8fbcb48f2378aa5e430e8c60b481beeb63df9abe10c7ccf266e394fbd925e8725e4675fb6ad895caed4b31d751c8712533e1c42ebefe9166e1aa20631521858c7548c61626ede105f2812632bac96eb769c9be560beef4200b86409727a5a61d1cc5831785ba4d42f02dd298a56bbbd6c479ce724d5bb5",
"aa9100d03c11b45942ada8e3b23912bc1350522e970f0d0e3bbf63f11c69c6de8d815f02a2c16c7cbe9bf85f6df59ede3f495274b23331a71e8e8ac8b2b877b64ffeda0ffa0f28b71f4fcf35454eeb8afa3f2033e0c5c0a88c647cc9f95f072837d243f46cf37dbf5c8a871daf2b28c66615a53733b1a04cf9f5356cdf7b549971bc978bfdd0e5b383ade039978f9ecf2d2949391ce386acddd0a5d009b6e7cd79af069d8ec123217adf541ca7f6d6dd67180b94f34b985501a169ace495e6eb2ae1955556de5e589307f9f6d53bcc82ff67eb0cab511490903cf1ec8fd00242400a02335542073f7c074b5ef8907ef460b065b8c2a404fed15ba84cd9f8103b",
"a40bf41a33f394ef10efc0e1f26a7c20f8929b43c4cfa4c8718152af3418d2494e1f88173608bc6c6d8946e79a0e3732f5aee128ea29e86f71d56b25971068d8b87b567cd71f426788936560977e9492b66b522854b44206107152b1b498b21fd8e1f02b8c9f6a063e8fb9967bd22c3706f2d68613c0ed6cd5524460210ffc4a4d18b88b7c03ce5315e66833ad1f6868d8851613ff635811a119917bc5c84e6b94659f3ef3b972d3d18c26be6d57ce9a2f5260fa6860dbca9f7f61ab9b2f998abea8c495e314f5fa1d13d0a31e175d21f7d84ab879a31a4b66f77f589e267890af0b5e625e68c6525461e60d2a70febdcfcb2d7870370f5bac926581a262069f", };
String[] exponent = new String[] {
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d0ee61",
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e92e95",
"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004fa87f", };
String[] messages = new String[] {
"e6fd961dc2977a9c08be5c31d8de89450945a53d79299ea2a1edde7f6da0c50b4ac75688805c306bc216c0bd03ebb6c18cd4b5d74cd04fa06f2b3063320099b0f5fd11439166572aed5c9a2bcc60ec60e913f524463fe433c11bab0ce8cb6c9a0e272e149fbdd522b0195141da441568498acbec108046a1bf46b842380a2512",
"e9ebe4ea39974ea1730cc4072d5c9d649facf7adfa3baca8fba18251bf55a27dd9724cbda2bbc885d0dca08d4af30c783b4eaeb465767fa1b96d0af52435d85fab912b6aba10efa5b946ed01e15d427a4ecd0ff9556773791798b66956ecc75288d1e9ba2a9ea94857d3132999a225b1ffaf844670156e7a3ea9f077fe8259a0",
"b486fb4b03d8912cb4019db651ba040612a6f26b9932296cdfc1990c6f06314cd2b0f6f24a4d5289c368aea906f5437830f02c716240c064bbe120be83420c0ba9ecfbb970656a1f655474be94e5a3c6fb6f06dc3f55831a9e2a6f5725185ca923823229dde882f6830b167d6352cdf75d6da63297381a9572e2af5fbc4eca2f", };
String[] signatures = new String[] {
"22616f85fe79f912d6038613dca4a1500fda73272782843c5d95de1b02325f57f65bb3b2f07e38986afab6864de1f2ae5ae57a609513a4d642c3d656b6830c226be3967dcb65d7f9c4ca9d113ceede7a418eaf0a1e8b68454c38561a448a07cbebefd77c14117bfca6fa67d7b2872b92a35d628ccdba7d8069af8ea1602e9ad1ae4939a9e8292f587fda580d023747c2a11d023d9dde963a99bedef8bbe26b1de43a58ca5bcfc6045bb7d427b132b8540280c5941c8dba59a61afbfdffd8872ecbc57fe281a577648f0764b3a579e38c7ba33bb88e25c60096d5fd7d33fa82bcc87c69a56c34440a0c0917da75c2d4e7b7abea67b74d35cd101ff41d83e3ad3e",
"479501e1d5e5320ce739266ee5b8789773fae310abac6acb312184af13884fce6f3771ce5c5d649320d62d35ac0de49f85b278a164948a8c9b733ab10779f9ae929e227d5d80915b1c49018e72498b551ae7321f3f959f458bac36c8e06ce0273ec74552f2dc9b26b7a7094ea7fe880f6af8a0b205a44dd7cc67d08d8bb4f500e22f1634d4330c1e7c0b27b1dcde1853c743c90de1b3b196d420b45368d06071cb2dba1e8316b9ca21bd9ba18d4f3ee753fb66b5c8517226aee9d0d12fa7d59600078db95b16ac9f74ad41660d93d0f18391a35fe81e4a2b6be37b382c3be622db2a1f4c3bf165ae5f6783699410a9be019546f98b5239de00863d43ec54896d",
"03ff375c15fd574a7a708974ab7b26a8ee97527fb3b558313d036313d57f13bfe591367ca0b623a01dc72295e34b737e5a4034024d440dda66fc8288f3ef0e92a8bf95949ef2b95e4ed937c79bfbd865c7f0d69d3eee64281945f10a1f1fceed9372dc85b4ae33252aad7935cb73ab486211bb55366d68a8808ec92c2b06e35fe0e7e85f93d853a997ea9eca825e88ef6849c2e03c16c72f0f41e5d2820e8e2c686dd9c11fb59d6b0d93d350691a7ae0eb12115148279a7903d8d8c0ca4396c66c8dda41abb458b61064ad05672164a68c9d7c8e0323155a58cd6566430645dea7737e1ee8b5edc378df6b62e308bd531205f4c03715015e4043419a687c702e", };
for (int i = 0; i < messages.length; i++) {
Rsa key = new Rsa();
byte[] n = Util.h2b(modulus[i]);
byte[] e = Util.h2b(exponent[i]);
byte[] message = Util.h2b(messages[i]);
byte[] signature = Util.h2b(signatures[i]);
byte[] encoded = new byte[Asn.MAX_ENCODED_SIG_SIZE];
byte[] hash = new byte[Sha256.DIGEST_SIZE];
byte[] result = new byte[Asn.MAX_ENCODED_SIG_SIZE];
assertEquals(WolfCrypt.SUCCESS, Fips.InitRsaKey_fips(key, null));
key.decodeRawPublicKey(n, n.length, e, e.length);
Sha256 sha = new Sha256();
assertEquals(WolfCrypt.SUCCESS, Fips.InitSha256_fips(sha));
assertEquals(WolfCrypt.SUCCESS,
Fips.Sha256Update_fips(sha, message, message.length));
assertEquals(WolfCrypt.SUCCESS, Fips.Sha256Final_fips(sha, hash));
long encodedSz = Asn.encodeSignature(encoded, hash,
Sha256.DIGEST_SIZE, Asn.getCTC_HashOID(Sha256.TYPE));
assertEquals(encodedSz, Fips.RsaSSL_Verify_fips(signature,
signature.length, result, result.length, key));
assertArrayEquals(encoded, result);
assertEquals(WolfCrypt.SUCCESS, Fips.FreeRsaKey_fips(key));
}
}
}