I'm trying to parse an Authenticode signature which has an invalid ASN.1 structure in the eContent field. The structure contains a BIT STRING encoded as 03 01 01, which is invalid since it's impossible to have 0 bits and a 1 bit padding:
ASN1BitString detects it and throws an IllegalArgumentException "invalid pad bits detected":
Exception in thread "main" org.bouncycastle.cms.CMSException: IOException reading content.
at org.bouncycastle.cms.CMSUtils.readContentInfo(CMSUtils.java:186)
at org.bouncycastle.cms.CMSSignedData.<init>(CMSSignedData.java:95)
at net.jsign.BrokenSignedDataTest.main(BrokenSignedDataTest.java:15)
Caused by: org.bouncycastle.asn1.ASN1Exception: invalid pad bits detected
at org.bouncycastle.asn1.ASN1InputStream.createPrimitiveDERObject(ASN1InputStream.java:588)
at org.bouncycastle.asn1.ASN1InputStream.buildObject(ASN1InputStream.java:171)
at org.bouncycastle.asn1.ASN1InputStream.readObject(ASN1InputStream.java:244)
at org.bouncycastle.asn1.ASN1InputStream.readVector(ASN1InputStream.java:345)
at org.bouncycastle.asn1.ASN1InputStream.readVector(ASN1InputStream.java:368)
at org.bouncycastle.asn1.ASN1InputStream.buildObject(ASN1InputStream.java:210)
at org.bouncycastle.asn1.ASN1InputStream.readObject(ASN1InputStream.java:244)
at org.bouncycastle.asn1.ASN1InputStream.readVector(ASN1InputStream.java:356)
at org.bouncycastle.asn1.ASN1InputStream.readVector(ASN1InputStream.java:368)
at org.bouncycastle.asn1.ASN1InputStream.buildObject(ASN1InputStream.java:210)
at org.bouncycastle.asn1.ASN1InputStream.readObject(ASN1InputStream.java:244)
at org.bouncycastle.asn1.ASN1InputStream.readVector(ASN1InputStream.java:345)
at org.bouncycastle.asn1.ASN1InputStream.readVector(ASN1InputStream.java:368)
at org.bouncycastle.asn1.ASN1InputStream.buildObject(ASN1InputStream.java:210)
at org.bouncycastle.asn1.ASN1InputStream.readObject(ASN1InputStream.java:244)
at org.bouncycastle.asn1.ASN1InputStream.readVector(ASN1InputStream.java:345)
at org.bouncycastle.asn1.ASN1InputStream.readVector(ASN1InputStream.java:368)
at org.bouncycastle.asn1.ASN1InputStream.readTaggedObjectDL(ASN1InputStream.java:339)
at org.bouncycastle.asn1.ASN1InputStream.buildObject(ASN1InputStream.java:178)
at org.bouncycastle.asn1.ASN1InputStream.readObject(ASN1InputStream.java:244)
at org.bouncycastle.asn1.ASN1InputStream.readVector(ASN1InputStream.java:356)
at org.bouncycastle.asn1.ASN1InputStream.readVector(ASN1InputStream.java:368)
at org.bouncycastle.asn1.ASN1InputStream.buildObject(ASN1InputStream.java:210)
at org.bouncycastle.asn1.ASN1InputStream.readObject(ASN1InputStream.java:244)
at org.bouncycastle.asn1.ASN1InputStream.readVector(ASN1InputStream.java:356)
at org.bouncycastle.asn1.ASN1InputStream.readVector(ASN1InputStream.java:368)
at org.bouncycastle.asn1.ASN1InputStream.buildObject(ASN1InputStream.java:210)
at org.bouncycastle.asn1.ASN1InputStream.readObject(ASN1InputStream.java:244)
at org.bouncycastle.asn1.ASN1InputStream.readVector(ASN1InputStream.java:345)
at org.bouncycastle.asn1.ASN1InputStream.readVector(ASN1InputStream.java:368)
at org.bouncycastle.asn1.ASN1InputStream.readTaggedObjectDL(ASN1InputStream.java:339)
at org.bouncycastle.asn1.ASN1InputStream.buildObject(ASN1InputStream.java:178)
at org.bouncycastle.asn1.ASN1InputStream.readObject(ASN1InputStream.java:244)
at org.bouncycastle.asn1.ASN1InputStream.readVector(ASN1InputStream.java:356)
at org.bouncycastle.asn1.ASN1InputStream.readVector(ASN1InputStream.java:368)
at org.bouncycastle.asn1.ASN1InputStream.buildObject(ASN1InputStream.java:210)
at org.bouncycastle.asn1.ASN1InputStream.readObject(ASN1InputStream.java:244)
at org.bouncycastle.asn1.ASN1Primitive.fromByteArray(ASN1Primitive.java:47)
at org.bouncycastle.cms.CMSUtils.readContentInfo(CMSUtils.java:176)
... 2 more
Caused by: java.lang.IllegalArgumentException: invalid pad bits detected
at org.bouncycastle.asn1.ASN1BitString.createPrimitive(ASN1BitString.java:513)
at org.bouncycastle.asn1.ASN1InputStream.createPrimitiveDERObject(ASN1InputStream.java:531)
... 40 more
Would it be possible to have an optional "lazy" parsing mode of the eContent field to keep it as an opaque OCTET STRING instead of parsing its structure?
I'm trying to parse an Authenticode signature which has an invalid ASN.1 structure in the eContent field. The structure contains a BIT STRING encoded as
03 01 01, which is invalid since it's impossible to have 0 bits and a 1 bit padding:ASN1BitString detects it and throws an IllegalArgumentException "invalid pad bits detected":
Would it be possible to have an optional "lazy" parsing mode of the eContent field to keep it as an opaque OCTET STRING instead of parsing its structure?