ASN.1编码与可选字段

3
假设以下对象在 .asn 文件中定义。

前提条件是在 .asn 文件中定义了以下对象。

TestObject := IMPLICIT [APPLICATION 7] SEQUENCE {
    version UTF8String, 
    a GeneralizedTime OPTIONAL,
    b [APPLICATION C0] IMPLICIT SEQUENCE OF [PRIVATE P0] IMPLICIT ad OPTIONAL,
    c [APPLICATION C1] IMPLICIT SEQUENCE OF ab OPTIONAL,
    d [APPLICATION C2] IMPLICIT ac OPTIONAL,
    e [APPLICATION C3] IMPLICIT ad OPTIONAL,
    f [APPLICATION C4] IMPLICIT al OPTIONAL,
    g [APPLICATION C6] IMPLICIT SEQUENCE OF an OPTIONAL,
    h ASNSyncPayload OPTIONAL,
    signature NULLOCTETSTRING, 
}

有多个可选字段,我不确定它们将如何编码。

有人能解释一下如何使用libtasn1将以下内容编码为二进制文件吗?

1个回答

4
请注意,您的标签[APPLICATION C0]到[APPLICATION C6]不是有效的ASN.1标签。 [PRIVATE P0]也是如此。请去掉'C'和'P',以便您有[APPLICATION 0]到[APPLICATION 6]和[PRIVATE 0],然后您的标签就会正常工作。另外,ASN.1类型名称必须以大写字母开头,因此"ad","ab","ac","al"和"an"都不是有效的类型名称。
ASN.1具有几种编码规则,处理不同方式的可选字段。BER、DER和CER使用编码中ASN.1标签的存在或缺失来确定组件的存在或缺失。这意味着,如果一个编码具有版本字段的标签、长度和值,后面跟随签名字段的标签、长度和值,则所有中间可选字段都不存在。
PER在每个序列前使用一个位掩码,并为每个可选字段设置一个位,以指示其存在或不存在。
您可以在免费在线ASN.1编译器中尝试您的ASN.1示例,该编译器具有编码器/解码器,网址为http://asn1-playground.oss.com。以了解详细的可选字段处理方式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接