aboutsummaryrefslogtreecommitdiff
path: root/standalone
diff options
context:
space:
mode:
authorJ08nY2024-08-07 14:00:59 +0200
committerJ08nY2024-08-07 14:00:59 +0200
commitae4e8f69b68e51973a20ba59d2fc6fd1e7849972 (patch)
tree9fce40a105ed7d12043f872262563b0b9b08dcd5 /standalone
parentaa37d2b0853670cb6e13e41ae65cd74f6b64d021 (diff)
downloadECTester-ae4e8f69b68e51973a20ba59d2fc6fd1e7849972.tar.gz
ECTester-ae4e8f69b68e51973a20ba59d2fc6fd1e7849972.tar.zst
ECTester-ae4e8f69b68e51973a20ba59d2fc6fd1e7849972.zip
Diffstat (limited to 'standalone')
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/libs/IppcpLib.java6
-rw-r--r--standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/ippcp.c23
-rw-r--r--standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/native.h16
3 files changed, 45 insertions, 0 deletions
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/IppcpLib.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/IppcpLib.java
index 115fe00..fa51585 100644
--- a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/IppcpLib.java
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/IppcpLib.java
@@ -17,4 +17,10 @@ public class IppcpLib extends NativeECLibrary {
@Override
public native Set<String> getCurves();
+
+ @Override
+ public native boolean supportsDeterministicPRNG();
+
+ @Override
+ public native boolean setupDeterministicPRNG(byte[] seed);
}
diff --git a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/ippcp.c b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/ippcp.c
index fbf917e..86f0f7e 100644
--- a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/ippcp.c
+++ b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/ippcp.c
@@ -136,6 +136,29 @@ JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_IppcpLib_getCurv
return result;
}
+
+JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_IppcpLib_supportsDeterministicPRNG(JNIEnv *env, jobject self) {
+ return JNI_TRUE;
+}
+
+JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_IppcpLib_setupDeterministicPRNG(JNIEnv *env, jobject self, jbyteArray seed) {
+ jsize seed_length = (*env)->GetArrayLength(env, seed);
+ if (seed_length % 4 != 0) {
+ fprintf(stderr, "Error setting seed, needs to be a multiple of 4 bytes.\n");
+ return JNI_FALSE;
+ }
+ int bn_size;
+ ippsBigNumGetSize(seed_length / 4, &bn_size);
+ uint8_t bn_buf[bn_size];
+ IppsBigNumState *bn = (IppsBigNumState *)bn_buf;
+ ippsBigNumInit(seed_length / 4, bn);
+ jbyte *seed_data = (*env)->GetByteArrayElements(env, seed, NULL);
+ ippsSet_BN(IppsBigNumPOS, seed_length / 4, (Ipp32u *) seed_data, bn);
+ ippsPRNGSetSeed(bn, prng_state);
+ (*env)->ReleaseByteArrayElements(env, seed, seed_data, JNI_ABORT);
+ return JNI_TRUE;
+}
+
JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKeyPairGeneratorSpi_00024Ippcp_keysizeSupported(JNIEnv *env,
jobject this,
jint keysize) {
diff --git a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/native.h b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/native.h
index b8b2af1..627f38f 100644
--- a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/native.h
+++ b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/native.h
@@ -1570,6 +1570,22 @@ JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_IppcpLib_createP
JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_IppcpLib_getCurves
(JNIEnv *, jobject);
+/*
+* Class: cz_crcs_ectester_standalone_libs_IppcpLib
+* Method: supportsDeterministicPRNG
+* Signature: ()Z
+*/
+JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_IppcpLib_supportsDeterministicPRNG
+(JNIEnv *, jobject);
+
+/*
+* Class: cz_crcs_ectester_standalone_libs_IppcpLib
+* Method: setupDeterministicPRNG
+* Signature: ([B)Z
+*/
+JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_IppcpLib_setupDeterministicPRNG
+(JNIEnv *, jobject, jbyteArray);
+
#ifdef __cplusplus
}
#endif