views:

243

answers:

1

Hi all!

I got a RSA pubkey.dat (almost obvious what it is) that has the following structure on contents:

  • ASN1 Integer of around 1024 bits (Modulus)
  • ASN1 Integer (Exponent)
  • Blob of 256 bytes (Signature)

No tags like "----begin---" or so. pure hex values in it.

There's any way to identify its format like if it's DER/PEM/etc , so i can open it with python crypto libraries or crypto++ on c++?

(Or if it matches a public standard structure name for me to check)

Seems like its not PEM as M2crypt can't load it.

Thanks in advance.

A: 

PEM-encoding has mandatory format:

-----BEGIN typeName-----
base64 of DER value
-----END typeName-----

where, for public keys, typeName="PUBLIC KEY" (AFAIR) so that's very easy to check with a regular expression such as the following:

/-----BEGIN [^-]+-----([A-Za-z0-9+\/=\s]+)-----END [^-]+-----/

If it's not PEM, it's usually plain DER.

The DER representation of an ASN.1 SEQUENCE always begins with 0x30 so usually when I have to decode a DER-or-PEM stream which I know for sure it's an ASN.1 SEQUENCE (most complex values are SEQUENCEs, anyways) I check the first byte: if its's 0x30, I decode as DER, else I decode as PEM.

You can check your ASN.1 data quickly using my very own opensource ASN.1 parser (it's all client-side Javascript, so I won't see your data).

lapo