首页 > 解决方案 > 如何将 asn1_create_element 用于嵌套方案?

问题描述

libtasn1 库提供了用于创建编码数据的函数。特别是 asn1_create_element() 函数用于在编码之前创建结构。嵌套定义失败。

Libtasn1 库提供了测试示例,我感兴趣的与编码有关。 Test_encoding.asn

TEST_TREE { }

DEFINITIONS IMPLICIT TAGS ::=

BEGIN

Koko ::= SEQUENCE {
   seqint SEQUENCE OF INTEGER,
   int INTEGER,
   a      [1] OCTET STRING,
   b      [10] OCTET STRING,
   c      [100] OCTET STRING,
   exp    [3] EXPLICIT OCTET STRING OPTIONAL,
   str OCTET STRING
}

这是一个简单的方案,具有直接的数据类型。

Test_encoding.c使用以下方法进一步填充这些结构:

 result = asn1_create_element (definitions, "TEST_TREE.Koko", &asn1_element);
...
result = asn1_write_value (asn1_element, "seqint", "NEW", 1);
...
result = asn1_write_value (asn1_element, "int", "\x0f\xff\x01", 3);

我的方案是嵌套的:

MYP7B { }

DEFINITIONS IMPLICIT TAGS ::= 

BEGIN

Encoder ::= SEQUENCE {
    signedData1     OBJECT IDENTIFIER,
    object1         XmlInfo
}

XmlInfo ::= SEQUENCE {
    serialno        INTEGER,
    checksum1       INTEGER,
    digest1         OCTET STRING,
    data1           OCTET STRING
}

我的 main.c 有这样的:

result = asn1_create_element (definitions, "MYP7B.Encoder", &asn1_element);
...
result = asn1_create_element (definitions, "MYP7B.Encoder.XmlInfo", &asn1_element);

我收到以下错误:

asn1_create_element(): LIBTASN1 ERROR: ELEMENT_NOT_FOUND

标签: casn.1

解决方案


将第二个参数“MYP7B.Encoder.XmlInfo”替换为“MYP7B.XmlInfo”,因为从 ASN1 定义的角度来看,它没有嵌套。


推荐阅读