aboutsummaryrefslogtreecommitdiff
path: root/src/cz/crcs/ectester/standalone/libs/jni/NativeSignatureSpi.java
diff options
context:
space:
mode:
authorJ08nY2017-11-30 23:57:09 +0100
committerJ08nY2017-11-30 23:57:09 +0100
commitc33faeed138b3cbb0324878fa24481916791ec50 (patch)
tree4e1ec7d79ba0bfa4b8af41b235af00c1c3aa6a0a /src/cz/crcs/ectester/standalone/libs/jni/NativeSignatureSpi.java
parentd571f404e51356239cdb7d23de95074b271016e1 (diff)
downloadECTester-c33faeed138b3cbb0324878fa24481916791ec50.tar.gz
ECTester-c33faeed138b3cbb0324878fa24481916791ec50.tar.zst
ECTester-c33faeed138b3cbb0324878fa24481916791ec50.zip
Implement ECDSA for LibTomCrypt.
Diffstat (limited to 'src/cz/crcs/ectester/standalone/libs/jni/NativeSignatureSpi.java')
-rw-r--r--src/cz/crcs/ectester/standalone/libs/jni/NativeSignatureSpi.java57
1 files changed, 47 insertions, 10 deletions
diff --git a/src/cz/crcs/ectester/standalone/libs/jni/NativeSignatureSpi.java b/src/cz/crcs/ectester/standalone/libs/jni/NativeSignatureSpi.java
index 0c6332e..a9ec8a6 100644
--- a/src/cz/crcs/ectester/standalone/libs/jni/NativeSignatureSpi.java
+++ b/src/cz/crcs/ectester/standalone/libs/jni/NativeSignatureSpi.java
@@ -1,49 +1,86 @@
package cz.crcs.ectester.standalone.libs.jni;
+import cz.crcs.ectester.common.util.ECUtil;
+
+import java.io.ByteArrayOutputStream;
import java.security.*;
+import java.security.interfaces.ECPrivateKey;
+import java.security.interfaces.ECPublicKey;
+import java.security.spec.ECParameterSpec;
+/**
+ * @author Jan Jancar johny@neuromancer.sk
+ */
public abstract class NativeSignatureSpi extends SignatureSpi {
+ private ECPublicKey verifyKey;
+ private ECPrivateKey signKey;
+ private ECParameterSpec params;
+
+ private ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+
@Override
protected void engineInitVerify(PublicKey publicKey) throws InvalidKeyException {
-
+ if (!(publicKey instanceof ECPublicKey)) {
+ throw new InvalidKeyException
+ ("Key must be an instance of ECPublicKey");
+ }
+ verifyKey = (ECPublicKey) publicKey;
+ params = verifyKey.getParams();
+ buffer.reset();
}
@Override
protected void engineInitSign(PrivateKey privateKey) throws InvalidKeyException {
-
+ if (!(privateKey instanceof ECPrivateKey)) {
+ throw new InvalidKeyException
+ ("Key must be an instance of ECPrivateKey");
+ }
+ signKey = (ECPrivateKey) privateKey;
+ params = signKey.getParams();
+ buffer.reset();
}
@Override
protected void engineUpdate(byte b) throws SignatureException {
-
+ buffer.write(b);
}
@Override
protected void engineUpdate(byte[] b, int off, int len) throws SignatureException {
-
+ buffer.write(b, off, len);
}
@Override
protected byte[] engineSign() throws SignatureException {
- return new byte[0];
+ return sign(buffer.toByteArray(), ECUtil.toByteArray(signKey.getS(), params.getCurve().getField().getFieldSize()), params);
}
@Override
protected boolean engineVerify(byte[] sigBytes) throws SignatureException {
- return false;
+ return verify(sigBytes, buffer.toByteArray(), ECUtil.toX962Uncompressed(verifyKey.getW(), params), params);
}
@Override
protected void engineSetParameter(String param, Object value) throws InvalidParameterException {
-
+ throw new UnsupportedOperationException("setParameter() not supported");
}
@Override
protected Object engineGetParameter(String param) throws InvalidParameterException {
- return null;
+ throw new UnsupportedOperationException("getParameter() not supported");
}
- public static class TomCrypt extends NativeSignatureSpi {
-
+ abstract byte[] sign(byte[] data, byte[] privkey, ECParameterSpec params);
+
+ abstract boolean verify(byte[] signature, byte[] data, byte[] pubkey, ECParameterSpec params);
+
+ public static class TomCryptRaw extends NativeSignatureSpi {
+
+ @Override
+ native byte[] sign(byte[] data, byte[] privkey, ECParameterSpec params);
+
+ @Override
+ native boolean verify(byte[] signature, byte[] data, byte[] pubkey, ECParameterSpec params);
+
}
}