Golang中CHOICE的ASN.1 DER编码

时间:2017-06-23 08:37:42

标签: go encoding asn.1

我正在尝试在Golang中创建一个DER编码的ASN.1 blob。

我将内部TLV明确定义为struct,它映射到ASN.1中的SEQUENCE。此SEQUENCE将嵌入CHOICE类型。请参阅ASN.1架构here

我认为最简单的方法是使用encoding/asn1.RawValue类型。

请参阅this amazing book中有关编码的部分并使用此online ASN.1 tool,我了解我的二进制文件(在下面的HEX中描述)应以A0258020...开头。

但是,我的结果是30258020...

我已将问题本地化为在Golang中编码CHOICE类型。 在预期的情况下,它是Context-Specific, Constructed, Tag:0标记(根据上面的参考书),但我得到Universal, Primitive, Tag:1类型,其中Tag:1映射到ASN.1中的序列。< / p>

我尝试将外部CHOICE标头设置为:

serializedCondition, err := asn1.Marshal(asn1.RawValue{ Class: 2, // or asn1.ClassContextSpecific IsCompound: true, // as CHOICE it is a Constructed type and not Primitive type Tag: 0, // Zero in my case FullBytes: serialized, // The serialized inner sequence of bytes })

有人可以解释如何在Golang中使用内置的ASN.1库,使用低级RawValueRawContent类型来序列化标记为CHOICE的对象,{{1}在ASN.1中,{,SET OF

0 个答案:

没有答案