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/