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
答案 0 :(得分:0)
用“ MYP7B.XmlInfo”替换第二个参数“ MYP7B.Encoder.XmlInfo”,因为从ASN1定义的角度来看,它不是嵌套的。