Share via


Tipi costruiti

Un tipo ASN.1 ( Abstract Syntax Notation One ) costruito è costituito da tipi di base, tipi stringa o altri tipi costruiti. Ad esempio, un'estensione del certificato X.509 è costituita da tre tipi ASN.1 di base, come illustrato nell'esempio seguente.

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

Un'estensione è costituita da un identificatore di oggetto (OID), un valore booleano che identifica se l'estensione è critica e una matrice di byte che contiene il valore. L'API Di registrazione certificati supporta i tipi ASN.1 costruiti seguenti.

SEQUENZA e SEQUENZA DI

Tag di codifica: 0x30

Contiene una serie ordinata di campi di uno o più tipi. I campi possono esserecontrassegnati come OPTIONAL o DEFAULT. Inoltre, per evitare ambiguità durante la decodifica, i campi facoltativi successivi devono differire l'uno dall'altro usando un identificatore univoco (un numero intero tra parentesi, ad esempio [1]) e da un campo obbligatorio seguente, come illustrato nell'esempio seguente.

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

La differenza tra SEQUENCE e SEQUENCE OF è che gli elementi di un costrutto SEQUENCE OF devono essere dello stesso tipo. Vedere l'esempio seguente. Entrambi i costrutti hanno lo stesso valore di tag (0x30) quando viene codificato.

PolicyQualifiers ::=  SEQUENCE OF PolicyQualifierInfo

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

Un altro modo per esaminare la differenza tra SEQUENCE e SEQUENCE OF consiste nel confrontarli con le controparti nel linguaggio di programmazione C. Ovvero , SEQUENCE è approssimativamente equivalente a una struttura e SEQUENCE OF è approssimativamente equivalente a una matrice.

SET e SET OF

Tag di codifica: 0x31

Contiene una serie non ordinata di campi di uno o più tipi. Questo comportamento differisce da una sequenza che contiene un elenco ordinato. Se si specifica un elenco non ordinato, un'applicazione consente a un'applicazione di fornire i campi della struttura al codificatore nell'ordine più appropriato. Come per SEQUENCE, i campi di un costrutto SET possono essere contrassegnati con OPTIONAL o DEFAULT e gli identificatori univoci devono essere usati per disambiguare il processo di decodifica. La differenza tra SET e SET OF è che gli elementi di un costrutto SET OF devono essere dello stesso tipo.

Name ::= SEQUENCE OF RelativeDistinguishedName

RelativeDistinguishedName ::= SET OF AttributeTypeValue

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

SCELTA

Tag di codifica: non applicabile

Definisce una scelta tra alternative. Ogni alternativa deve essere identificata in modo univoco da un intero tra parentesi quadre per evitare ambiguità durante la decodifica. Quando viene codificato, il costrutto CHOICE avrà il valore del tag di codifica dell'alternativa scelta.

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 di tipi ASN.1

Codifica DER dei tipi ASN.1

Distinguished Encoding Rules