adds byte[] versions of Asn, Rsa, Dh and Md5;
improves byte[] release usage, copying buffer only when necessary.pull/2/merge
parent
daa71176a3
commit
156d72a69e
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
520
jni/jni_fips.c
520
jni/jni_fips.c
|
@ -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
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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 peer’s 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.
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue