Partager via


Types construits

Un type Abstract Syntax Notation One (ASN.1) construit est constitué de types de base, de types de chaînes 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é dans 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), d’une valeur booléenne qui identifie si l’extension est critique et un tableau d’octets qui contient la valeur. L’API d’inscription de certificat prend en charge les types ASN.1 construits suivants.

SEQUENCE et SEQUENCE OF

Balise d’encodage : 0x30

Contient une série ordonnée de champs d’un ou plusieurs types. Les champs peuvent être marqués FACULTATIF ou DEFAULT . En outre, pour éviter toute ambiguïté lors du décodage, les champs facultatifs successifs doivent différer de l’un de l’autre en utilisant un identificateur unique (entier entre crochets, tel que [1]) et à partir d’un champ obligatoire suivant, comme illustré dans 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 suivant. Les deux constructions ont la même valeur d’étiquette (0x30) lors de l’encodage.

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 approximativement à une structure et SEQUENCE OF équivaut approximativement à 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 SEQUENCE 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 FACULTATIF ou DEFAULT, et des identificateurs uniques doivent être utilisés pour lever l’ambiguïté du 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 toute ambiguïté lors du décodage. Encodé, la construction CHOICE aura la valeur de 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

règles d’encodage distinguées