【问题标题】:How to create ASN.1 specification file from BER?如何从 BER 创建 ASN.1 规范文件?
【发布时间】:2023-12-01 06:55:01
【问题描述】:

我们从供应商那里收到了一份以 TLV 编码的 CDR 规范文档,我们正在尝试为其构建解析器。据他们说,他们的 CDR 是按照 ASN.1 BER 编码格式化的。然而,当被问及 ASN.1 规范文件时,他们说他们没有,他们的文件就是他们所拥有的。

虽然不熟悉 ASN.1 语法,但我正在尝试将规范逆向工程为 ASN.1 规范。

它们的标签和长度可以编码为 1 或 2 个字节。

让我分享一些示例记录的前几个字节:

804e 8060 8002 805c 010100 02089999999999999999 ...
804e 8066 8002 8062 010101 02089999999999999999 ...

首先,这真的符合 BER ASN.1 吗?因为在读取A Layman's Guide to a Subset of ASN.1, BER, and DER 之后,对于一个 2 字节(或更多)的标签,第一个字节的位 5-1 必须设置为 1,而 804e 和 8002 不适合这个。

其次,如何将上述格式转换为ASN.1规范?

谢谢。

【问题讨论】:

    标签: asn.1 encoder decoder ber


    【解决方案1】:

    CDR 数据通常由一些非 ASN.1 数据(文件头和记录头)以及 ASN.1 数据组成。例如,3GPP TS 32.297。

    在没有规范的情况下,您只能在有限程度上解析 BER。如果使用了任何隐式标记(几乎可以肯定是这样),您将不知道实际的类型。您也不会知道任何您知道类型的值的语义。

    您肯定无法从编码数据样本中推断出规范,就像您无法通过查看一个句子来确定所有合法的英语句子一样。特别是,至少可以说,任何使用 CHOICE 类型都会令人困惑。

    坚持接受 ASN.1 规范或被告知正在使用什么标准,如果有的话。

    【讨论】:

      【解决方案2】:

      首先,这真的符合 BER ASN.1 吗?

      您可以使用https://asn1.io/asn1playground/(解码 BER 值不需要规范)

      其次,如何将上述格式转换为 ASN.1 规范?

      没有。

      【讨论】: