下面的模块包括sKeyPkgAttrs (全局)和(本地)。我想在这些文件中添加一些属性。如果属性存在于sKeyPkgAttrs中,那么它就不能存在于SKeyAttributes中,反之亦然。
我的一些属性是可选的,有些必须出现在这个模块中。
问题:是否有可能对该模块进行约束,使其能够检查上面的某个属性是否出现,从而无法将其放入另一个模块?如果一个属性出现了(当它是一个必须的时候)
例如,:
我在OPTIONAL
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 ::= { ... }发布于 2020-03-12 17:34:35
您需要对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约束表示法内置功能的约束。显然,您需要将--注释描述约束--替换为您试图施加的约束的完整描述。
https://stackoverflow.com/questions/60599571
复制相似问题