diff options
| author | J08nY | 2019-03-16 23:17:31 +0100 |
|---|---|---|
| committer | J08nY | 2019-03-18 00:08:04 +0100 |
| commit | f85110c524d53aa856ebfedb2a7c4cd516179126 (patch) | |
| tree | af8dab02203436592378a1b819fad80a9abee534 /src | |
| parent | 21b7936fce4f41dafa9aa3032eff44de1a72b1da (diff) | |
| download | ECTester-f85110c524d53aa856ebfedb2a7c4cd516179126.tar.gz ECTester-f85110c524d53aa856ebfedb2a7c4cd516179126.tar.zst ECTester-f85110c524d53aa856ebfedb2a7c4cd516179126.zip | |
Diffstat (limited to 'src')
| -rw-r--r-- | src/cz/crcs/ectester/common/util/ECUtil.java | 19 | ||||
| -rw-r--r-- | src/cz/crcs/ectester/standalone/ECTesterStandalone.java | 4 |
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(); |
