2017-10-27 4 views
1

Ich versuche, die OpenSSL ASN.1 API zu verwenden, um meine eigenen benutzerdefinierten Typen zu implementieren. Ich erwarte, diese Typen in der Zukunft zu erweitern, und der Standard ASN.1 selbst unterstützt dies über das Konzept der erweiterbaren Typen (siehe here für einen Überblick über was ich will). Ich kann jedoch nicht herausfinden, ob die OpenSSL ASN.1 API dieses Konzept unterstützt und wie es implementiert werden kann. Ich habe die folgenden Strukturen bekam von OpenSSL lieferte die Makros definiert werden:Unterstützt die API OpenSSL ASN.1 erweiterbare Typen?

typedef struct _TEST_STRUCT_V1 { 
    ASN1_INTEGER* Field1; 
} TEST_STRUCT_V1; 

typedef struct _TEST_STRUCT_V2 { 
    ASN1_INTEGER* Field1; 
    ASN1_INTEGER* Field2; 
} TEST_STRUCT_V2; 

ASN1_SEQUENCE(TEST_STRUCT_V1) = { 
    ASN1_SIMPLE(TEST_STRUCT_V1, Field1, ASN1_INTEGER), 
} ASN1_SEQUENCE_END(TEST_STRUCT_V1); 

IMPLEMENT_ASN1_FUNCTIONS(TEST_STRUCT_V1); 

ASN1_SEQUENCE(TEST_STRUCT_V2) = { 
    ASN1_SIMPLE(TEST_STRUCT_V2, Field1, ASN1_INTEGER), 
    ASN1_SIMPLE(TEST_STRUCT_V2, Field2, ASN1_INTEGER), 
} ASN1_SEQUENCE_END(TEST_STRUCT_V2); 

IMPLEMENT_ASN1_FUNCTIONS(TEST_STRUCT_V2); 

Diese Makros Codierungs- und Decodierungsfunktionen erzeugen. Beide Funktionen funktionieren jedoch nicht mit der anderen Version der Struktur.

Vielleicht bell ich den falschen Baum? Ich versuche nur, die OpenSSL-Implementierung von ASN.1 zu verwenden, da ich die Bibliothek bereits für Crypto verwende, aber vielleicht wäre ein richtiger ASN.1-Compiler der richtige Weg?

Antwort

1

Luke,

Du bist wahrscheinlich im Handel erhältlich mehr mehr Glück mit einem tatsächlichen ASN.1-Compiler-es gehen zu müssen, aber Lev Walkin's free ASN.1 Compiler könnte die Rechnung für Ihre Bedürfnisse anzupassen.

Ich bin nicht sehr vertraut mit OpenSSL, aber ein schnelles Durchsuchen der asn1t.h source (unter anderem) schlägt nicht vor, dass es eingebaute Unterstützung für die Deklaration einer erweiterbaren Sequenz gibt. Sie sind wahrscheinlich motivierter als ich, aber ich gestehe, ich wäre nicht überrascht zu finden, dass sie es nicht aufgenommen haben. Erweiterbarkeit kann ein schwer zu lösendes Problem sein, insbesondere wenn Sie auf Präprozessormakros zur Codegenerierung angewiesen sind.

In jedem Fall kann die Verwendung des OpenSSL-Codes in Zukunft trotzdem zu Problemen führen: Wenn sich die APIs oder der Code ändern, müssen Sie Ihren gesamten Code manuell aktualisieren, damit er übereinstimmt. Ein Code-Generator würde (wahrscheinlich) die API- (und ABI-) Kompatibilität besser aufrechterhalten, während er eine etwas flexiblere Codegenerierung und Sprachauswahl zulässt.

+0

Ja, ich bin zu dem gleichen Schluss gekommen. Ich bin nicht mit ASN.1 verheiratet, es wäre einfach praktisch gewesen, da wir bereits eine Abhängigkeit von OpenSSL haben. Ich suche nach Alternativen und Google Protocol Buffers sieht ziemlich gut aus. Ich werde das als Antwort akzeptieren, da ich nicht viel mehr zu sagen habe. – Luke

Verwandte Themen