aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJ08nY2024-03-16 11:59:23 +0100
committerJ08nY2024-03-16 11:59:23 +0100
commit65d00d2354f4b68919153e35c02e744b3defdb1b (patch)
treec34d8d85d8ee7d7ccc67794f645651cafb62efc7 /src
parent3071464b109ab9310365f32370386a4587b81e83 (diff)
downloadECTester-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.java13
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()};
}