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
}
Argomenti correlati