2013-10-13 6 views
1

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.)

Répondre

1

S'il y a deux composants avec le même type dans un SET ils ne peuvent en effet pas être distingués. L'exemple peut toujours être correct à condition qu'il apparaisse dans un module avec marquage automatique.

2

La norme (X.680, 27.3) exige que les types de composants d'un type SET aient tous des étiquettes différentes. Le type "Description" dans l'exemple viole cette exigence si le module ASN.1 englobant a IMPLICIT TAGS ou EXPLICIT TAGS (parce que les types des composants nom et prénom ont la même étiquette "universal 22"), mais il est légal que le module ASN.1 englobant ait des TAGS AUTOMATIQUES (parce que les types de ces composants ont maintenant des étiquettes différentes - respectivement "context-specific 0" et "context-specific 1" - qui leur sont automatiquement assignées en remplacement des étiquettes "universelles 22").