【问题标题】:How to set default values in a SEQUENCE OF object如何在 SEQUENCE OF 对象中设置默认值
【发布时间】:2018-10-16 21:21:36
【问题描述】:

我开始使用 pyasn1 库,我有一个关于如何在 SEQUENCE OF 对象中设置默认值的问题。我的 ASN1 结构如下:

Asn1Def DEFINITIONS AUTOMATIC TAGS ::= 
BEGIN
  CasinoPlayer ::= SEQUENCE       
  {                                                     
     name      UTF8String (SIZE(1..16)),
     luckyNumbers SEQUENCE  (SIZE(3)) OF INTEGER DEFAULT {7,7,7}
  }                                                     
END

我了解如何使用namedtype.DefaultedNamedType 对象和使用子类型添加SIZE 约束在CasinoPlayer SEQUENCE 中创建一个DEFAULT 字段,但是我应该如何初始化默认值{7,7,7}?

谢谢

【问题讨论】:

    标签: pyasn1


    【解决方案1】:

    我认为它应该是这样的:

    class CasinoPlayer(Sequence):
        componentType = NamedTypes(
            NamedType(
                'name',
                UTF8String(
                    ConstraintsIntersection(
                        ValueSizeConstraint(1, 16)
                    )
                )
            ),
            DefaultedNamedType(
                'luckyNumbers',
                SequenceOf(
                    componentType=Integer(),
                    sizeSpec=ConstraintsIntersection(
                        ValueSizeConstraint(3, 3)
                    )
                ).setComponentByPosition(0, 7)
                 .setComponentByPosition(1, 7)
                 .setComponentByPosition(2, 7)
            )
        )
    

    另外,您可能需要将标签分配给每个 ASN.1 类型(正如 AUTOMATIC TAGS 子句所暗示的那样)。

    更新:

    实际上,这应该有效,但它没有!幸运的是,the fix 应该使默认的SequenceOf 传播到Sequence 字段,只要它是DefaultedNamedType

    【讨论】:

    • 感谢您的快速反馈。我刚刚将luckyNumbers 的NamedType 更改为DefaultedNamedType
    • 我尝试使用 DER 编码器对一个简单的对象进行编码,它工作正常,只是大小约束似乎不适用。我可以创建一个只有 2 或 4 个整数的 SequenceOf 对象并调用 setComponentByName('luckyNumbers', <SequenceOf object>),编码器将对其进行编码而不会出现任何错误。创建 ASN1 值时是预期的还是我遗漏了什么?
    • @zecky 请尝试上面链接的修复程序。不过,尺寸限制似乎有效。如果没有,让我们看看你的代码?
    • @zecky 如果您尝试了答案中提到的修复但它对您不起作用,您能否发布复制者?可能是 GitHub issue 会是一个更方便的地方。
    • 我在github 下发布了一个测试向量我不确定测试 3 是否有效,但我不是 ASN.1 专家。你对此的看法如何?我预计测试 7 和 8 会失败,但这可能是由于我使用 API 的方式。
    猜你喜欢
    • 2018-03-19
    • 1970-01-01
    • 2016-01-19
    • 2014-08-16
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 2016-06-24
    • 2014-01-16
    相关资源
    最近更新 更多