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
}
Temas relacionados