Types construits
Un type de notation de syntaxe abstraite construit un (ASN.1) est constitué de types de base, de types de chaîne ou d’autres types construits. Par exemple, une extension de certificat X.509 est composée de trois types ASN.1 de base, comme illustré par l’exemple suivant.
Extension ::= SEQUENCE
{
extnId OBJECT IDENTIFIER,
critical BOOLEAN DEFAULT FALSE,
extnValue OCTET STRING
}
Une extension se compose d’un identificateur d’objet (OID), une valeur booléenne qui identifie si l’extension est critique et un tableau d’octets qui contient la valeur. L’API Inscription de certificat prend en charge les types ASN.1 construits suivants.
SÉQUENCE ET SÉQUENCE DE
Balise d’encodage : 0x30
Contient une série ordonnée de champs d’un ou plusieurs types. Les champs peuvent être marquésOPTIONAL ou DEFAULT. En outre, pour éviter toute ambiguïté lors du décodage, les champs facultatifs successifs doivent différer d’un autre en utilisant un identificateur unique (entier entre crochets comme [1]) et à partir d’un champ obligatoire suivant, comme illustré par l’exemple suivant.
SomeValue ::= SEQUENCE
{
a INTEGER,
b [0] INTEGER OPTIONAL,
c [1] INTEGER DEFAULT 1,
d INTEGER
}
La différence entre SEQUENCE et SEQUENCE OF est que les éléments d’une construction SEQUENCE OF doivent être du même type. Consultez l’exemple qui suit. Les deux constructions ont la même valeur de balise (0x30) quand elles sont encodées.
PolicyQualifiers ::= SEQUENCE OF PolicyQualifierInfo
PolicyQualifierInfo ::= SEQUENCE
{
policyQualifierId OBJECT IDENTIFIER,
qualifier ANY OPTIONAL
}
Une autre façon d’examiner la différence entre SEQUENCE et SEQUENCE OF consiste à les comparer à leurs équivalents dans le langage de programmation C. Autrement dit, SEQUENCE équivaut à une structure et SEQUENCE OF équivaut à peu près à un tableau.
SET et SET OF
Balise d’encodage : 0x31
Contient une série non ordonnée de champs d’un ou plusieurs types. Cela diffère d’une séquence qui contient une liste ordonnée. La spécification d’une liste non ordonnée permet à une application de fournir les champs de structure à l’encodeur dans l’ordre le plus approprié. Comme avec SEQUENCE, les champs d’une construction SET peuvent être marqués avec OPTIONAL ou DEFAULT, et les identificateurs uniques doivent être utilisés pour désambiguer le processus de décodage. La différence entre SET et SET OF est que les éléments d’une construction SET OF doivent être du même type.
Name ::= SEQUENCE OF RelativeDistinguishedName
RelativeDistinguishedName ::= SET OF AttributeTypeValue
AttributeTypeValue ::= SEQUENCE
{
type OBJECT IDENTIFIER,
value ANY
}
CHOIX
Balise d’encodage : non applicable
Définit un choix entre les alternatives. Chaque alternative doit être identifiée de manière unique par un entier entre crochets pour éviter l’ambiguïté lors du décodage. Quand elle est encodée, la construction CHOICE aura la valeur de la balise d’encodage de l’alternative choisie.
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
}
Rubriques connexes