【问题标题】:ASN.1 BER Encoding of EmbeddedPDVEmbeddedPDV 的 ASN.1 BER 编码
【发布时间】:2018-03-20 12:50:31
【问题描述】:

我正在用 D 编写一个Basic Encoding Rules 编解码器,我想编码一个 EmbeddedPDV,它是根据下面的 ASN.1 定义的。问题是,在编码 identification 时,我不知道如何在 BER 编码的二进制文件中清楚地表明我提供的是与 syntax 字段相关联的 OBJECT IDENTIFIER,而不是与 @ 相关联的字段。 987654325@字段。

EmbeddedPDV ::= [UNIVERSAL 11] IMPLICIT SEQUENCE {
identification CHOICE {
    syntaxes SEQUENCE {
        abstract OBJECT IDENTIFIER,
        transfer OBJECT IDENTIFIER },
    syntax OBJECT IDENTIFIER,
    presentation-context-id INTEGER,
    context-negotiation SEQUENCE {
        presentation-context-id INTEGER,
        transfer-syntax OBJECT IDENTIFIER },
    transfer-syntax OBJECT IDENTIFIER,
    fixed NULL },
data-value-descriptor ObjectDescriptor OPTIONAL,
data-value OCTET STRING }
(WITH COMPONENTS { ... , data-value-descriptor ABSENT })

我知道,如果您使用显式标记,syntaxtransfer-syntax 都会有特定于上下文的标识符标记,但是在 @987654331 之前没有 [0][1] @ 和 transfer-syntax 分别让我不清楚我应该如何编码。是否存在与这些字段关联的假定特定于上下文的标识符?换句话说,我是否应该使用标识符标签0x81 编码OBJECT IDENTIFIER 来指定我正在编码syntax 和标识符标签0x82 来指定我正在编码transfer-syntax

【问题讨论】:

    标签: asn.1 ber


    【解决方案1】:

    EMBEDDED PDV 的“关联类型”在 ITU-T X.680(2015) 第 36.5 条中给出,在给出定义之前包括“假设和自动标记环境”。这样做是为了避免每个字段的隐含标签使文本混乱。这意味着在“标识”内部,替代“语法”具有 [1] 的隐式标记,而“传输语法”具有 [4] 的隐式标记。这是 EMBEDDED PDV 内容的关联类型的定义,无论“EMBEDDED PDV”出现在什么标记上下文中。

    【讨论】:

    • 非常感谢!这正是我所需要的!
    【解决方案2】:

    您的 ASN.1 符号似乎不明确。我能想到的唯一处理方法是显式标记。

    如果您的 ASN.1 模块在模块定义中有 AUTOMATIC 标记子句,那么您的编码器可能应该从标记值 0 开始显式标记 ASN.1 SEQUENCE、SET 和 CHOICE 中的所有未标记组件。

    仅当您尝试序列化的构造数据结构定义中不存在已标记的组件时,才应应用自动标记。

    这是possibly relevant answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      相关资源
      最近更新 更多