aboutsummaryrefslogtreecommitdiff
path: root/src/cz/crcs/ectester/standalone/libs/jni/NativeKeyPairGeneratorSpi.java
diff options
context:
space:
mode:
authorMichal Čech2019-12-25 20:46:52 +0100
committerJán Jančár2019-12-25 20:46:52 +0100
commit79143562568a91ea7c3db66b9e97eb4a46c3ea04 (patch)
treec27818ba28d5be3b619c41b415d00bf14e341d75 /src/cz/crcs/ectester/standalone/libs/jni/NativeKeyPairGeneratorSpi.java
parentd4611ac11ac0cbb91e5a0b27ef8799ec686eea7b (diff)
downloadECTester-79143562568a91ea7c3db66b9e97eb4a46c3ea04.tar.gz
ECTester-79143562568a91ea7c3db66b9e97eb4a46c3ea04.tar.zst
ECTester-79143562568a91ea7c3db66b9e97eb4a46c3ea04.zip
Nettle support (#4)
* Added Nettle java file, added Nettle class to NativeProvider files * Nettle makefile * Nettle get curves and setup * makefile and build-standalone * makefile hogweed * added other curves * mpz to biginteger * switch nignum to mpz * it is finally possible to write nettle info * prepared generate curve * generate key pair progress * removed key agreement * ECParameterSpec experiment * ECParameterSpec experiment - source * Another try * it is finally running (at least), debugging messages * generator generates - needs to be tested * removed unnecessary function * signature preparations * signature almost done * added der encoding * verification and der decoder * added support for secp192r1, secp224r1, secp384r1 and secp521r1 * fixed the variable length of the points and scalars * removed debug prints * removed debug prints (java) * removed Curve25519 artifacts, added ECDH support * removed fragment of openssl, added cleanup to ecdh * src/cz/crcs/ectester/standalone/libs/jni/nettle.c * reverted plot * fixed signature for secp521r1 * replaced for loop with memset * added nettle to requirements in NettleLib class * removed conflicting lines * fixed the der signature encoder / decoder * Switched ECGenParameterSpec -> ECParameterSpec explicit retyping to EC_Store Co-authored-by: Ján Jančár <J08nY@users.noreply.github.com>
Diffstat (limited to 'src/cz/crcs/ectester/standalone/libs/jni/NativeKeyPairGeneratorSpi.java')
-rw-r--r--src/cz/crcs/ectester/standalone/libs/jni/NativeKeyPairGeneratorSpi.java42
1 files changed, 41 insertions, 1 deletions
diff --git a/src/cz/crcs/ectester/standalone/libs/jni/NativeKeyPairGeneratorSpi.java b/src/cz/crcs/ectester/standalone/libs/jni/NativeKeyPairGeneratorSpi.java
index 3598d61..636f423 100644
--- a/src/cz/crcs/ectester/standalone/libs/jni/NativeKeyPairGeneratorSpi.java
+++ b/src/cz/crcs/ectester/standalone/libs/jni/NativeKeyPairGeneratorSpi.java
@@ -1,7 +1,14 @@
package cz.crcs.ectester.standalone.libs.jni;
+import cz.crcs.ectester.common.ec.EC_Curve;
+import cz.crcs.ectester.data.EC_Store;
+
import java.security.*;
import java.security.spec.AlgorithmParameterSpec;
+import java.security.AlgorithmParameters;
+import java.security.spec.ECGenParameterSpec;
+import java.security.spec.ECParameterSpec;
+import java.security.spec.InvalidParameterSpecException;
/**
* @author Jan Jancar johny@neuromancer.sk
@@ -62,6 +69,7 @@ public abstract class NativeKeyPairGeneratorSpi extends KeyPairGeneratorSpi {
abstract KeyPair generate(AlgorithmParameterSpec params, SecureRandom random);
+
public static class TomCrypt extends NativeKeyPairGeneratorSpi {
public TomCrypt() {
@@ -306,8 +314,9 @@ public abstract class NativeKeyPairGeneratorSpi extends KeyPairGeneratorSpi {
@Override
native KeyPair generate(AlgorithmParameterSpec params, SecureRandom random);
}
-
+
public static class Libressl extends NativeKeyPairGeneratorSpi {
+
public Libressl() {
initialize(256, new SecureRandom());
}
@@ -324,4 +333,35 @@ public abstract class NativeKeyPairGeneratorSpi extends KeyPairGeneratorSpi {
@Override
native KeyPair generate(AlgorithmParameterSpec params, SecureRandom random);
}
+
+ public static class Nettle extends NativeKeyPairGeneratorSpi {
+ public Nettle() {
+ initialize(256, new SecureRandom());
+ }
+
+ @Override
+ native boolean keysizeSupported(int keysize);
+
+ @Override
+ native boolean paramsSupported(AlgorithmParameterSpec params);
+
+ @Override
+ native KeyPair generate(int keysize, SecureRandom random);
+
+ @Override
+ KeyPair generate(AlgorithmParameterSpec params, SecureRandom random) {
+ if (params instanceof ECGenParameterSpec) {
+ String curveName = ((ECGenParameterSpec) params).getName();
+ if (curveName.contains("secp")) {
+ curveName = "secg/" + curveName;
+ }
+ EC_Curve curve = EC_Store.getInstance().getObject(EC_Curve.class, curveName);
+ ECParameterSpec spec = curve.toSpec();
+ return generate(params, random, spec);
+ }
+ return null;
+ }
+
+ native KeyPair generate(AlgorithmParameterSpec params, SecureRandom random, AlgorithmParameterSpec spec);
+ }
}