Decodificatore ASN-DER (qualche volontario?)

di il
3 risposte

Decodificatore ASN-DER (qualche volontario?)

Essendo superpigro cerco aiuto da qualcuno più esperto per un decodificatore ASN (DER).
Con un certo sforzo (un paio d'ore) ho decodificato in parte il linguaggio.

Ma sarebbe tanto, ma proprio tanto, più comodo trovare un qualcosa già fatto, possibilmente col sorgente, così da portarlo in altri linguaggi
30 80 <I O="0" T="[UNIVERSAL 16]" TL="2" V="Indefinite" A="SEQUENCE">
  06 09 2A864886F70D010702    <P O="2" T="[UNIVERSAL 6]" TL="2" V="9" A="OBJECT IDENTIFIER" F>1.2.840.113549.1.7.2</P>
  A0 80  <I O="13" T="[0]" TL="2" V="Indefinite">
    30 80    <I O="15" T="[UNIVERSAL 16]" TL="2" V="Indefinite" A="SEQUENCE">
      02 01 03      <P O="17" T="[UNIVERSAL 2]" TL="2" V="1" A="INTEGER" F>3</P>
      31 0F      <C O="20" T="[UNIVERSAL 17]" TL="2" V="15" A="SET">
        30 0D        <C O="22" T="[UNIVERSAL 16]" TL="2" V="13" A="SEQUENCE">
          06 09 60 86 48 01 65 03 04 02 01          <P O="24" T="[UNIVERSAL 6]" TL="2" V="9" A="OBJECT IDENTIFIER" F>2.16.840.1.101.3.4.2.1</P>
          05 00          <P O="35" T="[UNIVERSAL 5]" TL="2" V="0" A="NULL"></P>
                </C O="37" T="[UNIVERSAL 16]" A="SEQUENCE" L="15">
            </C O="37" T="[UNIVERSAL 17]" A="SET" L="17">
      30 80      <I O="37" T="[UNIVERSAL 16]" TL="2" V="Indefinite" A="SEQUENCE">
      06 09  2A864886F70D010701          <P O="39" T="[UNIVERSAL 6]" TL="2" V="9" A="OBJECT IDENTIFIER" F>1.2.840.113549.1.7.1</P>
                <I O="50" T="[0]" TL="2" V="Indefinite">
            24 80       <I O="52" T="[UNIVERSAL 4]" TL="2" V="Indefinite" A="OCTET STRING">
                        <P O="54" T="[UNIVERSAL 4]" TL="4" V="1024" A="OCTET STRING">&#x3c;?xml version="1.0" encoding="UTF-8"?&#x3e;&#x3c;?xml-stylesheet type="text/xsl" href="fatturaordinaria_v1.2.1.xsl"?&#x3e;&#x3c;ns0:FatturaElettronica xmlns:ns0="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2" versione="FPR12"&#x3e;&#x0a;    &#x3c;FatturaElettronicaHeader xmlns:ns0="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2"&#x3e;&#x0a;        &#x3c;DatiTrasmissione&#x3e;&#x0a;            &#x3c;IdTrasmittente&#x3e;&#x0a;                &#x3c;IdPaese&#x3e;IT&#x3c;/IdPaese&#x3e;&#x0a;                &#x3c;IdCodice&#x3e;00484960588&#x3c;/IdCodice&#x3e;&#x0a;            &#x3c;/IdTrasmittente&#x3e;&#x0a;            &#x3c;ProgressivoInvio&#x3e;0001129974&#x3c;/ProgressivoInvio&#x3e;&#x0a;            &#x3c;FormatoTrasmissione&#x3e;FPR12&#x3c;/FormatoTrasmissione&#x3e;&#x0a;            &#x3c;CodiceDestinatario&#x3e;0000000&#x3c;/CodiceDestinatario&#x3e;&#x0a;            
Traduzione: è l'implementazione di uno sfirmatore p7m "intelligente" (cioè con decodifica "giusta" dell'header, non con approccio superbrutale tipo taglia tutto che ho già fatto).
Servirebbe principalmente per i file MIME con firma CAdES.


Essenzialmente, come normale nel linguaggio ASN.1, ci sono un certo numero di sequenze di byte nelle quali sono indicate le lunghezze e il tipo o - talvolta - lunghezza indefinita.
Poi c'è il payload fatto da octet-string lunghi 1024, cioè
04 820400(1024)
Questo spiega perchè dentro i file firmati ci sono, ogni tanto, dei byte 04 80/81/82: sono proprio gli indicatori dei blocchi binari.

E vabbè.

Però l'header e il footer può essere piuttosto complesso, ecco perchè non dover reinventare la ruota mi risparmierebbe un bel po' di tempo.

3 Risposte

Devi accedere o registrarti per scrivere nel forum
3 risposte