2017-10-27 12 views
1

私は独自のカスタムタイプを実装するためにOpenSSL ASN.1 APIを使用しようとしています。私は将来これらの型を拡張することを期待しており、ASN.1標準自体は、拡張可能な型の概念によってこれをサポートしています(私が望むものの概要についてはhereを参照してください)。しかし、私はOpenSSL ASN.1 APIがこのコンセプトをサポートしているかどうか、またそれを実装する方法がわかっていません。私は、OpenSSLから供給されたマクロを使用して定義された以下の構造を持っている:OpenSSL ASN.1 APIは拡張可能なタイプをサポートしていますか?

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); 

これらのマクロは、エンコードとデコード機能を生成します。ただし、どちらの関数も構造体の他のバージョンとはどちらも動作しません。

おそらく私は間違った木を鳴らしていますか?私は既に暗号化のためにライブラリを使用しているので、OpenSSLのASN.1の実装を使用しようとしているだけですが、適切なASN.1コンパイラが行く方法でしょうか?

答えて

1

ルーク、

あなたはおそらく、実際のASN.1コンパイラ、そことのより良い運を持っているつもりだが、いくつかの市販されているが、Lev Walkin's free ASN.1 Compilerは、あなたのニーズにぴったり合うかもしれません。

私はOpenSSLに慣れていませんが、asn1t.h source(を含む)をすばやく参照すると、拡張可能なシーケンスを宣言するための組み込みサポートがあることは示唆されていません。あなたはおそらく私が見るよりももっと動機づけられていますが、私は彼らがそれを含まないことを驚かないと告白します。拡張性は、特にコード生成のためのプリプロセッサマクロに頼っている場合には解決するのが難しい問題です。

いずれにせよ、OpenSSLコードを使用すると、今後とも問題が発生する可能性があります.APIやコードが変更された場合は、すべてのコードを手動で更新する必要があります。コードジェネレータは、API(とABI)との互換性を維持しながら、より柔軟なコード生成と言語の選択を可能にします(おそらく)。

+0

はい、ほとんど同じ結論に達しました。私はASN.1と結婚していませんが、すでにOpenSSLに依存しているので便利なはずです。私は代替策を検討しており、Googleのプロトコルバッファーはかなりよく見えます。私はこれを答えとして受け入れるつもりです。なぜなら、他には言いたいことはないと思うからです。 – Luke

関連する問題