c - 如何使用 asn1_create_element 进行嵌套方案?

标签 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

最佳答案

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

关于c - 如何使用 asn1_create_element 进行嵌套方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57925389/

相关文章:

c - 反汇编c程序时神秘的printf参数

c - 与指针和数组相关的查询

c - 交换指针而不是 memcpy

go - 通过表单发送 ssh 私钥导致 "asn1: syntax error: data truncated"

c - 将大型结构转储到文本文件的一些智能方法

java - 如何解码ASN1字节以提取信息?

c - 退出函数时结构体会获取垃圾值

python - 如何从astropy erfa中取出WGS84轴

php - 是否存在用于解析 ASN.1 或基于它生成 PHP 代码的 PHP 库?

ios7 - 在 Xcode 5 中安装 asn1c 库,用于 ios7 中的收据验证