代码之家  ›  专栏  ›  技术社区  ›  Luke

OpenSSL ASN。1 API支持可扩展类型?

  •  2
  • Luke  · 技术社区  · 7 年前

    我正在尝试使用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);
    

    这些宏生成编码和解码函数。然而,这两个函数对结构的另一个版本都不起作用。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Ethan    7 年前

    卢克,

    Lev Walkin's free ASN.1 Compiler 可能适合您的需要。

    我对OpenSSL不是很熟悉,但是快速浏览一下 asn1t.h source (除其他外)不建议声明可扩展序列有内置支持。你可能比我更有动力去看,但我承认,如果发现他们没有包括它,我不会感到惊讶。可扩展性可能是一个很难解决的问题,尤其是当您依赖预处理器宏生成代码时。