diff options
| author | J08nY | 2017-11-30 23:57:09 +0100 |
|---|---|---|
| committer | J08nY | 2017-11-30 23:57:09 +0100 |
| commit | c33faeed138b3cbb0324878fa24481916791ec50 (patch) | |
| tree | 4e1ec7d79ba0bfa4b8af41b235af00c1c3aa6a0a /src/cz/crcs/ectester/standalone/libs/jni/NativeSignatureSpi.java | |
| parent | d571f404e51356239cdb7d23de95074b271016e1 (diff) | |
| download | ECTester-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.java | 57 |
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); + } } |
