簡體   English   中英

OpenSSL ASN.1 API 是否支持可擴展類型?

[英]Does the OpenSSL ASN.1 API support extensible types?

我正在嘗試使用 OpenSSL ASN.1 API 來實現我自己的自定義類型。 我希望在未來擴展這些類型,並且 ASN.1 標准本身通過可擴展類型的概念支持這一點(有關我想要的概述,請參見此處)。 但是,我不知道 OpenSSL ASN.1 API 是否支持這個概念,如果支持,如何實現它。 我使用 OpenSSL 提供的宏定義了以下結構:

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 編譯器會是要走的路?

盧克,

使用實際的 ASN.1 編譯器您可能會獲得更好的運氣 — 市面上有幾種編譯器,但Lev Walkin 的免費 ASN.1 編譯器可能會滿足您的需求。

我對 OpenSSL 不是很熟悉,但是快速瀏覽asn1t.h 源(以及其他)並不表明有聲明可擴展序列的內置支持。 你可能比我更有動力去看,但我承認我不會驚訝地發現他們沒有包括它。 可擴展性可能是一個很難解決的問題,尤其是當您依賴預處理器宏來生成代碼時。

在任何情況下,依賴 OpenSSL 代碼在未來可能會導致問題:當 API 或代碼更改時,您將被迫手動更新所有代碼以匹配。 代碼生成器(可能)在維護 API(和 ABI)兼容性方面做得更好,同時允許更靈活的代碼生成和語言選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM