X.509 RFCの「暗黙的にタグ付けされたモジュール」セクション:
CRLDistributionPoints ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint
DistributionPoint ::= SEQUENCE {
distributionPoint [0] DistributionPointName OPTIONAL,
reasons [1] ReasonFlags OPTIONAL,
cRLIssuer [2] GeneralNames OPTIONAL }
DistributionPointName ::= CHOICE {
fullName [0] GeneralNames,
nameRelativeToCRLIssuer [1] RelativeDistinguishedName }
GeneralName ::= CHOICE {
otherName [0] AnotherName,
rfc822Name [1] IA5String,
dNSName [2] IA5String,
x400Address [3] ORAddress,
directoryName [4] Name,
ediPartyName [5] EDIPartyName,
uniformResourceIdentifier [6] IA5String,
iPAddress [7] OCTET STRING,
registeredID [8] OBJECT IDENTIFIER }
X400Addressはどのようにエンコードされますか?このような?:
SEQUENCE {
SEQUENCE {
[0] {
[3] {
...
}
}
}
}
最初の[0]はDistributionPoint(DistributionPointNameの[0]タグを置き換えます)からのものであり、[3]はGeneralNameからのものです。
しかし、それが機能するはずの場合、DistributionPointにコンテキスト固有のタグがあるのはなぜですか?
次のようなものが得られます。
SEQUENCE {
SEQUENCE {
[0] {
[0] {
[3] {
...
}
}
}
}
}
説明:
タグは暗黙的であると想定されていますが(IMPLICIT TAGS
で宣言されたモジュール内にあるため)、暗黙的タグをCHOICE
に適用することはできません(そうしないと、CHOICE
がまったく機能しないため) 、そのため、その状況では自動的にexplicitタグに変換されます。ここで、distributionPoint
フィールドの[0]
タグはこのような状況にあるため、DistributionPointName
フィールドのタグを置き換えるのではなくラップアラウンドします。これは[0]
でもあります。
fullName
のタイプはGeneralNames
、notGeneralName
であることに注意してください。メッセージにGeneralNames
を引用しないでください。それはSEQUENCE OF GeneralName
です。 fullName
フィールドの[0]
暗黙タグは、暗黙的であるため、SEQUENCE
のタグを置き換えます。
最初の点については、X.680の28.6節(1994バージョンから)で指定されています。
タグ付け構造は、次のいずれかが当てはまる場合に明示的なタグ付けを指定します。
a)「タグEXPLICITタイプ」の代替が使用されます。
b)「タグタイプ」の代替が使用され、モジュールの「TagDefault」の値が「EXPLICITTAGS」であるか空です。
c)「タグタイプ」の代替が使用され、モジュールの「TagDefault」の値は「IMPLICITTAGS」または「AUTOMATICTAGS」ですが、「Type」で定義されるタイプは、選択タイプ、オープンタイプ、または「 DummyReference」(ITU-TRec。X.683| ISO/IEC 8824-4、条項8.3を参照)。
最後の節(c)は私が上で説明したものです。