2016-06-21 12 views
0

Ich möchte eine bestehende Datenstruktur in ASN.1 beschreiben, so dass ich eine geeignete Bibliothek verwenden kann, um die Transaktionen zu dekodieren/verschlüsseln/validieren, ohne alles von Grund auf neu schreiben zu müssen.ASN.1 Ausdruck SEQUENCE Größenbeschränkung

auch:

  • Ich kann keine Datenstruktur ändern;
  • Alle Felder sind ASCII-Zeichen;
  • In der Definition der meisten Arrays (SEQUENCES) ist die Anzahl der Elemente, die gesendet werden, durch ein vorangestelltes Zähler Feld definiert.

sich das folgende vereinfachte Beispiel:

World-Schema DEFINITIONS AUTOMATIC TAGS ::= 
BEGIN 
    Test ::= SEQUENCE { 
    id IA5String (SIZE(5)), 
    nbData IA5String (SIZE(2)), 
    dataList ListOfData 
    } 
    ListOfData ::= SEQUENCE(SIZE(0..99)) OF DataPoint 
    DataPoint ::= SEQUENCE { 
    x IA5String (SIZE(2)), 
    y IA5String (SIZE(2)) 
    } 
END 

Das Feld nbData die Anzahl der Elemente dataPoint schreibt vor, dass in dem Strom der übertragenen Daten vorhanden sind.

Neben der Tatsache, dass nbData ist eigentlich ein Integer als String codiert, muss dies eine sehr häufige Art der Komprimierung übertragener Daten sein. Trotzdem bleibe ich bei dem Versuch, einen Weg zu finden, diese Struktur zu definieren.

Wie kann ich diese Einschränkung in ASN.1 ausdrücken?

+0

Es ist nicht klar, was Sie erreichen möchten. Möchten Sie etwas wie 'dataList ListOfData (SIZE (nbData))' definieren? –

+0

Ja, das ist was ich will. Aber der Compiler beschwert sich ('nbData' wird referenziert, ist aber nicht definiert). Daher dachte ich, dass nur konstante Werte in der SIZE-Einschränkung erlaubt sind – Farsee

Antwort

0

Wie drücken Sie diese Einschränkung in ASN.1 aus? Du kannst nicht.

Sie können nach ECN suchen, einer (ziemlich komplizierten) Syntax, die Teil der ASN.1-Familie ist und die zusammen mit ASN.1 verwendet werden soll, um Nicht-Standard anzugeben (dh andere als BER , PER, usw.) Kodierungen.

Ich weiß nicht, ob ECN ausdrucksvoll genug sein wird, um die gewünschte Kodierung anzugeben, aber ich denke, es ist wahrscheinlich. Aber Sie müssen ECN herausfinden, und dann müssen Sie ein Werkzeug finden, das ECN unterstützt. Viel Glück!

1

Diese Art von Einschränkung ist nicht eine "native" für ASN.1, insbesondere da das Feld, das die ganze Zahl enthält, als String dargestellt wird. Während es möglich ist, ECN (Codiersteuerabschnitt Notation), dies zu umgehen, kann es besser sein zu verwenden, was ASN.1 eine „benutzerdefinierte Einschränkung“ wie nennt:

Test ::= SEQUENCE { 
    id IA5String (SIZE(5)), 
    nbData IA5String (SIZE(2)), 
    dataList ListOfData 
} (CONSTRAINED BY {-- English text describing your constraint --}) 

Einige kommerzielle ASN.1-Compiler sind in der Lage Verwenden Sie diese Constraint-Notation, um Funktions-Stubs im generierten Encoder/Decoder zu generieren, damit Sie Constraints erzwingen können, die die integrierten Fähigkeiten der ASN.1-Constraint-Notation überschreiten.

Es gibt eine viel kompliziertere Art und Weise, wie Sie die Einschränkung mit der Beschränkung "WITH COMPONENTS" in der SEQUENCE erzwingen können, aber die Menge an Text, die erforderlich ist, um die vollständige Einschränkung zu schreiben, ist wahrscheinlich nicht sinnvoll.