summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cz/crcs/ectester/common/util/ECUtil.java1
-rw-r--r--src/cz/crcs/ectester/standalone/ECTesterStandalone.java18
-rw-r--r--src/cz/crcs/ectester/standalone/consts/SignatureIdent.java1
3 files changed, 16 insertions, 4 deletions
diff --git a/src/cz/crcs/ectester/common/util/ECUtil.java b/src/cz/crcs/ectester/common/util/ECUtil.java
index 0260e95..919986b 100644
--- a/src/cz/crcs/ectester/common/util/ECUtil.java
+++ b/src/cz/crcs/ectester/common/util/ECUtil.java
@@ -254,6 +254,7 @@ public class ECUtil {
BigInteger hrd = hashInt.add(rd).mod(params.getOrder());
return s.modInverse(params.getOrder()).multiply(hrd).mod(params.getOrder());
} catch (NoSuchAlgorithmException | IOException nsae) {
+ nsae.printStackTrace();
return null;
}
}
diff --git a/src/cz/crcs/ectester/standalone/ECTesterStandalone.java b/src/cz/crcs/ectester/standalone/ECTesterStandalone.java
index 707f031..e250b10 100644
--- a/src/cz/crcs/ectester/standalone/ECTesterStandalone.java
+++ b/src/cz/crcs/ectester/standalone/ECTesterStandalone.java
@@ -51,6 +51,7 @@ import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintStream;
+import java.math.BigInteger;
import java.nio.file.Files;
import java.security.*;
import java.security.interfaces.ECPrivateKey;
@@ -415,7 +416,7 @@ public class ECTesterStandalone {
data = Files.readAllBytes(in.toPath());
dataString = "";
} else {
- SecureRandom random = new SecureRandom();
+ Random random = new Random();
data = new byte[32];
random.nextBytes(data);
dataString = ByteUtil.bytesToHex(data, false);
@@ -455,6 +456,7 @@ public class ECTesterStandalone {
}
Signature sig = sigIdent.getInstance(lib.getProvider());
KeyPairGenerator kpg = kpIdent.getInstance(lib.getProvider());
+ ECParameterSpec spec = null;
if (cli.hasOption("ecdsa.bits")) {
int bits = Integer.parseInt(cli.getOptionValue("ecdsa.bits"));
kpg.initialize(bits);
@@ -465,7 +467,8 @@ public class ECTesterStandalone {
System.err.println("Curve not found: " + curveName);
return;
}
- kpg.initialize(curve.toSpec());
+ spec = curve.toSpec();
+ kpg.initialize(spec);
} else if (cli.hasOption("ecdsa.curve-name")) {
String curveName = cli.getOptionValue("ecdsa.curve-name");
kpg.initialize(new ECGenParameterSpec(curveName));
@@ -478,7 +481,7 @@ public class ECTesterStandalone {
out = System.out;
}
- out.println("index;data;signTime[nano];verifyTime[nano];pubW;privS;signature;verified");
+ out.println("index;signTime[nano];verifyTime[nano];data;pubW;privS;signature;nonce;verified");
int amount = Integer.parseInt(cli.getOptionValue("ecdsa.amount", "1"));
for (int i = 0; i < amount; ++i) {
@@ -510,7 +513,14 @@ public class ECTesterStandalone {
String pub = ByteUtil.bytesToHex(ECUtil.toX962Uncompressed(pubkey.getW(), pubkey.getParams()), false);
String priv = ByteUtil.bytesToHex(privkey.getS().toByteArray(), false);
String sign = ByteUtil.bytesToHex(signature, false);
- out.println(String.format("%d;%s;%d;%d;%s;%s;%s;%d", i, dataString, signTime, verifyTime, pub, priv, sign, verified ? 1 : 0));
+ String k = "";
+ if (spec != null) {
+ BigInteger kValue = ECUtil.recoverSignatureNonce(signature, data, privkey.getS(), spec, sigIdent.getHashAlgo());
+ if (kValue != null) {
+ k = ByteUtil.bytesToHex(kValue.toByteArray(), false);
+ }
+ }
+ out.println(String.format("%d;%d;%d;%s;%s;%s;%s;%s;%d", i, signTime, verifyTime, dataString, pub, priv, sign, k, verified ? 1 : 0));
}
if (cli.hasOption("ecdsa.output")) {
diff --git a/src/cz/crcs/ectester/standalone/consts/SignatureIdent.java b/src/cz/crcs/ectester/standalone/consts/SignatureIdent.java
index e40731b..7f9adb4 100644
--- a/src/cz/crcs/ectester/standalone/consts/SignatureIdent.java
+++ b/src/cz/crcs/ectester/standalone/consts/SignatureIdent.java
@@ -104,6 +104,7 @@ public class SignatureIdent extends Ident {
int split = alias.indexOf("with");
this.hash = alias.substring(0, split);
this.sig = alias.substring(split + 4);
+ break;
}
}
}