OpenSSL ASN.1 API 是否支持可扩展类型?
Does the OpenSSL ASN.1 API support extensible types?
我正在尝试使用 OpenSSL ASN.1 API 来实现我自己的自定义类型。我希望在未来扩展这些类型,ASN.1 标准本身通过可扩展类型的概念支持这一点(请参阅 here 了解我想要的内容的概述)。但是,我不知道 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's free ASN.1 Compiler 可能满足您的需求。
我对 OpenSSL 不是很熟悉,但是快速浏览 asn1t.h source(以及其他)并没有表明存在对声明可扩展序列的内置支持。你可能比我更有动力去看,但我承认,如果他们没有包括它,我不会感到惊讶。可扩展性可能是一个很难解决的问题,尤其是当您依赖预处理器宏来生成代码时。
无论如何,依赖 OpenSSL 代码可能会在将来引起问题:当 APIs 或代码更改时,您将被迫手动更新所有代码以匹配。代码生成器(可能)会更好地维护 API(和 ABI)兼容性,同时允许更灵活的代码生成和语言选择。
我正在尝试使用 OpenSSL ASN.1 API 来实现我自己的自定义类型。我希望在未来扩展这些类型,ASN.1 标准本身通过可扩展类型的概念支持这一点(请参阅 here 了解我想要的内容的概述)。但是,我不知道 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's free ASN.1 Compiler 可能满足您的需求。
我对 OpenSSL 不是很熟悉,但是快速浏览 asn1t.h source(以及其他)并没有表明存在对声明可扩展序列的内置支持。你可能比我更有动力去看,但我承认,如果他们没有包括它,我不会感到惊讶。可扩展性可能是一个很难解决的问题,尤其是当您依赖预处理器宏来生成代码时。
无论如何,依赖 OpenSSL 代码可能会在将来引起问题:当 APIs 或代码更改时,您将被迫手动更新所有代码以匹配。代码生成器(可能)会更好地维护 API(和 ABI)兼容性,同时允许更灵活的代码生成和语言选择。