diff options
| author | J08nY | 2024-03-16 11:59:23 +0100 |
|---|---|---|
| committer | J08nY | 2024-03-16 11:59:23 +0100 |
| commit | 65d00d2354f4b68919153e35c02e744b3defdb1b (patch) | |
| tree | c34d8d85d8ee7d7ccc67794f645651cafb62efc7 /src | |
| parent | 3071464b109ab9310365f32370386a4587b81e83 (diff) | |
| download | ECTester-65d00d2354f4b68919153e35c02e744b3defdb1b.tar.gz ECTester-65d00d2354f4b68919153e35c02e744b3defdb1b.tar.zst ECTester-65d00d2354f4b68919153e35c02e744b3defdb1b.zip | |
Fix DER decoding.
Diffstat (limited to 'src')
| -rw-r--r-- | src/cz/crcs/ectester/common/util/ECUtil.java | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/cz/crcs/ectester/common/util/ECUtil.java b/src/cz/crcs/ectester/common/util/ECUtil.java index 8ad31bf..db1169e 100644 --- a/src/cz/crcs/ectester/common/util/ECUtil.java +++ b/src/cz/crcs/ectester/common/util/ECUtil.java @@ -6,6 +6,7 @@ import cz.crcs.ectester.data.EC_Store; import org.bouncycastle.asn1.*; import org.bouncycastle.crypto.digests.SHA1Digest; +import java.io.ByteArrayInputStream; import java.io.FileInputStream; import java.io.IOException; import java.math.BigInteger; @@ -205,7 +206,7 @@ public class ECUtil { while (written < bytes) { byte[] dig = new byte[digest.getDigestSize()]; digest.doFinal(dig, 0); - int toWrite = digest.getDigestSize() > bytes - written ? bytes - written : digest.getDigestSize(); + int toWrite = Math.min(digest.getDigestSize(), bytes - written); System.arraycopy(dig, 0, result, written, toWrite); written += toWrite; digest.update(dig, 0, dig.length); @@ -352,10 +353,12 @@ public class ECUtil { } public static BigInteger[] fromDERSignature(byte[] signature) throws IOException { - ASN1StreamParser parser = new ASN1StreamParser(signature); - DERSequence sequence = (DERSequence) ((DLSequenceParser) parser.readObject()).getLoadedObject(); - ASN1Integer r = (ASN1Integer) sequence.getObjectAt(0); - ASN1Integer s = (ASN1Integer) sequence.getObjectAt(1); + ByteArrayInputStream inputStream = new ByteArrayInputStream(signature); + ASN1InputStream asn1InputStream = new ASN1InputStream(inputStream); + ASN1Sequence asn1Sequence = ASN1Sequence.getInstance(asn1InputStream.readObject()); + + ASN1Integer r = (ASN1Integer) asn1Sequence.getObjectAt(0); + ASN1Integer s = (ASN1Integer) asn1Sequence.getObjectAt(1); return new BigInteger[]{r.getPositiveValue(), s.getPositiveValue()}; } |
