How do you serialise/deseialise DER/BER into a naviagable structure C/C++?

  asn1, c++, der, openssl

Does anyone know of any C/C++ libraries where it is possible to serialise an unknown DER into a structure which can be navigated.

For Example:

Say I have the DER

Hello ::= SEQUENCE {
   myInt INTEGER,
   myBool BOOLEAN,
   myStr UTF8String

as an encoding. I want the ability to parse this sequence into a C Structure where I could navigate. I.E.

unsigned char *myDer = { 0x30, ..., 0x02, 0x01,0x12, ... };
AsnObj obj(myDer);
AsnObj *children = obj.getChildren();
for(int i=0;i<children->size();++i) {
   AsnObj child = children.getChild(i);
   /* Do something with this child */

I have looked at various tools like asn1-compiler, but this seemed like it assumed you know what the structure is.

I also looked at snacc, but I was struggling to get anything compiled with this and again seemed a bit obtuse. I think ffasn1c would work, but it requires a license which I can’t get.

I known OpenSSL would have to do something similar, like d2i_X509 but this is assuming it’s an X509 which it isn’t. Is there a method on OpenSSL that would enable you to parse and iterate over a DER?

Any help much appreciated.


Source: StackOverflow C++