Partager via


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
}

Système de type ASN.1

Encodage DER des types ASN.1

Distinguished Encoding Rules