Transparence des données transmises SYNTAXE DE TRANSFERT ASN.1 303
Présentation ASN.1 : Abstract Syntax Notation number 1 Standards OSI IS/8824 et IS/8825 Recommendations CCITT version 1988 (livre bleu) : X208 et X209 version 1984 (livre rouge) : X409 BESOIN : Méthode DE DESCRIPTION SYNTAXIQUE efficace pour définir les STRUCTURES DE DONNEES Modèle :SYNTAXE ABSTRAITE Syntaxe de TRANSFERT Spécifique d'une Application Syntaxe de TRANSFERT COMMUNE à deux entités PAIRES de PRESENTATION Syntaxe de Présentation 304
STANDARDS ISO8824 (X208) définit - des TYPES DE DONNEES de base - des STRUCTURES types permet de créer de NOUVEAUX TYPES de NOUVELLES STRUCTURE ISO8825 (X209) définit les REGLES de CODAGE pour ASN1 B.E.R: Basic Encoding Rules 305
STRUCTURE DES PDU T L T L T L V V T L V V STRUCTURE D'ITEMS IMBRIQUES Chaque ITEM est codé par une STRUCTURE T.L.V. Type - Longueur - Valeur Sa VALEUR peut être un autre ITEM Le type des données est codé dans le champ T La longueur du champ valeur est codée dans le champ L DIFFERENTS TYPES : TYPE PREDEFINI dans un standard par exemple 8824 DEFINI à partir d'un type prédéfini TYPE SIMPLE spécifie l'ensemble des valeurs STRUCTURE Dénote un ou plusieurs autres types CODAGE : PRIMITIF CONSTRUCTEUR Champ valeur code directement la valeur Champ valeur contient un ou plusieurs éléments ordonnés (TLV) 306
Classes de Types Une ETIQUETTE est affectée à chaque TYPE Cette Etiquette est définie par le standard ou un utilisateur Une même Etiquette peut être attribuée à de nombreux types différents chacun étant identifié par le CONTEXTE d'utilisation Un utilisateur peut décider d'attribuer des Etiquettes différentes à deux apparitions d'un même Type. On crée ainsi des types distincts. 4 classes d'etiquettes sont spécifiées UNIVERSELLE spécifiées dans OSI 8824 APPLICATION spécifiées dans d'autres normes ou recommandations PRIVEE spécifiques à une entreprise CONTEXTE Utilisation LIBRE et INTERPRETEE selon le contexte d'utilisation 307
Codage de Identificateurs 8 7 6 5 1 C l a s s e Forme V A L E U R Codage du champ TYPE Il comporte un ou plusieurs OCTETS le PREMIER OCTET à la structure ci-contre CLASSE 0 Universelle 0 à 1Fh 1 Application 20h à 3Fh 2 Contexte 80h à BFh 3 Privée C0h à FFh FORME 0 Primitif VALEUR 1 Constructeur 0 à 11110 Numéro de l'étiquette si 11111 Numéro de l'étiquette dans octet suivant (sauf FFh) si FFh Numéro de l'étiquette dans octet suivant... 308
Codage de la Longueur La longueur du champ Valeur est codée sur 1 à 128 octets Le champ valeur peut avoir une taille inderterminée dans ce cas il est terminé par un code de fin de PDU le champ longueur prend la valeur 80h un longueur courte de 0 à 127 octets dans ce cas il est codé directement sur un octet : 00 à 7Fh une taille longue, supérieure à 127 octets Le premier octet du champ longeur contient la longueur ( - 1) du champ longueur Le bit de poids fort est à 1 (81h à 8Fh) Les 7 autres bits donnent le nombre d'octets sur lesquels sont codés la longueur on peut ainsi coder des champs valeurs jusqu'à une longueur de 2 1008 octets exemple: longueur du champ valeur 1024 octets - 10000010 00000100 00000000 309
Types PREDEFINIS Code Types Prédéfinis Commentaires 00h fin de contenu avec longueur 0 01h booléen vrai: FF; faux: OO 02h entier codé binaire en complément à deux 03h chaîne binaire 04h chaîne d'octets 05h vide longueur 00 06h identificateur d'objets défini dans un arbre d'identification 07h descripteur d'objets texte de description 08h externe tiré d'un autre standard 09h réel base 2,8,16 ou 10 et +/- infini signe, exposant, mantisse + facteur d'échelle 0Ah énuméré valeur de l'entier associé étiqueté choix quelconque Type CREE : explicite ou implicite ; Utilisation optionnelle du mot IMPLICIT; si IMPLICITn'est pas utilisé forme constructeur; s'il est utilisé forme du codage de base parmi plusieurs possibilité; lié ou non lié pour le codage type choisi Permet de coder n'importe quelle valeur explicité par ailleurs 310
Types DEFINIS Code Types définis Commentaires 10h Séquence; Séquence de suite ORDONNEE d'éléments de types différents ou de même type 11h Ensemble; Ensemble de ensemble NON ORDONNE de membres de types différents; si Ensemble de : même type (pas de valeur sémentique pour l'ordre) 12h Chaîne numérique 13h Chaîne imprimable 14h Chaîne Télétex 15h Chaîne Vidéotex 16h Chaîne IA5 (T100) 17h Heure généralisée date et heure légale 18h Heure UTC temps universel, terminé par Z 19h Chaîne de caractères graphiqes 20h Chaîne de caractères visibles (T61) Terminaux Télétex 21h Chaîne de caractères générale d'autres types pourront être ajoutés... 311
Créations de Types Opérateur MACRO Création de types NON STANDARDS Exemple : Création du type ATTRIBUT ATTRIBUT MACRO ::= Begin End Utilisations : Type Notation ::= "LIST" <Type ::= Sequence of Chaine-IA5> vide <Type ::= Chaîne-IA5> Value Notation ::= valeur (VALUE Type) destinataire ATTRIBUT LIST ::= {Nom = J.Dupont", "Age = 42"} destinataire ATTRIBUT ::= "Nom = J.Dupont" 312
Modules Les MODULES servent à regrouper des types apparentés pour les DEFINIR les INCLURE globalement Opérateur : DEFINITION Exemple Couleur DEFINITION ::= Begin End Couleur-primaire ::= INTEGER {rouge (0), jaune (1), bleu (2) } Couleur-par-défaut Couleur-primaire ::= jaune 313
Exemples de types définis structurés SEQUENCE Justificatifs ::= SEQUENCE { nom-utilisateur Chaîne-IA5, mot-passe Chaîne-IA5, numéro-compte INTEGER } ENSEMBLE Attributs-Fichier ::= SET { propriétaire [0] IMPLICIT Nom-Utilisateur, taille-contenu-en-octets [1] IMPLICIT INTEGER, [2] IMPLICIT Contrôle_Accès.} 314
Exemples de types définis (suite) ETIQUETE Nom_Fichier ::= [APPLICATION 8] IMPLICIT SEQUENCE { CHOIX nom_répertoire Chaîne-IA5, nom_fichier Chaîne-IA5 } Identificateur-Fichier ::= CHOICE { nom_relatif [0] IMPLICIT Chaîne-IA5, nom_absolu [1] IMPLICIT Chaîne-IA5, numéro_série [2] IMPLICIT INTEGER } QUELCONQUE Contenu_Fichier ::= ANY (quelconque) Ce type n'est pas un type structuré, mais peut coder n'importe quelle donnée définie extérieurement entre les utilisateurs 315
Exemple élémentaire de codage : Description Nom-Complet := [APPLICATION 1] IMPLICIT SEQUENCE { Prénom [0] Chaîne-IA5, Nom [1] Chaine-IA5 Type de Numéro de "Séquence" 00001 Type de Nom-Complet 01 1 00001 } Type de Chaine-IA5 00 0 10000 Type de Prénom 10 1 00000 Type de Nom 10 1 00001 316
Exemple élémentaire de codage : Encodage Codage de "Gérard Beuchot" type 61 longueur xx 15 valeur type A0 longeur yy 08 valeur type 16 type longueur 06 valeur Gérard 317 A1 longueur zz 09 valeur type 16 longueur 07 valeur Beuchot Chaîne d'octets à transmettre 61 15 A0 08 16 06 47 85 72 61 72 64 A1 09 16 07 42 65 75 63 68 6F 74 G é r a r d B e u c h o t
Exercice: Codage de champs dans FTAM Dans les spécifications FTAM est défini un champ "Context" de type CONTEXT- SPECIFIC. Le troisième champ défini de ce type (valeur 2) est décrit par: identificateur A2 ([CONTEXT-SPECIFIC 2]) longueur 03 contenu identificateur 02 ([UNIVERSAL 2] -> INTEGER) longueur 01 contenu 06 On veut coder le type "AccesStructureType" de valeur { structuretype hierarchical, maxdepth 16 } par une structure universelle "ensemble" (SET champ code 17 ou 11H) contenant deux champs "Context", pour structuretype et maxdepth, dont lesvaleurs de type sont 0 et 1.Hierarchical sera codé par un entier de valeur 2. Donner la description ASN.1 de cette partie de FPDU et la chaîne d'octets effectivement transmise (codée en héxadécimal) 318
Exemple: Solution les TLV pour structuretype et maxdepth sont de type constructeur "Context"maxDepth sera codé sur un TLV de type INTEGER de valeur 16 le paramètre hierachical sera aussi codé par un INTEGER de valeur 2. On place dans un SET deux champs CONTEXT-SPECIFIC construits sur le modèle ci-dessus, soit: identificateur 31 ([UNIVERSAL 11H -> SET) 0 0 1 10001 longueur 0A contenu identificateur A0 ([CONTEXT-SPECIFIC 0] -> structuretype) longueur 03 contenu identificateur 02 ([UNIVERSAL 2] -> INTEGER) longueur 01 contenu 02 (hierarchical = 2) identificateur A1 ([CONTEXT-SPECIFIC 1] -> maxdepth) longueur 03 contenu identificateur 02 ([UNIVERSAL 2] -> INTEGER) longueur 01 contenu 10 (16) SOIT 31 0A A0 03 02 01 02 A1 03 02 01 10 319