Je suis confus au sujet des limitations sur le type ASN.1 SET
. En général, je me rends compte qu'un type SET
est fondamentalement le même qu'un SEQUENCE
, sauf l'ordre des composants n'a pas d'importance.ASN.1 restrictions de type SET
Le livre séminal sur ASN.1, "ASN.1 — Communication Between Heterogeneous Systems" par Olivier Dubuisson, a ceci à dire au sujet DÉCORS:
Si l'ordre composant du type SEQUENCE n'a pas d'importance, le mot SET est utilisé Key- pour modéliser une telle structure non ordonnée:
Description ::= SET {
surname IA5String,
first-name IA5String,
age INTEGER }
Dans ce cas, l'application peut fournir les composants de la enc ou dans le meilleur ordre pour cela.
Ce que je remarque tout de suite ici est que dans l'exemple de Dubuisson, le SET
a deux types IA5String en elle. Cela semble contredire ce que j'ai lu here in this tutorial, qui dit explicitement que:
Les notations de type et de valeur pour SET sont similaires à SEQUENCE, sauf que doit être distincte du type de chaque composant de tous d'autres et les valeurs peuvent être dans n'importe quel ordre.
Alors comment un SET
légalement avoir deux types IA5String
? Je suis enclin à faire confiance au livre d'Olivier Dubuisson au cours d'un tutoriel Internet aléatoire, cependant, cela n'a aucun sens qu'un type SET
puisse avoir plusieurs composants du même type. La raison en est que, dans ASN.1, les identificateurs de type ne sont pas codés, (au moins pour les codages les plus courants comme BER) donc le décodeur n'aurait aucun moyen de savoir à quel composant le IA5String
s'applique - est-il surname
ou firstname
? Il n'y a aucun moyen de savoir si la commande n'a pas d'importance.
Alors Olivier Dubuisson a-t-il fait une grosse erreur ici? (Il ne mentionne nulle part dans sa longue description des types SET
quoi que ce soit sur le fait qu'un SET
ne peut avoir plus d'un de chaque type.)