Как работает ограничение длины типа для определения ASN.1

Вопрос о механизме кодирования ASN.1 для примитивных типов. Например, у меня есть следующее определение типа в test.asn1:

NodeID ::= IA5String (SIZE(1..20))

Здесь NodeId может иметь максимальную длину строки 20. У меня был вопрос: что, если значение, присвоенное NodeID, превышает максимальную длину 20? Может ли он пройти функцию кодирования (использовать BER)? Спасибо!


person user2641335    schedule 19.08.2013    source источник


Ответы (1)


BER не принимает во внимание ограничения. Конечно, у вас может быть кодировка BER для недопустимого NodeID, где значение нарушает ограничение размера. Конечно, ваши инструменты могут помешать вам сделать это, но с точки зрения ASN.1 это возможно.

person Kevin    schedule 19.08.2013
comment
Странно, поскольку я использую BER, но кажется, что моя система использует ограничения, например, для OCTET STRING, но не для IA5STRING и INTEGER. Любая ссылка на BER не учитывает ограничения? - person maiky; 07.09.2017
comment
@maiky Вы можете посмотреть X.690 для полного описания кодирования BER. Когда BER кодирует значения, кодирование не зависит от наличия ограничений; в отличие от PER, где есть случаи, когда фактически невозможно закодировать определенные недопустимые значения. Опять же, это не делает недопустимое значение действительным, это просто означает, что кто-то может создать данные BER, содержащие недопустимые значения. - person Kevin; 07.09.2017
comment
@maiky На самом деле, это прописано в X.690 (2015) 8.1.1.4: Кодировки, указанные в этой Рекомендации | Международный стандарт не зависит ни от нотации подтипа ASN.1, ни от нотации расширяемости типа ASN.1. ПРИМЕЧАНИЕ. – Это означает, что при определении кодировок игнорируются все нотации ограничений, а все маркеры расширяемости в CHOICE, SEQUENCE и SET игнорируются, а расширения рассматриваются так, как если бы они находились в корне расширения типа. - person Kevin; 07.09.2017