【问题标题】:How to use asn1_create_element for nested schemes?如何将 asn1_create_element 用于嵌套方案?
【发布时间】:2019-09-13 14:18:23
【问题描述】:

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

【问题讨论】:

    标签: c asn.1


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2010-09-25
      • 2023-04-04
      • 2022-01-10
      • 2021-05-01
      • 2011-02-11
      • 2021-11-01
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      相关资源
      最近更新 更多