Groupe de travail Réseau	S. Legg, eB2Bcom
Request for Comments : 4792	janvier 2007
RFC mise à jour : 3641
Catégorie : Sur la voie de la normalisation	Traduction Claude Brière de L'Isle

Instructions de codage pour les règles génériques de codage de chaîne (GSER)

Statut du présent mémoire
Le présent document spécifie un protocole de l’Internet en cours de normalisation pour la communauté de l’Internet, et appelle à des discussions et suggestions pour son amélioration. Prière de se référer à l’édition en cours des "Protocoles officiels de l’Internet" (STD 1) pour voir l’état de normalisation et le statut de ce protocole. La distribution du présent mémoire n’est soumise à aucune restriction.

Notice de Copyright
Copyright (C) The Internet Society (2007).

Résumé
La notation de syntaxe abstraite n° 1 (ASN.1, Abstract Syntax Notation One) définit un cadre général pour les types d'annotation dans une spécification ASN.1 avec des instructions de codage qui altèrent la façon dont les valeurs de ces types sont codées en accord avec les règles de codage ASN.1. Le présent document définit la notation de prise en charge des instructions de codage qui s'appliquent aux règles génériques de codage de chaîne (GSER, Generic String Encoding Rules) et, en particulier, définit une instruction de codage pour fournir une représentation traitable par la machine pour la déclaration d'un type GSER ChoiceOfStrings.
Table des matières
1. Introduction	1
2. Conventions	1
3. Notation pour les instructions de codage GSER	2
4. Instruction de codage CHOICE-OF-STRINGS	2
4.1 Effet sur les codages GSER	3
4.2 Remplacement des déclarations ChoiceOfStrings existantes	4
5. Considérations sur la sécurité	4
6. Références normatives	5
Adresse de l'auteur	5
Déclaration complète de droits de reproduction	5

 	1.	Introduction

La notation de syntaxe abstraite n° 1 (ASN.1, Abstract Syntax Notation One) définit un cadre général pour les types d'annotation dans une spécification ASN.1 avec des instructions de codage [X.680-1] qui altèrent la façon dont les valeurs de ces types sont codées en accord avec les règles de codage ASN.1. Le présent document définit la notation de prise en charge des instructions de codage qui s'appliquent aux règles génériques de codage de chaîne (GSER, Generic String Encoding Rules) [RFC3641], et, en particulier, définit une instruction de codage pour fournir une représentation traitable par la machine pour la déclaration d'un type GSER ChoiceOfStrings.

L'instruction de codage CHOICE-OF-STRINGS DEVRAIT être utilisée au lieu de simplement déclarer un type ChoiceOfStrings.

 	2.	Conventions

Les mots clés "DOIT", "NE DOIT PAS", "EXIGE", "DEVRA", "NE DEVRA PAS", "DEVRAIT", "NE DEVRAIT PAS", "RECOMMANDE", "PEUT", et "FACULTATIF" en majuscules dans ce document sont à interpréter comme décrit dans le BCP 14, [RFC2119].

Dans le présent document, "type" devra être compris comme signifiant un type ASN.1, et "valeur" devra être compris comme signifiant une valeur abstraite ASN.1, sauf qualification contraire.

Une référence à une production ASN.1 [X.680] (par exemple, Type, NamedType) est une référence au texte dans une spécification ASN.1 qui correspond à cette production.

 	3.	Notation pour les instructions de codage GSER

La grammaire de l'ASN.1 permet l'application d'instructions  de codage [X.680-1], par des préfixes de type et des sections de contrôle de codage, qui modifient la façon dont les valeurs abstraites sont codées par des règles de codage désignées.

La notation générique pour les préfixes de type et les sections de contrôle de codage est définie par la notation de base de l'ASN.1 [X.680] ,[X.680-1], et inclut une référence de codage pour identifier les règles spécifiques de codage qui sont affectées par l'instruction de codage.

La référence de codage qui identifie les règles génériques de codage de chaîne est littéralement GSER.

La notation spécifique pour une instruction de codage pour un ensemble particulier de règles de codage est laissée à la spécification de ces règles de codage. Par conséquent, ce document d'accompagnement de la spécification GSER [RFC3641] définit la notation pour les instructions de codage GSER. Précisément, elle élabore les productions fourre-tout EncodingInstruction et EncodingInstructionAssignmentList de la notation de base ASN.1.

Dans le contexte de la référence de codage GSER la production EncodingInstruction est définie comme suit, en utilisant les conventions de la notation de base ASN.1 :

EncodingInstruction ::= ChoiceOfStringsInstruction

Dans le contexte de la référence de codage GSER la production EncodingInstructionAssignmentList (qui n'apparaît que dans une section de contrôle de codage) est vide :

EncodingInstructionAssignmentList ::= vide

 	4.	Instruction de codage CHOICE-OF-STRINGS

L'instruction de codage CHOICE-OF-STRINGS permet à un codeur GSER de coder les alternatives d'un CHOICE (de types de chaîne restreint) sans l'identifiant en tête. La PrecedenceList facultative permet aussi à un rédacteur de spécification d'altérer l'ordre dans lequel un décodeur GSER va considérer les alternatives du CHOICE lorsque il détermine quelles alternatives ont été codées quand l'identifiant est absent.

La notation pour une instruction de codage CHOICE-OF-STRINGS est définie comme suit :

UnionInstruction ::= "CHOICE-OF-STRINGS" AlternativesPrecedence ?

AlternativesPrecedence ::= "PRECEDENCE" PrecedenceList

PrecedenceList ::= identifiant PrecedenceList ?

Le type dans le EncodingPrefixedType pour une instruction de codage CHOICE-OF-STRINGS DEVRA être :
(a)	un BuiltinType qui est un ChoiceType, ou
(b)	un ConstrainedType qui n'est pas un TypeWithConstraint où le type dans le ConstrainedType est un de (a) à (d), ou
©	un BuiltinType qui est un PrefixedType qui est un TaggedType où le type dans le TaggedType est un de (a) à (d), ou
(d)	un BuiltinType qui est un PrefixedType qui est un EncodingPrefixedType où le type dans le EncodingPrefixedType est un de (a) à (d).

L'effet de cette condition est de forcer l'instruction de codage CHOICE-OF-STRINGS à être textuellement colocalisée avec la définition de type CHOICE à laquelle elle s'applique. Cela rend clair pour le lecteur que l'instruction de codage s'applique à toute utilisation du type CHOICE sans considération de la façon dont il pourrait être référencé.

Le ChoiceType dans le cas (a) est dit être "sujet à" l'instruction de codage CHOICE-OF-STRINGS.

Le type de chaque NamedType de ChoiceType dans le cas (a) DOIT être :
(1)	NumericString, PrintableString, TeletexString (T61String), VideotexString, IA5String, GraphicString, VisibleString (ISO646String), GeneralString, BMPString, UniversalString, ou UTF8String type, ou
(2)	une notation de type qui fait référence à un type qui est un de (1) à (4), ou
(3)	un type contraint où le type qui est contraint est un de (1) à (4), ou
(4)	un type préfixé où le type qui est préfixé est un de (1) à (4).

Note : un type étiqueté est un cas particulier de type préfixé. Un effet du cas (4) est que l'étiquetage n'est pas significatif.

Le type ASN.1 de chaîne restreinte dans le cas (1) DOIT être différent pour chaque NamedType dans le ChoiceType, c'est-à-dire, deux alternatives n'ont pas le même type de chaîne restreinte.

Si le cas (3) s'applique à tout NamedType, alors la contrainte du cas (3) DOIT être la même pour chaque NamedType, c'est-à-dire, soit aucune des alternatives n'a de contrainte, soit toutes les alternatives ont exactement la même contrainte.

Chaque identifiant dans la PrecedenceList DOIT être l'identifiant d'un NamedType du ChoiceType.

Un identifiant particulier NE DEVRA PAS apparaître plus d'une fois dans la même PrecedenceList.

 	4.1	Effet sur les codages GSER
Une valeur d'un type CHOICE est codée en accord avec la règle <ChoiceValue> [RFC3641] de forme Backus-Naur augmenté [RFC4234]. L'ABNF pour <ChoiceValue> est reproduit ici pour l'agrément du lecteur :

ChoiceValue = IdentifiedChoiceValue / ChoiceOfStringsValue

IdentifiedChoiceValue = identifiant ":" Valeur
ChoiceOfStringsValue  = StringValue

La règle <IdentifiedChoiceValue> DOIT être utilisée pour coder les valeurs d'un type CHOICE où le ChoiceType n'est pas sujet à une instruction de codage CHOICE-OF-STRINGS.

L'alternative choisie d'une valeur d'un type CHOICE correspond à un NamedType dans la définition du type. Le <identifiant> dans la <IdentifiedChoiceValue> est l'identifiant de ce NamedType.

La règle <IdentifiedChoiceValue> ou la règle <ChoiceOfStringsValue> est utilisée pour coder les valeurs d'un type CHOICE où le ChoiceType est soumis à une instruction de codage CHOICE-OF-STRINGS.

Si <ChoiceOfStringsValue> a été utilisé, un décodeur GSER DOIT alors déterminer l'alternative choisie en considérant les alternatives de CHOICE dans l'ordre prescrit ci-dessous et en acceptant la première alternative qui permet tous les caractères dans la <StringValue>.

Si l'instruction de codage de CHOICE-OF-STRINGS a une PrecedenceList, alors les alternatives du type de choix référencées par la PrecedenceList sont considérées dans l'ordre identifié par cette PrecedenceList, et ensuite les alternatives restantes sont considérées dans l'ordre de leur définition dans le type de choix. Si l'instruction de codage de CHOICE-OF-STRINGS n'a pas de PrecedenceList, alors toutes les alternatives du type de choix sont considérées dans l'ordre de leur définition dans le ChoiceType.

Un codeur GSER DOIT utiliser <IdentifiedChoiceValue> si un décodeur GSER devrait déterminer l'alternative choisie comme étant quelque chose d'autre que l'alternative choisie de la valeur de CHOICE codée ; autrement, <ChoiceOfStringsValue> PEUT être utilisé.

Exemple :

Considérons cette définition de type :

[GSER:CHOICE-OF-STRINGS PRECEDENCE basicName] CHOICE {
    extendedName  UTF8String,
    basicName         PrintableString
}

Si une <ChoiceOfStringsValue> a été utilisée, un décodeur GSER va alors d'abord considérer si la <StringValue> était un basicName (une chaîne imprimable) valide avant de considérer si elle était un extendedName (une chaîne UTF8) valide.

 	4.2	Remplacement des déclarations ChoiceOfStrings existantes
En ligne avec la déclaration précédente [RFC3641] du type DirectoryString comme type ChoiceOfStrings, les applications qui utilisent GSER DOIVENT ajouter cette instruction de codage :

[GSER:CHOICE-OF-STRINGS PRECEDENCE printableString uTF8String]

immédiatement avant le mot clé "CHOICE" dans la définition du type DirectoryString dans la troisième édition et chacune des suivantes du module ASN.1 SelectedAttributeTypes de X.520 [X.520-3], [X.520-4], [X.520-5].

Par exemple, ceci est la façon dont la définition de DirectoryString apparaîtrait dans les troisième, quatrième et cinquième éditions :

DirectoryString{INTEGER:maxSize} ::=
[GSER:CHOICE-OF-STRINGS PRECEDENCE printableString uTF8String]
CHOICE {
    teletexString      TeletexString(SIZE (1..maxSize)),
    printableString   PrintableString(SIZE (1..maxSize)),
    universalString   UniversalString(SIZE (1..maxSize)),
    bmpString           BMPString(SIZE (1..maxSize)),
    uTF8String         UTF8String(SIZE (1..maxSize))
}

L'alternative uTF8String n'apparaissait pas dans la seconde édition du module ASN.1 SelectedAttributeTypes de X.520 [X.520-2]. Pour la compatibilité, les applications qui utilisent GSER avec la seconde édition de X.520 DOIVENT ajouter cette instruction de codage :

[GSER:CHOICE-OF-STRINGS PRECEDENCE printableString]

immédiatement avant le mot clé "CHOICE" dans la définition du type DirectoryString.

Par exemple, ceci est la façon dont la définition de DirectoryString apparaîtrait dans la seconde édition :

DirectoryString{INTEGER:maxSize} ::=
[GSER:CHOICE-OF-STRINGS PRECEDENCE printableString]
CHOICE {
    teletexString      TeletexString(SIZE (1..maxSize)),
    printableString   PrintableString(SIZE (1..maxSize)),
    universalString   UniversalString(SIZE (1..maxSize))
}

 	5.	Considérations sur la sécurité

La présente spécification change la manière dont les types ChoiceOfStrings sont déclarés mais n'altère pas le comportement existant des mises en œuvre de GSER. Les considérations de sécurité pour GSER sont inchangées (voir la [RFC3641]).

 	6.	Références normatives

[RFC2119]	S. Bradner, "Mots clés à utiliser dans les RFC pour indiquer les niveaux d'exigence", BCP 14, mars 1997. (MàJ par RFC8174)

[RFC3641]	S. Legg, "Règles génériques de codage de chaînes (GSER) pour les types ASN.1", octobre 2003. (MàJ par RFC4792)

[RFC4234]	D. Crocker et P. Overell, "BNF augmenté pour les spécifications de syntaxe : ABNF", octobre 2005. (Remplace RFC2234, remplacée par RFC5234)

[X.520-2]	Recommandation UIT-T X.520 (1993) | ISO/CEI 9594-6:1994, "Technologie de l'information - Interconnexion des systèmes ouverts - L'annuaire : types d'attributs choisis".

[X.520-3]	Recommandation UIT-T X.520 (08/97) | ISO/CEI 9594-6:1998, "Technologie de l'information - Interconnexion des systèmes ouverts - L'annuaire : types d'attributs choisis".

[X.520-4]	Recommandation UIT-T X.520 (02/01) | ISO/CEI 9594-6:2001, "Technologie de l'information - Interconnexion des systèmes ouverts - L'annuaire : types d'attributs choisis".

[X.520-5]	Recommandation UIT-T X.520 (08/05) | ISO/CEI 9594-6:2005, "Technologie de l'information - Interconnexion des systèmes ouverts - L'annuaire : types d'attributs choisis".

[X.680]	Recommandation UIT-T X.680 | ISO/CEI 8824-1:2002 "Technologies de l’information - Notation de syntaxe abstraite n°1 (ASN.1) : Spécification de la notation de base". (07/2002)

[X.680-1]	Recommandation UIT-T X.680 (2002) Amendement 1 (10/03) | ISO/CEI 8824-1:2002/Amd 1:2004, "Prise en charge de EXTENDED-XER".

 	Adresse de l'auteur
Dr. Steven Legg
eB2Bcom
Suite 3, Woodhouse Corporate Centre
935 Station Street
Box Hill North, Victoria 3129
AUSTRALIA

tééphone : +61 3 9896 7830
Fax :   +61 3 9896 7801
mél : steven.legg@eb2bcom.com 

 	Déclaration complète de droits de reproduction

Copyright (C) The Internet Society (2007). Tous droits réservés.

Le présent document et ses traductions peuvent être copiés et fournis aux tiers, et les travaux dérivés qui les commentent ou les expliquent ou aident à leur mise en œuvre peuvent être préparés, copiés, publiés et distribués, en tout ou partie, sans restriction d’aucune sorte, pourvu que la déclaration de droits de reproduction ci-dessus et le présent paragraphe soient inclus dans toutes copies et travaux dérivés. Cependant, le présent document lui-même ne peut être modifié d’aucune façon, en particulier en retirant la notice de droits de reproduction ou les références à la Internet Society ou aux autres organisations Internet, excepté autant qu’il est nécessaire pour les besoins du développement des normes Internet, auquel cas les procédures de droits de reproduction définies dans les procédures des normes Internet doivent être suivies, ou pour les besoins de la traduction dans d’autres langues que l’anglais.

Les permissions limitées accordées ci-dessus sont perpétuelles et ne seront pas révoquées par la Internet Society ou ses successeurs ou ayant droits.

Le présent document et les informations contenues sont fournis sur une base "EN L’ÉTAT" et le contributeur, l’organisation qu’il ou elle représente ou qui le/la finance (s’il en est), la INTERNET SOCIETY et la INTERNET ENGINEERING TASK FORCE déclinent toutes garanties, exprimées ou implicites, y compris mais non limitées à toute garantie que l’utilisation des informations encloses ne viole aucun droit ou aucune garantie implicite de commercialisation ou d’aptitude à un objet particulier.

Le financement de la fonction d’édition des RFC est actuellement fourni par l’Internet Society.