具有命名位和可扩展大小约束的 BIT STRING PER 编码

问题描述 投票:0回答:1

鉴于:

X ::= BIT STRING {a(0), b(1)} (SIZE(2, ...))

用于值“00”B 的 PER 编码的正确长度是多少?

我认为编码应该使用长度 0,因为 X.691 16.3 要求修剪到“能够承载该值并满足有效大小约束的最小大小”,并且对 X 的约束通过可扩展,允许对于长度为 0 的值。

但是,“满足有效大小约束”似乎没有很好定义,而且我知道使用长度 2 进行编码的工具。

尽管如此,即使上面的短语没有明确定义,假设我们有:

X-V2 ::= BIT STRING {a(0), b(1)} (SIZE(2, ..., 0))

那么我认为在任何解释下都很难说长度 0 不满足有效大小约束。这意味着对于 X-V2,'00'B 将使用长度 0 进行编码。此外,我相信为了启用规范的 PER 编码,X 和 X-V2 必须 以相同的方式编码 '00'B,这意味着对于类型 X 的“00”B 也使用长度 0。

在我看来,歧义源于 X 中哪些值被视为构成或“存在”,因为 X.691 给出了这些相关定义:

3.7.8 有效大小约束(对于受约束的字符串类型):可以应用于内置字符串类型的单个有限大小约束,其效果是允许所有且仅允许 可以出现 的长度受约束的字符串类型。

10.3.10 受约束类型的有效大小约束是单个大小约束,当且仅当受约束类型有某个值具有该(允许的)大小时,才允许大小。

在一些地方,X.680 让我们相信可扩展类型由根中的值加上扩展附加中的任何值组成:

附件一4.2.3:

A1 ::= INTEGER (1..32, ... , 33..128)

A1 是可扩展的,包含值 1 到 128,其中 1 到 32 在根中,33 到 128 作为扩展添加。

50.1:

注 6 – “ElementSetSpecs”引用的元素是“RootElementSetSpec”和“AdditionalElementSetSpec”(如果存在)引用的元素的并集。

但是似乎也表明可扩展类型包含受约束类型中的所有相同值:

6:

从形式上来说,可扩展类型X定义的抽象语法不仅包含类型X的值,还包含与X扩展相关的所有类型的值。

和 3.8.38:

扩展相关:具有相同扩展根的两种类型,其中一种是通过向另一种添加零个或多个扩展添加而创建的。

我认为此处第 6 节的规则以及附件 I 4.2.3 和 50.1 注释 6 中的语言不精确。

基本上,我正在寻找相反的论点,或者寻找有人指出我错过了什么(如果我错过了什么)。

asn.1
1个回答
0
投票

您的解释与第 16.6 条相矛盾,该条处理 PER 编码的可扩展类型。我相信第 16.1 至 16.5 节指的是 PER 编码不可扩展的类型,或者根据第 16.6 节,长度和值将“编码为不存在扩展”的情况。这也意味着 16.3 中的短语“有效大小约束”应被理解为它的根部分。

我在您的解释中看到的另一个问题是,即使该值作为根值存在合法编码,它也会强制将值编码为扩展附加值。这也与 16.6 相矛盾。

© www.soinside.com 2019 - 2024. All rights reserved.