diff options
author | Peter Dettman <peter.dettman@bouncycastle.org> | 2013-12-27 12:18:22 +0400 |
---|---|---|
committer | Peter Dettman <peter.dettman@bouncycastle.org> | 2013-12-27 12:18:22 +0400 |
commit | 1c25d76301aae49f03038bf3608b18d6f4a90edb (patch) | |
tree | ec93e5d71ddbfa8ed2bc34fc5a121af3eb0c10a1 /core/src/main/java/org/bouncycastle | |
parent | ea5552a8026eb0077c9ffa122e970a20c44521fc (diff) |
Use utility method to reverse bytes
Use more efficient BigInteger truncation
Diffstat (limited to 'core/src/main/java/org/bouncycastle')
-rw-r--r-- | core/src/main/java/org/bouncycastle/crypto/signers/DSTU4145Signer.java | 36 |
1 files changed, 10 insertions, 26 deletions
diff --git a/core/src/main/java/org/bouncycastle/crypto/signers/DSTU4145Signer.java b/core/src/main/java/org/bouncycastle/crypto/signers/DSTU4145Signer.java index 0e769509..bcc4edf2 100644 --- a/core/src/main/java/org/bouncycastle/crypto/signers/DSTU4145Signer.java +++ b/core/src/main/java/org/bouncycastle/crypto/signers/DSTU4145Signer.java @@ -136,40 +136,24 @@ public class DSTU4145Signer { return new BigInteger(n.bitLength() - 1, random); } - - private static void reverseBytes(byte[] bytes) - { - byte tmp; - - for (int i=0; i<bytes.length/2; i++) - { - tmp=bytes[i]; - bytes[i]=bytes[bytes.length-1-i]; - bytes[bytes.length-1-i]=tmp; - } - } private static ECFieldElement hash2FieldElement(ECCurve curve, byte[] hash) { - byte[] data = Arrays.clone(hash); - reverseBytes(data); - BigInteger num = new BigInteger(1, data); - while (num.bitLength() > curve.getFieldSize()) - { - num = num.clearBit(num.bitLength() - 1); - } + byte[] data = Arrays.reverse(hash); + return curve.fromBigInteger(truncate(new BigInteger(1, data), curve.getFieldSize())); + } - return curve.fromBigInteger(num); + private static BigInteger fieldElement2Integer(BigInteger n, ECFieldElement fe) + { + return truncate(fe.toBigInteger(), n.bitLength() - 1); } - private static BigInteger fieldElement2Integer(BigInteger n, ECFieldElement fieldElement) + private static BigInteger truncate(BigInteger x, int bitLength) { - BigInteger num = fieldElement.toBigInteger(); - while (num.bitLength() >= n.bitLength()) + if (x.bitLength() > bitLength) { - num = num.clearBit(num.bitLength() - 1); + x = x.mod(BigInteger.ONE.shiftLeft(bitLength)); } - - return num; + return x; } } |