summaryrefslogtreecommitdiff
path: root/src/cz/crcs/ectester/standalone/test/base/SignatureTestable.java
diff options
context:
space:
mode:
authorJ08nY2018-05-28 20:06:18 +0200
committerJ08nY2018-05-28 20:06:18 +0200
commita4e52b21b1dad5f96df409c44e5b4d611bba01b9 (patch)
tree36f9d21894fc702a4f544bd0145b403ba3930074 /src/cz/crcs/ectester/standalone/test/base/SignatureTestable.java
parentff6be88e469608a67945a274ec2180aee3f3ccd2 (diff)
downloadECTester-a4e52b21b1dad5f96df409c44e5b4d611bba01b9.tar.gz
ECTester-a4e52b21b1dad5f96df409c44e5b4d611bba01b9.tar.zst
ECTester-a4e52b21b1dad5f96df409c44e5b4d611bba01b9.zip
Implement tracking of stage of execution of standalone testables.
- Output this stage in all the formats.
Diffstat (limited to 'src/cz/crcs/ectester/standalone/test/base/SignatureTestable.java')
-rw-r--r--src/cz/crcs/ectester/standalone/test/base/SignatureTestable.java135
1 files changed, 135 insertions, 0 deletions
diff --git a/src/cz/crcs/ectester/standalone/test/base/SignatureTestable.java b/src/cz/crcs/ectester/standalone/test/base/SignatureTestable.java
new file mode 100644
index 0000000..873757b
--- /dev/null
+++ b/src/cz/crcs/ectester/standalone/test/base/SignatureTestable.java
@@ -0,0 +1,135 @@
+package cz.crcs.ectester.standalone.test.base;
+
+import java.security.InvalidKeyException;
+import java.security.SecureRandom;
+import java.security.Signature;
+import java.security.SignatureException;
+import java.security.interfaces.ECPrivateKey;
+import java.security.interfaces.ECPublicKey;
+
+/**
+ * @author Jan Jancar johny@neuromancer.sk
+ */
+public class SignatureTestable extends StandaloneTestable<SignatureTestable.SignatureStage> {
+ private Signature sig;
+ private ECPrivateKey signKey;
+ private ECPublicKey verifyKey;
+ private KeyGeneratorTestable kgt;
+ private byte[] data;
+ private byte[] signature;
+ private boolean verified;
+
+ public SignatureTestable(Signature sig, ECPrivateKey signKey, ECPublicKey verifyKey, byte[] data) {
+ this.sig = sig;
+ this.signKey = signKey;
+ this.verifyKey = verifyKey;
+ this.data = data;
+ if (data == null) {
+ SecureRandom random = new SecureRandom();
+ this.data = new byte[64];
+ random.nextBytes(this.data);
+ }
+ }
+
+ public SignatureTestable(Signature sig, KeyGeneratorTestable kgt, byte[] data) {
+ this(sig, null, null, data);
+ this.kgt = kgt;
+ }
+
+ public Signature getSig() {
+ return sig;
+ }
+
+ public byte[] getData() {
+ return data;
+ }
+
+ public byte[] getSignature() {
+ return signature;
+ }
+
+ public boolean getVerified() {
+ return verified;
+ }
+
+ @Override
+ public void run() {
+ try {
+ stage = SignatureStage.GetKeys;
+ if (kgt != null) {
+ signKey = (ECPrivateKey) kgt.getKeyPair().getPrivate();
+ verifyKey = (ECPublicKey) kgt.getKeyPair().getPublic();
+ }
+
+ stage = SignatureStage.InitSign;
+ try {
+ sig.initSign(signKey);
+ } catch (InvalidKeyException e) {
+ ok = false;
+ hasRun = true;
+ return;
+ }
+
+ stage = SignatureStage.UpdateSign;
+ try {
+ sig.update(data);
+ } catch (SignatureException e) {
+ ok = false;
+ hasRun = true;
+ return;
+ }
+
+ stage = SignatureStage.Sign;
+ try {
+ signature = sig.sign();
+ } catch (SignatureException e) {
+ ok = false;
+ hasRun = true;
+ return;
+ }
+
+ stage = SignatureStage.InitVerify;
+ try {
+ sig.initVerify(verifyKey);
+ } catch (InvalidKeyException e) {
+ ok = false;
+ hasRun = true;
+ return;
+ }
+
+ stage = SignatureStage.UpdateVerify;
+ try {
+ sig.update(data);
+ } catch (SignatureException e) {
+ ok = false;
+ hasRun = true;
+ return;
+ }
+
+ stage = SignatureStage.Verify;
+ try {
+ verified = sig.verify(signature);
+ } catch (SignatureException e) {
+ ok = false;
+ hasRun = true;
+ }
+
+ ok = true;
+ } catch (Exception ex) {
+ ok = false;
+ error = true;
+ errorCause = ex;
+ }
+ hasRun = true;
+ }
+
+ public enum SignatureStage {
+ GetKeys,
+ InitSign,
+ UpdateSign,
+ Sign,
+ InitVerify,
+ UpdateVerify,
+ Verify
+ }
+}