構築された型
構築された 抽象構文表記 1 (ASN.1) 型は、基本型、文字列型、またはその他の構築された型から構成されます。 たとえば、X.509 証明書拡張機能は、次の例に示すように、3 種類の基本的な ASN.1 から構成されます。
Extension ::= SEQUENCE
{
extnId OBJECT IDENTIFIER,
critical BOOLEAN DEFAULT FALSE,
extnValue OCTET STRING
}
拡張機能は 、オブジェクト識別子 (OID)、拡張が重要かどうかを識別するブール値、および値を含むバイト配列で構成されます。 証明書登録 API は、次の構築された ASN.1 型をサポートしています。
SEQUENCE と SEQUENCE OF
エンコード タグ: 0x30
1 つ以上の型の順序付き一連のフィールドが含まれます。 フィールドは、OPTIONAL または DEFAULT とマークできます。 また、デコード時にあいまいさを回避するために、一意の識別子 ([1] などの角かっこで囲まれた整数) と、次の例に示すように次の必須フィールドを使用して、連続する省略可能なフィールドが互いに異なっている必要があります。
SomeValue ::= SEQUENCE
{
a INTEGER,
b [0] INTEGER OPTIONAL,
c [1] INTEGER DEFAULT 1,
d INTEGER
}
SEQUENCE と SEQUENCE OF の違いは、SEQUENCE OF コンストラクトの要素が同じ型である必要がある点です。 次の例を参照してください。 どちらのコンストラクトも、エンコード時に同じタグ値 (0x30) を持っています。
PolicyQualifiers ::= SEQUENCE OF PolicyQualifierInfo
PolicyQualifierInfo ::= SEQUENCE
{
policyQualifierId OBJECT IDENTIFIER,
qualifier ANY OPTIONAL
}
SEQUENCE と SEQUENCE OF の違いを確認するもう 1 つの方法は、C プログラミング言語の対応する言語と比較することです。 つまり、 SEQUENCE は構造体とほぼ同じで、 SEQUENCE OF は配列とほぼ同じです。
SET と SET OF
エンコード タグ: 0x31
1 つ以上の型の順序付けられていない一連のフィールドが含まれます。 これは、順序付きリストを含む SEQUENCE とは異なります。 順序なしのリストを指定すると、アプリケーションは、最も適切な順序でエンコーダーに構造フィールドを提供できます。 SEQUENCE と同様に、SET コンストラクトのフィールドは OPTIONAL または DEFAULT でマークでき、デコード プロセスを明確にするために一意の識別子を使用する必要があります。 SET と SET OF の違いは、SET OF コンストラクトの要素が同じ型である必要がある点です。
Name ::= SEQUENCE OF RelativeDistinguishedName
RelativeDistinguishedName ::= SET OF AttributeTypeValue
AttributeTypeValue ::= SEQUENCE
{
type OBJECT IDENTIFIER,
value ANY
}
選択
エンコード タグ: 適用できません
代替の選択肢を定義します。 デコード時のあいまいさを回避するには、各代替方法を角かっこで囲まれた整数で一意に識別する必要があります。 エンコードすると、 CHOICE コンストラクトには、選択した代替のエンコード タグ値が含まれます。
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
}
関連トピック