diff --git a/jni/include/com_wolfssl_wolfcrypt_Fips.h b/jni/include/com_wolfssl_wolfcrypt_Fips.h index 5072666..c1e3a49 100644 --- a/jni/include/com_wolfssl_wolfcrypt_Fips.h +++ b/jni/include/com_wolfssl_wolfcrypt_Fips.h @@ -463,6 +463,14 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_ecc_1make_1key JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_ecc_1shared_1secret (JNIEnv *, jclass, jobject, jobject, jobject, jlongArray); +/* + * Class: com_wolfssl_wolfcrypt_Fips + * Method: ecc_import_x963 + * Signature: (Ljava/nio/ByteBuffer;JLcom/wolfssl/wolfcrypt/Ecc;)I + */ +JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_ecc_1import_1x963 + (JNIEnv *, jclass, jobject, jlong, jobject); + /* * Class: com_wolfssl_wolfcrypt_Fips * Method: ecc_export_x963 diff --git a/jni/jni_fips.c b/jni/jni_fips.c index e07db4d..8333066 100644 --- a/jni/jni_fips.c +++ b/jni/jni_fips.c @@ -1530,6 +1530,31 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_ecc_1shared_1secret( return ret; } +JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_ecc_1import_1x963( + JNIEnv* env, jclass class, jobject in_buffer, jlong inLen, + jobject key_object) +{ + jint ret = NOT_COMPILED_IN; + +#if defined(HAVE_FIPS) && defined(HAVE_ECC) + + ecc_key* key = (ecc_key*) getNativeStruct(env, key_object); + byte* in = getDirectBufferAddress(env, in_buffer); + + if (!key || !in) + return BAD_FUNC_ARG; + + ret = ecc_import_x963(in, inLen, key); + + LogStr("ecc_import_x963(in, inLen, key=%p) = %d\n", key, ret); + LogStr("in:\n"); + LogHex(in, inLen); + +#endif + + return ret; +} + JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_ecc_1export_1x963( JNIEnv* env, jclass class, jobject key_object, jobject out_buffer, jlongArray outLen) diff --git a/src/java/com/wolfssl/wolfcrypt/Fips.java b/src/java/com/wolfssl/wolfcrypt/Fips.java index e035360..a691f58 100644 --- a/src/java/com/wolfssl/wolfcrypt/Fips.java +++ b/src/java/com/wolfssl/wolfcrypt/Fips.java @@ -950,6 +950,21 @@ public class Fips extends WolfObject { public static native int ecc_shared_secret(Ecc private_key, Ecc public_key, ByteBuffer out, long[] outlen); + /** + * Imports the public ecc key from in of length inLen in x963 format. + * + * @param in + * the input buffer. + * @param inLen + * the input length. + * @param key + * the Ecc object. + * + * @return 0 on success, {@literal <} 0 on error. + */ + public static native int ecc_import_x963(ByteBuffer in, long inLen, + Ecc key); + /** * Exports the public ecc key into out of length outLen in x963 format. *