encodingopensslcryptographyderpyasn1

Where is my interpretation of ASN1 der wrong?


Here is what my structure looks like:

 SET OF
  SEQUENCE:
     INTEGER: XX
     INTEGER: YY

My encoding looks like this:

11 08 10 06 02 01 XX 02 01 YY        

11 08 -- SET OF
10 06 -- SEQUENCE 

However, when I decode with openssl, I don't see the expected output. It looks like

  0:d=0  hl=2 l=   8 prim: SET               
      0000 - 10 06 02 01 XX 02 01 YY-  

This is not what I expected to see. (Look at the structure I wanted it to look like)

I am not sure what I am missing. Any help would be much appreciated.


Solution

  • A SET and SEQUENCE are constructed types. That means that the bit that indicates a constructed type in the tag needs to be set. That would be bit 5 or 6 (depending if you start with bit 0 or 1). If the bit isn't set then the parser will view it as a primitive type, which means it has a single value instead of children. This is why you get prim in your output. The tag number is still 17 or 16 which denotes a SET OF or SEQUENCE, so the structure is still seen to be a SET.

    So instead of 11 and 10 you should be using values 31 and 30. Then your code should parse correctly.