Asn1Compiler

Asn1Compiler traduit la description des données d'un protocole, décrites au moyen du langage ASN.1, vers les langages Java ou C#.

Le développeur intègre dans son application le code ainsi généré et le runtime ASN.1. Le runtime regroupe les primitives de codage/décodage des types de base en conformité avec les règles d'encodage BER/DER, PER (aligné/non aligné), XER, E-XER.

Asn1Compiler s'installe sur toute machine supportant une machine virtuelle Java.

Conformité

Asn1Compiler est conforme aux normes ASN.1 1997/2002/2008 suivantes :

  • Spécification de la notation de base (UIT-T X.680 / ISO/CEI 8824-1)
  • Spécification des objets informationnels (UIT-T X.681 / ISO/CEI 8824-2)
  • Spécification des contraintes (UIT-T X.682 / ISO/CEI 8824-3)
  • Paramétrage des spécifications (UIT-T X.683 / ISO/CEI 8824-4)

Asn1Compiler inclut les types Time définis par l'Amendement 3 à X680 permettant un support complet des types de temps spécifiés par l'ISO 8601-2004.

Asn1Compiler supporte les règles d'encodage Extended-XER. Ces règles permettent d'encoder et de décoder des documents "full XML" en traitant toutes les spécificités de XML (attributs, namespaces...).

Points forts

Prise en compte automatique des classes d'objets informationnels et des ensembles d'objets informationnels dans les contraintes relationnelles pour permettre le décodage des types "ouverts" sans besoin de code supplémentaire.

Prise en compte automatique des contraintes de contenu sur les BIT STRING et OCTET STRING ainsi que des contraintes de sous-typage sur les types "ouverts" pour permettre le décodage des types contenus sans besoin de code supplémentaire.

Prise en compte des PDU "énormes" (cas de TAP3 par exemple où les PDUs peuvent atteindre 200 Mo) avec un mode de décodage sur les types SET OF/SEQUENCE OF permettant d'économiser la mémoire.

Code généré

Création d'un package Java ou d'un namespace C# par module ASN.1.

Génération de classes documentées (formats javadoc et documentation XML .NET).

Génération automatique de fichiers d'exemples permettant d'encoder et de décoder les types choisis dans le schéma ASN.1.

Le runtime

Le runtime est une librairie Java ou C# qui regroupe les primitives d'encodage et de décodage des types de base.

Il est fourni avec Asn1Compiler.

Les règles d'encodage supportées par le runtime sont :

  • Spécification des règles de codage de base (BER/DER, UIT-T X.690 / ISO/CEI 8825-1)
  • Spécification des règles de codage compact (PER aligné et non aligné, UIT-T X.691 / ISO/CEI 8825-2)
  • Spécification des règles de codage XML (Basic XER/Canonical XER/Extended XER, UIT-T X.693 + Amendement-1 / ISO/8825-4)
  • Spécifications des règles d'encodage JSON (ITU-T X.697 / ISO/IEC 8825-8)
  • Spécifications des règles d'encodage à base Octet (OER, ITU-T X.696 / ISO/IEC 8825-7)

Le runtime offre de nombreuses caractéristiques parmi lesquelles :

  • la possibilité de changer de règles d'encodage en changeant d'instance de decodeur/encodeur
  • la fourniture d'un diagnostic d'erreur compréhensible
  • le support pour les fonctions clone/equals/hashcode/toString
  • le support de la "sérialisation"

Exemple

Voici un exemple de génération à partir du schéma ASN.1 sample.asn1 :

SampleModule
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
MainStruct ::= SEQUENCE {
name IA5String,
age INTEGER
}
END

La génération est décrite dans un fichier de configuration sample.arg :

  • le nom de l'API générée est "Sample"
  • les règles d'encodage désirées sont ExtendedXER et AlignedBasicPER
  • l'API produite cible le langage Java (ou cSharp)
  • par défaut, les sources seront générés dans Sample/src/java (ou Sample/src/cSharp)
# specify the asn1 files
asn1ToXml.inputFile.1=sample.asn1
# specify the Asn1API name
asn1API.name=Sample
# lists the encoding rules to be used
asn1API.encodingRules=ExtendedXER, AlignedBasicPER
# specify the language (Java or C#)
javaGenerator=true
#cSharpGenerator=true

La commande permettant la génération est :

Asn1Compiler sample.arg 

Le résultat est :

- compilation in progress...
- # input file : sample.asn1
- 1 ASN.1 module compiled : 0 errors, 0 warnings.

- Java source code generation...
- ASN.1 module : SampleModule
- writing generation...
- source code generation complete (7 files created).

L'exemple d'utilisation de l'API générée est fourni ici.