Actualmente estoy creando un analizador ASN.1 que se supone que decodifica los certificados X.509v3 y los archivos de época en formato ASN.1 DER. El analizador está funcionando bien, aparte de un problema que parece que no pude entender. Si descifro el formato DER, veo que para la clave pública se usa la siguiente forma de BITSTRING:
BIT STRING, **encapsulates** {
SEQUENCE {
INTEGER
// public key hex string
pero cuando miro la firma, veo que está representada con BITSTRING sin la etiqueta encapsulates
y contiene solo el búfer hexadecimal de la firma:
SEQUENCE {
OBJECT IDENTIFIER sha256WithRSAEncryption (1 2 840 113549 1 1 11)
NULL
}
BIT STRING
// RAW signature hex buffer }
Es importante que mi analizador sepa si BITSTRING solo contendrá un búfer (como, en el caso de la firma) o si encapsulará algunos otros tipos (como en el caso de la clave pública). En la codificación DER de ambos no encontré ninguna diferencia que pueda implicar el uso de la encapsulación.
Mi pregunta es: ¿cómo puedo distinguir esos 2 escenarios en el código del analizador?