次の方法で共有


構築された型

構築された 抽象構文表記 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
}

SEQUENCESEQUENCE OF の違いは、SEQUENCE OF コンストラクトの要素が同じ型である必要がある点です。 次の例を参照してください。 どちらのコンストラクトも、エンコード時に同じタグ値 (0x30) を持っています。

PolicyQualifiers ::=  SEQUENCE OF PolicyQualifierInfo

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

SEQUENCESEQUENCE OF の違いを確認するもう 1 つの方法は、C プログラミング言語の対応する言語と比較することです。 つまり、 SEQUENCE は構造体とほぼ同じで、 SEQUENCE OF は配列とほぼ同じです。

SET と SET OF

エンコード タグ: 0x31

1 つ以上の型の順序付けられていない一連のフィールドが含まれます。 これは、順序付きリストを含む SEQUENCE とは異なります。 順序なしのリストを指定すると、アプリケーションは、最も適切な順序でエンコーダーに構造フィールドを提供できます。 SEQUENCE と同様に、SET コンストラクトのフィールドは OPTIONAL または DEFAULT でマークでき、デコード プロセスを明確にするために一意の識別子を使用する必要があります。 SETSET 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
}

ASN.1 型システム

ASN.1 型の DER エンコード

Distinguished Encoding Rules