Attualmente sto costruendo un parser ASN.1 che dovrebbe decodificare i certificati X.509v3 ed i file epoch in formato DER ASN.1. Il parser funziona bene a parte un problema che non riesco a ottenere. Se decodifico il formato DER, vedo che per la chiave pubblica viene utilizzata la seguente forma di BITSTRING:
BIT STRING, **encapsulates** {
SEQUENCE {
INTEGER
// public key hex string
ma quando guardo la firma vedo che è rappresentato con BITSTRING senza il tag encapsulates
e contiene solo il buffer esadecimale della firma:
SEQUENCE {
OBJECT IDENTIFIER sha256WithRSAEncryption (1 2 840 113549 1 1 11)
NULL
}
BIT STRING
// RAW signature hex buffer }
È importante che il mio parser sappia se il BITSTRING conterrà solo un buffer (come nel caso della firma) o incapsulerà altri tipi (come nel caso della chiave pubblica). Nella codifica DER di entrambi non ho trovato alcuna differenza che possa implicare l'uso dell'incapsulamento.
La mia domanda è: come posso distinguere questi due scenari nel codice parser?