aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJ08nY2019-03-16 23:17:31 +0100
committerJ08nY2019-03-18 00:08:04 +0100
commitf85110c524d53aa856ebfedb2a7c4cd516179126 (patch)
treeaf8dab02203436592378a1b819fad80a9abee534 /src
parent21b7936fce4f41dafa9aa3032eff44de1a72b1da (diff)
downloadECTester-f85110c524d53aa856ebfedb2a7c4cd516179126.tar.gz
ECTester-f85110c524d53aa856ebfedb2a7c4cd516179126.tar.zst
ECTester-f85110c524d53aa856ebfedb2a7c4cd516179126.zip
Diffstat (limited to 'src')
-rw-r--r--src/cz/crcs/ectester/common/util/ECUtil.java19
-rw-r--r--src/cz/crcs/ectester/standalone/ECTesterStandalone.java4
2 files changed, 17 insertions, 6 deletions
diff --git a/src/cz/crcs/ectester/common/util/ECUtil.java b/src/cz/crcs/ectester/common/util/ECUtil.java
index 9b0949d..d5e8006 100644
--- a/src/cz/crcs/ectester/common/util/ECUtil.java
+++ b/src/cz/crcs/ectester/common/util/ECUtil.java
@@ -362,11 +362,22 @@ public class ECUtil {
public static BigInteger recoverSignatureNonce(byte[] signature, byte[] data, BigInteger privkey, ECParameterSpec params, String hashType) {
try {
int bitSize = params.getOrder().bitLength();
- MessageDigest md = MessageDigest.getInstance(hashType);
- byte[] hash = md.digest(data);
+ // Hash the data.
+ byte[] hash;
+ if (hashType.equals("NONE")) {
+ hash = data;
+ } else {
+ MessageDigest md = MessageDigest.getInstance(hashType);
+ hash = md.digest(data);
+ }
+ // Trim bitSize of rightmost bits.
BigInteger hashInt = new BigInteger(1, hash);
- hashInt = hashInt.and(BigInteger.ONE.shiftLeft(bitSize + 1).subtract(BigInteger.ONE));
+ int hashBits = hashInt.bitLength();
+ if (hashBits > bitSize) {
+ hashInt = hashInt.shiftRight(hashBits - bitSize);
+ }
+ // Parse DERSignature
BigInteger[] sigPair = fromDERSignature(signature);
BigInteger r = sigPair[0];
BigInteger s = sigPair[1];
@@ -420,7 +431,7 @@ public class ECUtil {
FileInputStream in = new FileInputStream(file);
result.readCSV(in);
in.close();
- } else {
+ } else if (named != null) {
if (params == EC_Consts.PARAMETER_W) {
result = EC_Store.getInstance().getObject(EC_Key.Public.class, named);
} else if (params == EC_Consts.PARAMETER_S) {
diff --git a/src/cz/crcs/ectester/standalone/ECTesterStandalone.java b/src/cz/crcs/ectester/standalone/ECTesterStandalone.java
index 35db7da..1b4d9b8 100644
--- a/src/cz/crcs/ectester/standalone/ECTesterStandalone.java
+++ b/src/cz/crcs/ectester/standalone/ECTesterStandalone.java
@@ -369,7 +369,7 @@ public class ECTesterStandalone {
ECPublicKey pubkey = (ECPublicKey) ECUtil.loadKey(EC_Consts.PARAMETER_W, cli.getOptionValue("ecdh.named-public"), cli.getOptionValue("ecdh.public"), (ECParameterSpec) spec);
int amount = Integer.parseInt(cli.getOptionValue("ecdh.amount", "1"));
- for (int i = 0; i < amount; ++i) {
+ for (int i = 0; i < amount || amount == 0; ++i) {
if (!cli.hasOption("ecdh.fixed-private") && !cli.hasOption("ecdh.named-private") && !cli.hasOption("ecdh.private")) {
one = kpg.genKeyPair();
}
@@ -506,7 +506,7 @@ public class ECTesterStandalone {
ECPublicKey pubkey = (ECPublicKey) ECUtil.loadKey(EC_Consts.PARAMETER_W, cli.getOptionValue("ecdsa.named-public"), cli.getOptionValue("ecdsa.public"), spec);
int amount = Integer.parseInt(cli.getOptionValue("ecdsa.amount", "1"));
- for (int i = 0; i < amount; ++i) {
+ for (int i = 0; i < amount || amount == 0; ++i) {
if (!cli.hasOption("ecdsa.named-private") || !cli.hasOption("ecdsa.named-public")) {
KeyPair one = kpg.genKeyPair();