Глобальные ограничения ASN1

Ниже модуль имеет 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 ::= { ... }

person Mateusz Woźniak    schedule 09.03.2020    source источник


Ответы (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. обозначение. Очевидно, вам нужно заменить -- комментарий с описанием ограничения -- полным описанием ограничения, которое вы пытаетесь наложить.

person Paul Thorpe    schedule 12.03.2020