ASN1 全局约束
ASN1 global constraints
下面的模块有 sKeyPkgAttrs(全局)和 SKeyAttributes(本地)。我想在其中添加一些属性。如果一个属性存在于 sKeyPkgAttrs 中,那么它绝不能存在于 SKeyAttributes 中——反之亦然。
我的一些属性是可选的,一些属性必须出现在这个模块中。
问题:是否可以通过检查属性是否出现在上述其中一个中的方式来约束此模块,因此不能将其放在另一个中?如果一个属性出现了(当它必须出现时)
例如:
- 我在 sKeyPkgAttrs 和 SKeyAttributes 中放置了相同的属性 - 都是可选的
- constrain "WITH COMPONENT" 检查是否至少存在一个属性
- 一些其他约束检查属性是否不重复
- 一些其他约束检查是否存在 MUST BE 属性
SymmetricKeyPackage ::= SEQUENCE {
version KeyPkgVersion DEFAULT v1,
sKeyPkgAttrs [0] SEQUENCE SIZE (1..MAX) OF Attribute
{{ SKeyPkgAttributes }} OPTIONAL,
sKeys SymmetricKeys,
... }
SymmetricKeys ::= SEQUENCE SIZE (1..MAX) OF OneSymmetricKey
OneSymmetricKey ::= SEQUENCE {
sKeyAttrs SEQUENCE SIZE (1..MAX) OF Attribute
{{ SKeyAttributes }} OPTIONAL,
sKey OCTET STRING OPTIONAL }
( WITH COMPONENTS { ..., sKeyAttrs PRESENT } |
WITH COMPONENTS { ..., sKey PRESENT } )
KeyPkgVersion ::= INTEGER { v1(1) } ( v1, ... )
SKeyPkgAttributes ATTRIBUTE ::= { ... }
SKeyAttributes ATTRIBUTE ::= { ... }
您需要对 SymmetricKeyPackage 本身施加约束。不幸的是,ASN.1 对我认为您正在寻找的那种唯一性检查没有约束。 ASN.1 确实允许如下所谓的用户约束:
SymmetricKeyPackage ::= SEQUENCE {
version KeyPkgVersion DEFAULT v1,
sKeyPkgAttrs [0] SEQUENCE SIZE (1..MAX) OF Attribute
{{ SKeyPkgAttributes }} OPTIONAL,
sKeys SymmetricKeys,
... } (CONSTRAINED BY {-- comment describing constraint --})
有些 ASN.1 工具会忽略这个约束,但有些 ASN.1 工具会创建一个函数存根,您可以在其中编写自己的代码来强制执行这种超出内置功能的约束ASN.1 约束符号。显然,您需要将 -- comment describing constraint -- 替换为您试图施加的约束的完整描述。
下面的模块有 sKeyPkgAttrs(全局)和 SKeyAttributes(本地)。我想在其中添加一些属性。如果一个属性存在于 sKeyPkgAttrs 中,那么它绝不能存在于 SKeyAttributes 中——反之亦然。
我的一些属性是可选的,一些属性必须出现在这个模块中。
问题:是否可以通过检查属性是否出现在上述其中一个中的方式来约束此模块,因此不能将其放在另一个中?如果一个属性出现了(当它必须出现时)
例如:
- 我在 sKeyPkgAttrs 和 SKeyAttributes 中放置了相同的属性 - 都是可选的
- constrain "WITH COMPONENT" 检查是否至少存在一个属性
- 一些其他约束检查属性是否不重复
- 一些其他约束检查是否存在 MUST BE 属性
SymmetricKeyPackage ::= SEQUENCE {
version KeyPkgVersion DEFAULT v1,
sKeyPkgAttrs [0] SEQUENCE SIZE (1..MAX) OF Attribute
{{ SKeyPkgAttributes }} OPTIONAL,
sKeys SymmetricKeys,
... }
SymmetricKeys ::= SEQUENCE SIZE (1..MAX) OF OneSymmetricKey
OneSymmetricKey ::= SEQUENCE {
sKeyAttrs SEQUENCE SIZE (1..MAX) OF Attribute
{{ SKeyAttributes }} OPTIONAL,
sKey OCTET STRING OPTIONAL }
( WITH COMPONENTS { ..., sKeyAttrs PRESENT } |
WITH COMPONENTS { ..., sKey PRESENT } )
KeyPkgVersion ::= INTEGER { v1(1) } ( v1, ... )
SKeyPkgAttributes ATTRIBUTE ::= { ... }
SKeyAttributes ATTRIBUTE ::= { ... }
您需要对 SymmetricKeyPackage 本身施加约束。不幸的是,ASN.1 对我认为您正在寻找的那种唯一性检查没有约束。 ASN.1 确实允许如下所谓的用户约束:
SymmetricKeyPackage ::= SEQUENCE {
version KeyPkgVersion DEFAULT v1,
sKeyPkgAttrs [0] SEQUENCE SIZE (1..MAX) OF Attribute
{{ SKeyPkgAttributes }} OPTIONAL,
sKeys SymmetricKeys,
... } (CONSTRAINED BY {-- comment describing constraint --})
有些 ASN.1 工具会忽略这个约束,但有些 ASN.1 工具会创建一个函数存根,您可以在其中编写自己的代码来强制执行这种超出内置功能的约束ASN.1 约束符号。显然,您需要将 -- comment describing constraint -- 替换为您试图施加的约束的完整描述。