ASN1 глобальные ограничения - PullRequest
0 голосов
/ 09 марта 2020

Ниже модуль имеет sKeyPkgAttrs (глобальный) и SKeyAttributes (локальный). Я хочу добавить некоторые атрибуты в них. Если атрибут присутствует в sKeyPkgAttrs, то он НЕ ДОЛЖЕН присутствовать в SKeyAttributes - и наоборот.

Некоторые из моих атрибутов являются НЕОБЯЗАТЕЛЬНЫМИ, и некоторые ДОЛЖНЫ БЫТЬ присутствовать в этом модуле.

Вопрос : можно ли ограничить этот модуль таким образом, чтобы он проверял, появился ли атрибут в одном из вышеперечисленных, поэтому его нельзя вставить в другой? И если атрибут появляется вообще (когда он ДОЛЖЕН БЫТЬ)

Например, :

  • Я помещаю те же атрибуты в sKeyPkgAttrs и SKeyAttributes - все как OPTIONAL
  • ограничение «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 ::= { ... }

1 Ответ

1 голос
/ 12 марта 2020

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

...