c - OpenSSL ASN.1 API 是否支持可扩展类型?

标签 c openssl asn.1

我正在尝试使用 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 代码可能会在将来引起问题:当 API 或代码发生更改时,您将被迫手动更新所有代码以匹配。代码生成器(可能)可以更好地维护 API(和 ABI)兼容性,同时允许更灵活的代码生成和语言选择。

关于c - OpenSSL ASN.1 API 是否支持可扩展类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46977200/

相关文章:

c - der_encode_to_buffer 返回错误 0。错误 0 到底是什么?

der - 如何对 1994 年后的 ASN.1 EXTERNAL 类型进行编码?

java - 为什么 Symantec CSR 检查程序认为我的 CSR 在 AlgorithmIdentifier 中缺少 NULL 值? RFC3279

c - 从 char 数组中解析 int

c - C 中是否可以从另一个函数返回一个函数?

更新证书后,Ruby Net::HTTP 响应 OpenSSL::SSL::SSLError "certificate verify failed"

linux - 失败的依赖项 : error when installing openssl from rpm

authentication - 如何在 Openssl 中自定义 TLS 握手过程?

c++ - 已经了解 C++ 的情况下学习 C?

c++ - 如何测试这个C库?