SET
ASN.1タイプの制限について混乱しています。一般に、コンポーネントの順序が重要でないことを除けば、SET
型は基本的に と同じであることがわかります。SEQUENCE
Olivier Dubuisson によるASN.1に関する独創的な本、「ASN.1 — Communication Between Heterogeneous Systems」では、SET について次のように述べられています。
SEQUENCE 型のコンポーネントの順序が問題にならない場合は、キーワード SET を使用して、そのような順序付けられていない構造をモデル化します。
Description ::= SET {
surname IA5String,
first-name IA5String,
age INTEGER }
この場合、アプリケーションはエンコーダーに最適な順序でコンポーネントを提供できます。
ここですぐに気付くのは、Dubuisson の例では、SET
に2 つのIA5String 型があることです。これは、このチュートリアルでここで読んだことと矛盾しているようです。
SET の型と値の表記は SEQUENCE と似ていますが、各コンポーネントの型は他のすべてのコンポーネントと区別する必要があり、値は任意の順序にすることができます。
SET
では、合法的に 2 つのIA5String
タイプを持つにはどうすればよいでしょうか。SET
私は、ランダムなインターネット チュートリアルよりも Olivier Dubuisson の本を信頼する傾向がありますが、型が同じ型の複数のコンポーネントを持つことができるということは意味がありません。その理由は、ASN.1 では型識別子がエンコードされていない(少なくとも BER のようなほとんどの一般的なエンコードでは) ため、デコーダーはどのコンポーネントにIA5String
適用されるsurname
かを知る方法がないためfirstname
です。順序が重要でないかどうかを判断する方法はありません。
では、オリヴィエ・デュブイソンはここで大きな間違いを犯したのでしょうか? (彼はまた、型の長い説明のどこにも、 aが各型を複数持てないSET
という事実について何も言及していません。)SET