Compartir a través de


Tipos construidos

Un tipo de notación de sintaxis abstracta construida ( ASN.1) se compone de tipos básicos, tipos de cadena u otros tipos construidos. Por ejemplo, una extensión de certificado X.509 se compone de tres tipos básicos de ASN.1, como se muestra en el ejemplo siguiente.

Extension ::= SEQUENCE 
{
   extnId              OBJECT IDENTIFIER,
   critical            BOOLEAN DEFAULT FALSE,
   extnValue           OCTET STRING
}

Una extensión consta de un identificador de objeto (OID), un valor booleano que identifica si la extensión es crítica y una matriz de bytes que contiene el valor. La API de inscripción de certificados admite los siguientes tipos de ASN.1 construidos.

SEQUENCE y SEQUENCE OF

Etiqueta de codificación: 0x30

Contiene una serie ordenada de campos de uno o varios tipos. Los campos se pueden marcarcomo OPTIONAL o DEFAULT. Además, para evitar ambigüedad al descodificar, los campos opcionales sucesivos deben diferir entre sí mediante el uso de un identificador único (un entero entre corchetes como [1]) y de un campo obligatorio siguiente, como se muestra en el ejemplo siguiente.

SomeValue ::= SEQUENCE 
{
   a     INTEGER,
   b     [0] INTEGER OPTIONAL,
   c     [1] INTEGER DEFAULT 1,
   d     INTEGER
}

La diferencia entre SEQUENCE y SEQUENCE OF es que los elementos de una construcción SEQUENCE OF deben ser del mismo tipo. Consulte el ejemplo siguiente. Ambas construcciones tienen el mismo valor de etiqueta (0x30) cuando están codificados.

PolicyQualifiers ::=  SEQUENCE OF PolicyQualifierInfo

PolicyQualifierInfo ::= SEQUENCE 
{
   policyQualifierId   OBJECT IDENTIFIER,
   qualifier           ANY OPTIONAL
}

Otra manera de examinar la diferencia entre SEQUENCE y SEQUENCE OF es compararlos con sus homólogos en el lenguaje de programación C. Es decir, SEQUENCE es aproximadamente equivalente a una estructura y SEQUENCE OF es aproximadamente equivalente a una matriz.

SET y SET OF

Etiqueta de codificación: 0x31

Contiene una serie desordenada de campos de uno o varios tipos. Esto difiere de una secuencia que contiene una lista ordenada. Especificar una lista desordenada permite a una aplicación proporcionar los campos de estructura al codificador en el orden más adecuado. Al igual que sucede con SEQUENCE, los campos de una construcción SET se pueden marcar con OPTIONAL o DEFAULT, y los identificadores únicos se deben usar para eliminar la ambigüedad del proceso de descodificación. La diferencia entre SET y SET OF es que los elementos de una construcción SET OF deben ser del mismo tipo.

Name ::= SEQUENCE OF RelativeDistinguishedName

RelativeDistinguishedName ::= SET OF AttributeTypeValue

AttributeTypeValue ::= SEQUENCE 
{
   type       OBJECT IDENTIFIER,
   value      ANY 
}

ELECCIÓN

Etiqueta de codificación: no aplicable

Define una opción entre alternativas. Cada alternativa debe identificarse de forma única mediante un entero entre corchetes para evitar ambigüedades al descodificar. Cuando se codifica, la construcción CHOICE tendrá el valor de etiqueta de codificación de la alternativa elegida.

AltNames ::= SEQUENCE OF GeneralName

GeneralNames ::= AltNames

GeneralName ::= CHOICE 
{
   otherName               [0] IMPLICIT OtherName,
   rfc822Name              [1] IMPLICIT IA5String,
   dNSName                 [2] IMPLICIT IA5String,
   x400Address             [3] IMPLICIT SeqOfAny,
   directoryName           [4] EXPLICIT Name,
   ediPartyName            [5] IMPLICIT SEQUENCE OF ANY,
   uniformResourceLocator  [6] IMPLICIT IA5String,
   iPAddress               [7] IMPLICIT OCTET STRING,
   registeredID            [8] IMPLICIT OBJECT IDENTIFIER
}

Sistema de tipos ASN.1

Codificación DER de tipos ASN.1

reglas de codificación distinguida