adds error callback to FIPS with jni wrappers.
parent
5c7bc8c28e
commit
b0ba01ef9a
|
@ -7,6 +7,14 @@
|
|||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
* Class: com_wolfssl_wolfcrypt_Fips
|
||||
* Method: setErrorCallback
|
||||
* Signature: (Lcom/wolfssl/wolfcrypt/Fips/ErrorCallback;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Fips_setErrorCallback
|
||||
(JNIEnv *, jclass, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_wolfssl_wolfcrypt_Fips
|
||||
* Method: AesSetKey_fips
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class com_wolfssl_wolfcrypt_Fips_ErrorCallback */
|
||||
|
||||
#ifndef _Included_com_wolfssl_wolfcrypt_Fips_ErrorCallback
|
||||
#define _Included_com_wolfssl_wolfcrypt_Fips_ErrorCallback
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
|
@ -20,9 +20,9 @@ JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Asn_encodeSignature(
|
|||
|
||||
if (!encoded || !hash)
|
||||
throwWolfCryptException(env, "Bad method argument provided");
|
||||
|
||||
setDirectBufferLimit(env, encoded_object,
|
||||
wc_EncodeSignature(encoded, hash, hashSize, hashOID));
|
||||
else
|
||||
setDirectBufferLimit(env, encoded_object,
|
||||
wc_EncodeSignature(encoded, hash, hashSize, hashOID));
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_com_wolfssl_wolfcrypt_Asn_getCTC_1HashOID(
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
#include <com_wolfssl_wolfcrypt_WolfCrypt.h>
|
||||
#include <com_wolfssl_wolfcrypt_Fips.h>
|
||||
#include <wolfcrypt_jni_NativeStruct.h>
|
||||
#include <wolfcrypt_jni_error.h>
|
||||
|
||||
#ifndef __ANDROID__
|
||||
#include <wolfssl/options.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <wolfssl/wolfcrypt/error-crypt.h>
|
||||
#include <wolfssl/wolfcrypt/fips_test.h>
|
||||
#include <wolfssl/wolfcrypt/aes.h>
|
||||
|
@ -22,6 +24,54 @@
|
|||
/* #define WOLFCRYPT_JNI_DEBUG_ON */
|
||||
#include <wolfcrypt_jni_debug.h>
|
||||
|
||||
extern JavaVM* g_vm;
|
||||
static jobject g_errCb;
|
||||
|
||||
void NativeErrorCallback(const int ok, const int err, const char * const hash)
|
||||
{
|
||||
JNIEnv* env;
|
||||
jclass class;
|
||||
jmethodID method;
|
||||
jint ret;
|
||||
|
||||
ret = (int) ((*g_vm)->GetEnv(g_vm, (void**) &env, JNI_VERSION_1_6));
|
||||
if (ret == JNI_EDETACHED) {
|
||||
#ifdef __ANDROID__
|
||||
ret = (*g_vm)->AttachCurrentThread(g_vm, &env, NULL);
|
||||
#else
|
||||
ret = (*g_vm)->AttachCurrentThread(g_vm, (void**) &env, NULL);
|
||||
#endif
|
||||
if (ret) {
|
||||
printf("Failed to attach JNIEnv to thread\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (ret != JNI_OK) {
|
||||
printf("Unable to get JNIEnv from JavaVM\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (JNIGlobalRefType != (*env)->GetObjectRefType(env, g_errCb))
|
||||
throwWolfCryptException(env, "Invalid errorCallback reference");
|
||||
else if (!(class = (*env)->GetObjectClass(env, g_errCb)))
|
||||
throwWolfCryptException(env, "Failed to get callback class");
|
||||
else if (!(method = (*env)->GetMethodID(env, class, "errorCallback",
|
||||
"(IILjava/lang/String;)V")))
|
||||
throwWolfCryptException(env, "Failed to get method ID");
|
||||
else
|
||||
(*env)->CallVoidMethod(env, g_errCb, method, ok, err,
|
||||
(*env)->NewStringUTF(env, hash));
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Fips_setErrorCallback(
|
||||
JNIEnv* env, jclass class, jobject callback)
|
||||
{
|
||||
if ((g_errCb = (*env)->NewGlobalRef(env, callback)))
|
||||
wolfCrypt_SetCb_fips(NativeErrorCallback);
|
||||
else
|
||||
throwWolfCryptException(env, "Failed to store global error callback");
|
||||
}
|
||||
|
||||
/*
|
||||
* ### FIPS Aprooved Security Methods ##########################################
|
||||
*/
|
||||
|
|
|
@ -12,6 +12,16 @@
|
|||
|
||||
#pragma GCC diagnostic ignored "-Wint-to-pointer-cast"
|
||||
|
||||
JavaVM* g_vm = NULL;
|
||||
|
||||
/* called when native library is loaded */
|
||||
jint JNI_OnLoad(JavaVM* vm, void* reserved)
|
||||
{
|
||||
/* store JavaVM */
|
||||
g_vm = vm;
|
||||
return JNI_VERSION_1_6;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_NativeStruct_xfree(
|
||||
JNIEnv* env, jobject this, jlong ptr)
|
||||
{
|
||||
|
|
|
@ -46,8 +46,7 @@ JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Rsa_decodeRawPublicKey(
|
|||
|
||||
if (!key || !n || !e)
|
||||
throwWolfCryptException(env, "Bad method argument provided");
|
||||
|
||||
if (wc_RsaPublicKeyDecodeRaw(n, nSize, e, eSize, key) != 0)
|
||||
else if (wc_RsaPublicKeyDecodeRaw(n, nSize, e, eSize, key) != 0)
|
||||
throwWolfCryptException(env, "Failed to decode raw public key");
|
||||
|
||||
#endif
|
||||
|
|
|
@ -15,6 +15,12 @@ public class Fips extends WolfObject {
|
|||
private Fips() {
|
||||
}
|
||||
|
||||
public interface ErrorCallback {
|
||||
public void errorCallback(int ok, int err, String hash);
|
||||
}
|
||||
|
||||
public static native void setErrorCallback(ErrorCallback callback);
|
||||
|
||||
/*
|
||||
* ### FIPS Aprooved Security Methods ######################################
|
||||
*/
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
package com.wolfssl.wolfcrypt.fips;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com.wolfssl.wolfcrypt.Fips.ErrorCallback;
|
||||
import com.wolfssl.wolfcrypt.Aes;
|
||||
import com.wolfssl.wolfcrypt.Fips;
|
||||
|
||||
public class ErrorCallbackFipsTest {
|
||||
|
||||
public class MyCallback implements ErrorCallback {
|
||||
@Override
|
||||
public void errorCallback(int ok, int err, String hash) {
|
||||
System.out.println("in my Fips callback, ok =" + ok + " err = "
|
||||
+ err);
|
||||
System.out.println("hash = " + hash);
|
||||
|
||||
if (err == -203) {
|
||||
System.out
|
||||
.println("In core integrity hash check failure, copy above hash");
|
||||
System.out
|
||||
.println("into verifyCore[] in fips_test.c and rebuild");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setErrorCallbackShouldNotRaise() {
|
||||
MyCallback callback = new MyCallback();
|
||||
|
||||
Fips.setErrorCallback(callback);
|
||||
|
||||
Fips.AesSetKey_fips(new Aes(),
|
||||
ByteBuffer.allocateDirect(Aes.KEY_SIZE_256), Aes.KEY_SIZE_128,
|
||||
null, Aes.ENCRYPT_MODE);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue