asn1.js
asn1.js copied to clipboard
issue with contains()
Assume the following
const asn = require('asn1.js')
const Bar = asn.define('Bar', function () {
this.octstr().contains().obj(
this.key('bar').octstr()
)
})
const Foo = asn.define('Foo', function () {
this.seq().obj(
this.key('foo').use(Bar)
)
})
Foo.encode({
foo: { bar: Buffer.from('bar') }
}, 'der').toString('base64')
The output i'm expecting is
<Buffer 30 07 04 05 04 03 62 61 72>
^^ ✅
But i'm instead getting
<Buffer 30 07 24 05 04 03 62 61 72>
^^ ❌
I went back and forth with the definitions and couldn't get this to be what i need. I can see very little examples around this.
@felix / @indutny, this was added in #59, i could very much use your hand in figuring out if this is a problem with the feature or my definition.
I have not worked with ASN.1 for a while now but off the top of my head is that the difference between BER and DER, DER should prefer constructed definite-length encoding. So perhaps your expectation is actually BER and it is producing DER. I may well be wrong!
@panva encountering the exact same issue here: https://github.com/digitalbazaar/crypto-ld/compare/node-12#diff-19ce09a32f875322daf2628d6aceb210R31
Any luck finding a solution?
@mattcollier nope, i work around it for my needs.
https://github.com/panva/jose/blob/v1.4.0/lib/help/key_utils.js#L272
I suppose the first step would be to create the simplest test using contains that generates the incorrect sequence.
@felix is the one in the description not simple enough?
It is, my apologies.