asn1.js icon indicating copy to clipboard operation
asn1.js copied to clipboard

issue with contains()

Open panva opened this issue 5 years ago • 6 comments

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.

panva avatar Mar 26 '19 19:03 panva

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!

felix avatar Mar 27 '19 04:03 felix

@panva encountering the exact same issue here: https://github.com/digitalbazaar/crypto-ld/compare/node-12#diff-19ce09a32f875322daf2628d6aceb210R31

Any luck finding a solution?

mattcollier avatar Jul 13 '19 01:07 mattcollier

@mattcollier nope, i work around it for my needs.

https://github.com/panva/jose/blob/v1.4.0/lib/help/key_utils.js#L272

panva avatar Jul 13 '19 08:07 panva

I suppose the first step would be to create the simplest test using contains that generates the incorrect sequence.

felix avatar Jul 18 '19 04:07 felix

@felix is the one in the description not simple enough?

panva avatar Jul 18 '19 04:07 panva

It is, my apologies.

felix avatar Jul 21 '19 12:07 felix