【问题标题】:ASN1 global constraintsASN1 全局约束
【发布时间】:2020-03-09 11:24:57
【问题描述】:

以下模块具有 sKeyPkgAttrs(全局)和 SKeyAttributes(本地)。我想在这些中添加一些属性。如果一个属性存在于 sKeyPkgAttrs 中,那么它绝不能存在于 SKeyAttributes 中——反之亦然。

我的一些属性是可选的,一些必须存在于这个模块中。

问题:是否可以通过检查属性是否出现在上述其中一个中的方式来约束此模块,因此不能将其放入另一个中?如果一个属性出现了(当它必须是时)

例如

  • 我在 sKeyPkgAttrs 和 SKeyAttributes 中放置了相同的属性 - 全部为可选
  • constrain "WITH COMPONENT" 检查是否至少存在一个属性
  • 其他一些约束检查属性是否不重复
  • 其他一些约束检查是否必须存在属性
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 ::= { ... }

【问题讨论】:

    标签: asn.1


    【解决方案1】:

    您需要对 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 约束符号。显然,您需要用您试图施加的约束的完整描述替换 -- 描述约束的注释。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-12
      • 2022-11-02
      • 2013-10-28
      • 1970-01-01
      • 2023-02-09
      相关资源
      最近更新 更多