diff --git a/jni/include/com_wolfssl_wolfcrypt_Fips.h b/jni/include/com_wolfssl_wolfcrypt_Fips.h index a634896..5072666 100644 --- a/jni/include/com_wolfssl_wolfcrypt_Fips.h +++ b/jni/include/com_wolfssl_wolfcrypt_Fips.h @@ -327,6 +327,14 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_Sha512Final_1fips JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_wolfCrypt_1GetStatus_1fips (JNIEnv *, jclass); +/* + * Class: com_wolfssl_wolfcrypt_Fips + * Method: wolfCrypt_SetStatus_fips + * Signature: (I)I + */ +JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_wolfCrypt_1SetStatus_1fips + (JNIEnv *, jclass, jint); + /* * Class: com_wolfssl_wolfcrypt_Fips * Method: RsaPublicEncrypt_fips diff --git a/jni/jni_fips.c b/jni/jni_fips.c index 400e46c..ce364fe 100644 --- a/jni/jni_fips.c +++ b/jni/jni_fips.c @@ -1094,6 +1094,16 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_wolfCrypt_1GetStatus_1fip return (jint) wolfCrypt_GetStatus_fips(); } +JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Fips_wolfCrypt_1SetStatus_1fips( + JNIEnv* env, jclass class, jint status) +{ +#ifdef HAVE_FORCE_FIPS_FAILURE + return (jint) wolfCrypt_SetStatus_fips(status); +#else + return NOT_COMPILED_IN; +#endif +} + /* * ### FIPS Allowed Security Methods ########################################### */ diff --git a/src/java/com/wolfssl/wolfcrypt/Fips.java b/src/java/com/wolfssl/wolfcrypt/Fips.java index dffc4dd..bafb64a 100644 --- a/src/java/com/wolfssl/wolfcrypt/Fips.java +++ b/src/java/com/wolfssl/wolfcrypt/Fips.java @@ -656,6 +656,16 @@ public class Fips extends WolfObject { */ public static native int wolfCrypt_GetStatus_fips(); + /** + * Sets the fips module status. Only available if HAVE_FORCE_FIPS_FAILURE is + * defined on the native library. + * + * @param status + * the new status. + * @return 0 on success, {@literal <} 0 on error. + */ + public static native int wolfCrypt_SetStatus_fips(int status); + /* * ### FIPS Allowed Security Methods ####################################### */ diff --git a/src/test/com/wolfssl/wolfcrypt/fips/FipsTest.java b/src/test/com/wolfssl/wolfcrypt/fips/FipsTest.java index bf7b728..c1f87b2 100644 --- a/src/test/com/wolfssl/wolfcrypt/fips/FipsTest.java +++ b/src/test/com/wolfssl/wolfcrypt/fips/FipsTest.java @@ -8,6 +8,7 @@ import org.junit.Test; import com.wolfssl.wolfcrypt.Aes; import com.wolfssl.wolfcrypt.WolfCrypt; +import com.wolfssl.wolfcrypt.WolfCryptError; import com.wolfssl.wolfcrypt.Fips; import com.wolfssl.wolfcrypt.Fips.ErrorCallback; @@ -17,6 +18,13 @@ public class FipsTest { assertEquals(WolfCrypt.SUCCESS, Fips.wolfCrypt_GetStatus_fips()); } + @Test + public void wolfCrypt_SetStatus_fipsShouldReturnZero() { + assertEquals(WolfCryptError.NOT_COMPILED_IN.getCode(), + Fips.wolfCrypt_SetStatus_fips(WolfCryptError.DRBG_CONT_FIPS_E + .getCode())); + } + public class MyCallback implements ErrorCallback { @Override public void errorCallback(int ok, int err, String hash) {