私はこのようなBER構造を持っています...
$ openssl asn1parse -inform der -in test.der -i -dump
????:d=4 hl=2 l=inf cons: cont [ 0 ]
????:d=5 hl=3 l= 240 prim: OCTET STRING
0000 - AABBCCDD
????:d=5 hl=2 l= 8 prim: OCTET STRING
0000 - EEFF
????:d=5 hl=2 l= 0 prim: EOC
...またはder2asciiスタイルで...
[0] `80`
OCTET_STRING { `AABBCCDD` }
OCTET_STRING { `EEFF` }
`0000`
私が知っていること: 0x0000 を含む場合など、プリミティブ型はあいまいさを導入する可能性があるため、不定長エンコーディングには構築された型が含まれている必要があります。知りたいこと: この BER 構造を解析するとき、デコーダはどのように動作する必要がありますか? 両方の OCTET STRING のヘッダー バイトがエンコードに含まれていますか? はいの場合、不定長のバイトデータはどのようにエンコードされますか? 2 番目の OCTET STRING がたとえば INTEGER の場合、アプリケーションは [0] とタグ付けされた TLV フィールドの値をどのように解釈しますか?
CMS 標準では、フィールドは単一の OCTET STRING として定義されているため、この質問をしていますが、ほとんどの BER エンコーディングでは、常に 2 つのフィールドが表示されます。これは、不定長エンコーディングのみによるものですか? 何か不足していますか?
ITU-T X.690 から:
8.1.4 内容オクテット
内容のオクテットは、0、1、または複数のオクテットで構成され、後続の節で指定されているデータ値をエンコードするものとします。
注 – 内容のオクテットは、データ値のタイプによって異なります。後続の句は、ASN.1 の型の定義と同じ順序に従います。
これは、構築されたすべての型を配置でき、アプリケーションは構築された TLV 構造の値部分のみを解釈する必要があるということですか?