如何将asn1_create_element用于嵌套方案?

时间:2019-09-13 14:18:23

标签: c asn.1

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

1 个答案:

答案 0 :(得分:0)

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