28. Зашифрованные оболочки

Содержание

28.1. Общие сведения

Зашифрованные оболочки определяют область текста, которая должна быть преобразована перед анализом процессором исходного языка. Эти области текста структурированы таким образом, чтобы предоставить процессору исходного языка спецификацию криптографического алгоритма, ключа, атрибутов оболочки и текстовых данных дизайна.

Вся информация, идентифицирующая зашифрованных оболочках, вводится pragma protect (см. 19.10). Эта pragma зарезервирована настоящим стандартом для описания зашифрованных оболочек и является префиксом для указания областей и спецификаций обработки для каждого зашифрованных оболочки. Дополнительная информация ассоциируется с pragma путем добавления выражений pragma. Выражения pragma protect оцениваются в последовательности слева направо. Интерпретация зашифрованных оболочек не должна изменяться в зависимости от того, встречается ли последовательность выражений pragma в одной директиве или в последовательности директив pragma protect. В этом пункте, если не указано иное, директивы pragma, ключевые слова и выражения pragma означают вхождения директив pragma protect и связанных с ними ключевых слов и выражений pragma.

Оболочки могут быть определены для одного из двух режимов обработки. Зашифрованные оболочки определяют выражения pragma для шифрования областей исходного текста. Области шифрования начинается в исходном тексте, когда встречается выражение begin pragma. Конец шифровальной оболочки происходит в точке, где встречается выражение end pragma. Выражение pragma end считается закрывающим область и должно быть связано с последним выражением pragma begin.

Расшифрованные оболочки определяют выражения pragma для расшифровки зашифрованных областей текста. Область расшифровки начинается в исходном тексте, когда встречается выражение pragma begin_protected. Конец области расшифровки происходит в точке, где встречается выражение pragma end_protected. Выражение pragma end_protected закрывает область и должно быть связано с последним выражением begin_protected, которое еще не было закрыто. Области дешифрования могут содержать другие области в пределах вложенного блока данных. Количество вложенных областей расшифровки, которые могут быть обработаны, определяется реализацией. Это число должно быть не менее 8. Код, который содержится в области расшифровки, считается зашифрованным.

Выражения Pragma, которые предшествуют begin или begin_protected, обозначаются как ключевые слова оболочки. pragma выражения, которые следуют за ключевыми словами begin/begin_protected и предшествуют соответствующим ключевым словам end/ end_protected, обозначаются как ключевые слова содержимого. Ключевые слова содержимого — это pragmaатические выражения, которые находятся в области текста, обрабатываемого во время шифрования или дешифрования зашифрованной области.

28.2. Обработка зашифрованных оболочек

Для зашифрованных оболочек определены два режима обработки. Шифрование оболочек — это процесс распознавания шифрующих оболочек в исходном тексте и преобразования их в дешифрующие оболочки. Дешифрование оболочек — это процесс распознавания дешифрующих оболочек во входном тексте и преобразования их в соответствующий открытый текст для последующего шага компиляции.

Средства, обрабатывающие Verilog HDL, должны выполнять расшифровку оболочек для всех оболочек расшифровки, содержащихся в исходном тексте, если соответствующий ключ предоставлен пользователем. Инструменты, выполняющие шифрование оболочек, должны обрабатывать только директивы protect pragma и не должны применять никакой другой интерпретации к тексту, который не является частью директивы protect pragma.

28.2.1. Шифрование

Инструменты Verilog, предоставляющие услуги шифрования, должны преобразовывать исходный текст, содержащий оболочки шифрования, заменяя каждый оболочку шифрования оболочкой дешифрования, сформированным путем шифрования исходного текста оболочки шифрования в cоответствии с указанными выражениями pragma.

Исходный текст, не содержащийся в шифровальноq оболочки, не должен изменяться шифрующим языковым процессором, если не указано иное.

Оболочки дешифрования формируются из оболочек шифрования путем преобразования указанных выражений pragma оболочки шифрования в выражения pragma оболочки дешифрования и выражения pragma содержимого дешифрования. Тело оболочки шифрования шифруется с использованием указанного ключа, называемого exchange key, и записывается в конверт расшифрования в виде блока данных (data_block).

Алгоритмы шифрования, которые используют один и тот же ключ для шифрования чистого текста и расшифровки соответствующего шифротекста, называются симметричными. Алгоритмы, которые требуют разных ключей для шифрования и расшифровки, называются асимметричными. Это описание может быть применено как к алгоритму, так и к ключу.

Инструменты, выполняющие алгоритм шифрования, могут поддерживать session keys(сессионый ключ) для ограничения воздействия ключа обмена, который указан автором IP с помощью pragma выражения encryption envelope. Сессионый ключ создается неопределенным образом для шифрования данных из шифровального оболочки. Копия сеансового ключа шифруется с помощью ключа обмена и записывается в блок key_block в оболочки расшифровки. Затем тело оболочки шифрования шифруется с помощью сессионного ключа и записывается в оболочку расшифровки в виде блока data_block.

В следующем примере показано использование pragma protect для задания шифрования кода. Метод шифрования представляет собой простой подстановочный шифр, в котором каждый алфавитный символ заменяется 13-м символом в алфавитной последовательности, обычно называемым «rot13». Неалфавитные символы не заменяются. Следующие расчетные данные содержат шифровальную оболочку, в котором указана требуемое шифрование.
module secret (a, b); input a; output b; `pragma protect encoding=(enctype="raw") `pragma protect data_method="x-caesar", data_keyname="rot13", begin `pragma protect runtime_license=(library="lic.so",feature="runSecret",entry="chk", match=42) reg b; initial begin b = 0; end always begin #5 b = a; end `pragma protect end endmodule // secret
После обработки шифрования получаются следующие расчетные данные. Оболочки для расшифровки записывается с «сырой» кодировкой, чтобы подстановочное шифрование было непосредственно видно.
module secret (a, b); input a; output b; `pragma protect encoding=(enctype="raw") `pragma protect data_method="x-caesar", data_keyname="rot13", begin_protected `pragma protect data_block encoding=(enctype="raw", bytes=190) ‘centzn cebgrpg ehagvzr_yvprafr=(yvoenel="yvp.fb",srngher="ehaFrperg",ragel="pux",zngpu=42)ert o;vavgvny ortvao = 0;raqnyjnlf ortva#5 o = n;raq `pragma protect end_protected `pragma reset protect endmodule // secret

28.2.2. Расшифровка

Инструменты Verilog, поддерживающие компиляцию с расшифровкой, должны преобразовать исходный текст, содержащий оболочки расшифровки, заменив каждую оболочку расшифровки на расшифрованный исходный текст из блока data_block в соответствии с указанными выражениями pragma. Заменяемый текст может содержать использование текстовых макросов, которые должны быть заменены после замены оболочки расшифровки. Замещаемый текст может также содержать оболочки расшифровки, которые должны быть расшифрованы и заменены после замены вложенного в них оболочки расшифровки.

28.3. Директивы pragma

Защищенные оболочки — это лексические области, разграниченные директивами protect pragma. Действие конкретной директивы protect pragma задается ее выражениями pragma. Настоящий стандарт определяет имена ключевых слов pragma, перечисленные в таблице 28-1, для использования с pragma protect. Эти ключевые слова pragma определены в разделе 28.4 указанием того, как каждое из них участвует в режимах обработки шифрования и дешифрования.

Таблица 28-1 — Protect pragma ключевые слова

Ключевые слова PragmaОписание
beginОткрывает новую оболочку для шифрования
endЗакрытие оболочки шифрования
begin_protectedОткрывает новую оболочку для расшифровки
end_protectedЗакрытие оболочки расшифровки
authorИдентифицирует автора оболочки
author_infoУказывает дополнительную информацию об авторе
encrypt_agentИдентификация имя инструмента шифрования
encrypt_agent_infoУказывает дополнительную информацию, предоставленную инструментом шифрования
encodingОпределяет, как должно быть закодировано содержимое data_block, digest_block и key_block.
data_keyownerИдентифицирует владельца ключа шифрования
data_methodОпределяет алгоритм шифрования данных
data_keynameУказывает имя ключа шифрования
data_public_keyУказание открытого ключа для шифрования данных
data_decrypt_keyУказывает, что следующая строка содержит закодированное значение ключа, который расшифрует блок data_block
data_blockУказывает, что блок данных начинается со следующей строки в файле
digest_keyownerИдентифицирует владельца ключа шифрования digest
digest_key_methodОпределяет алгоритм шифрования digest
digest_keynameУказывает имя ключа шифрования digest
digest_public_keyУказание открытого ключа для шифрования digest
digest_decrypt_keyУказывает, что следующая строка содержит закодированное значение ключа, с помощью которого будет расшифрован блок digest_block
digest_methodУказывает алгоритм digest сообщений, который будет использоваться для генерации digest сообщений
digest_blockОпределяет digest сообщения для обеспечения целостности данных
key_keyownerИдентифицирует владельца ключа шифрования
key_methodУказывает алгоритм шифрования ключа
key_keynameУказывает имя ключа шифрования ключа
key_public_keyУказывает открытый ключ для шифрования ключей
key_blockУказывает, что блок ключей начинается со следующей строки в файле
decrypt_licenseОпределяет лицензионные ограничения на расшифровку
runtime_licenseОпределяет лицензионные ограничения на моделирование
commentКомментарий
resetСброс значений ключевых слов pragma на значения по умолчанию
viewportИзменяет область доступа к оболочке расшифровки

Область действия директив protect pragma является полностью лексической и не связана с какой-либо декларативной областью или объявлением в самом тексте HDL. Эта лексическая область действия может пересекать границы файлов и включенных файлов.

В защищенных оболочках, где отсутствует конкретное ключевое слово pragma, инструмент Verilog должен использовать значение по умолчанию. Инструменты Verilog, выполняющие шифрование, должны явно выводить все соответствующие ключевые слова pragma для каждой оболочки, чтобы избежать непреднамеренных интерпретаций при расшифровке. Дополнительной устойчивости можно добиться, добавляя ключевое слово reset pragma после каждой оболочки.

28.4. Ключевые слова Protect pragma

28.4.1. begin

28.4.1.1. Синтаксис

begin

28.4.1.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: Выражение begin pragma используется во входном тексте, чтобы указать шифрующему инструменту точку, с которой должно начаться шифрование.

Вложение блоков pragma begin-end является ошибкой. Внутри такого блока могут находиться блоки begin_protected-end_protected, содержащие ранее зашифрованное содержимое. Они просто рассматриваются как поток байтов и шифруются, как если бы это был текст.

ВЫХОДНЫЕ ДАННЫЕ ШИФРОВАНИЯ: Выражение pragma begin заменяется в потоке вывода шифрования выражением pragma begin_protected. После begin_protected все выражения pragma, необходимые для вывода шифрования, должны быть сгенерированы до выражения preama end_protected. Зашифровонные оболочки должны быть полностью автономными, чтобы избежать любого нежелательного взаимодействия при наличии нескольких зашифрованных моделей во входных данных расшифровки. Pragma выражения data_block и key_block вводят зашифрованные данные или ключи и всегда находятся в пределах begin_protected-end_protected оболочки. Весь текст, включая комментарии и другие pragma protected, встречающийся между выражением begin pragma и соответствующим выражением end pragma, должен, если не указано иное, быть зашифрован и помещен в выходной поток шифрования с помощью выражения data_block pragma. Неопределенная длина произвольного текста комментария может быть добавлена средством шифрования в начало и конец входного текста для предотвращения известных текстовых атак на зашифрованное содержимое data_block.

ВХОДНЫЕ ДАННЫЕ ДЛЯ РАСШИФРОВКИ: нет

28.4.2. end

28.4.2.1. Синтаксис

end

28.4.2.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: Выражение pragma end используется во входном чистом тексте для указания конца области, которая должна быть зашифрована. Выражение pragma end заменяется в выходном потоке шифрования выражением pragma end_protected.

ВЫХОДНЫЕ ДАННЫЕ ШИФРОВАНИЯ: нет

ВХОДНЫЕ ДАННЫЕ ДЛЯ РАСШИФРОВКИ: нет

28.4.3. begin_protected

28.4.3.1. Синтаксис

begin_protected

28.4.3.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: Когда блок begin_protected-end_protected встречается во входном файле во время шифрования, его содержимое рассматривается как входной чистый текст. Это позволяет повторно зашифровать ранее зашифрованную модель как часть более крупной модели. Любые другие pragma protect внутри блока begin_protected-end_protected не интерпретируются и не отменяют действующие pragma. Вложенное шифрование не должно нарушать значения pragma в текущем процессе шифрования.

ВЫХОДНЫЕ ДАННЫЕ ШИФРОВАНИЯ: Выражение pragma begin_protected и все содержимое защищенной оболочки до соответствующего выражения pragma end_protect должны быть зашифрованы в текущем блоке data_block, как указано текущим методом и ключами.

ВХОДНЫЕ ДАННЫЕ ДЛЯ РАСШИФРОВКИ: Pragma выражение begin_protected начинает ранее зашифрованную область. Инструмент расшифровки должен накапливать все pragma выражения в блоке для использования при расшифровке блока.

28.4.4. end_protected

28.4.4.1. Синтаксис

end_protected

28.4.4.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: Это выражение pragma указывает на конец предыдущего блока begin_protected. Это означает, что блок завершен, и последующие значения выражения pragma будут накапливаться для следующего конверта.

ВЫХОДНЫЕ ДАННЫЕ ШИФРОВАНИЯ: Выражение pragma end_protected, следующее за соответствующим выражением pragma begin_protected, должно быть зашифровано в текущий блок данных data_block, как указано текущим методом и ключами.

ВХОДНЫЕ ДАННЫЕ ДЛЯ РАСШИФРОВКИ: Выражение pragma end_protected указывает на конец набора pragma, достаточных для расшифровки текущего блока.

28.4.5. author

28.4.5.1. Синтаксис

author = <string>

28.4.5.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: Выражение author pragma указывает строку, которая идентифицирует имя автора IP. Оно отличается от выражения comment pragma, чтобы эта информация могла быть распознана без необходимости разбора значения строки comment.

ВЫХОДНЫЕ ДАННЫЕ ШИФРОВАНИЯ: Если присутствует в оболочки шифрования, выражение pragma author помещается в директиву pragma, заключенную внутри зашифрованной оболочки, но не шифруется в data_block. В противном случае оно копируется без изменений в выходной поток.

ВХОДНЫЕ ДАННЫЕ ДЛЯ РАСШИФРОВКИ: нет

28.4.6. author_info

28.4.6.1. Синтаксис

author_info = <string>

28.4.6.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: Выражение author_info pragma указывает строку, содержащую дополнительную информацию, предоставленную автором ИС. Оно отличается от выражения comment pragma, чтобы эта информация могла быть распознана без необходимости разбора значения строки comment.

ВЫХОДНЫЕ ДАННЫЕ ШИФРОВАНИЯ: Если присутствует в оболочке шифрования, выражение pragma author_info помещается в директиву pragma, заключенную внутри зашифрованной оболочки, но не шифруется в блоке data_block. В противном случае оно копируется без изменений в выходной поток.

ВХОДНЫЕ ДАННЫЕ ДЛЯ РАСШИФРОВКИ: нет

28.4.7. encrypt_agent

28.4.7.1. Синтаксис

encrypt_agent = <string>

28.4.7.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: нет

ВЫХОДНОЙ СИГНАЛ ШИФРОВАНИЯ: Выражение pragma encrypt_agent задает строку, которая идентифицирует имя инструмента шифрования. Средство шифрования должно сгенерировать это выражение pragma и поместить его в директиву pragma, заключенную в зашифрованную оболочку, но не должно шифровать его в data_block.

ВХОДНЫЕ ДАННЫЕ ДЛЯ РАСШИФРОВКИ: нет

28.4.8 encrypt_agent_info

28.4.8.1. Синтаксис

encrypt_agent_info = <string>

28.4.8.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: нет

ВЫХОДНОЙ СИГНАЛ ШИФРОВАНИЯ: Выражение pragma encrypt_agent_info задает строку, содержащую дополнительную информацию, предоставленную инструментом шифрования. Если указано, выражение encrypt_agent_info pragma должно быть помещено в директиву pragma, заключенную в зашифрованную оболочку, но не должно быть зашифровано в data_block.

ВХОДНЫЕ ДАННЫЕ ДЛЯ РАСШИФРОВКИ: нет

28.4.9. encoding

28.4.9.1. Синтаксис

encoding = ( enctype = <string> , line_length = <number> , bytes = <number> )

28.4.9.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: Выражение encoding pragma указывает, как должно быть закодировано содержимое data_block, digest_block и key_block. Это кодирование гарантирует, что все двоичные данные, полученные в процессе шифрования, могут рассматриваться как текст. Если выражение encoding pragma присутствует во входных данных, оно определяет, как должен быть закодирован выходной сигнал.

Выражение pragma encoding должно представлять собой значение pragma_expression, содержащее подключевые слова кодирования, разделенные белым пробелом. Для значения выражения pragma encoding определены следующие подключевые слова:

  • enctype=<string>

Метод вычисления кодировки. Настоящий стандарт определяет идентификаторы, приведенные в таблице 28-2, как строковые значения для подключевого слова enctype. Эти идентификаторы ассоциируются с соответствующими алгоритмами кодирования. Необходимые методы являются стандартными в каждой реализации. Необязательные идентификаторы зависят от реализации, но их использование обязательно для соответствующего алгоритма кодирования. Дополнительные значения идентификаторов и соответствующие им алгоритмы кодирования определяются реализацией.

Таблица 28-2 — Идентификаторы алгоритмов кодирования

Тип кодировкиОбязательно/необязательноАлгоритм кодирования
uuencodeОбязательноIEEE Std 1003.1 (исторический алгоритм uuencode)
base64ОбязательноIETF RFC 2045 [также IEEE Std 1003.1 (uuencode -m)].
quoted-printableНеобязательноIETF RFC 2045
rawНеобязательноПреобразование идентичности; кодирование не производится, и данные могут содержать непечатные символы
  • line_length = <number>

Максимальное количество символов (после любого кодирования) в одной строке data_block. Вставка перевода строки в data_block после шифрования и кодирования позволяет использовать сгенерированные текстовые файлы с помощью общедоступных текстовых инструментов.

  • bytes=<number>

Количество байтов в исходном блоке данных до любого кодирования или добавления переносов строк. Это ключевое слово кодирования игнорируется во входных данных шифрования.

ВЫВОД ДАННЫЕ ШИФРОВАНИЯ: Директива encoding должна выводиться в каждом блоке begin_protected-end_protected для явного указания кодировки, используемой agent encrypt_agent. Инструмент может выбрать кодирование данных, даже если во входных данных не было найдено выражение pragma encoding, и должен вывести соответствующее выражение выражение pragma encoding. Инструмент должен генерировать дескриптор кодирования, который указывает в ключевом слове bytes количество байтов в исходном блоке данных.

data_block, data_public_key, data_decrypt_key, digest_block, key_block, и key_public_key кодируются с помощью этой кодировки. Если для каждого из этих полей требуется отдельное кодирование, то во входном потоке перед каждым из приведенных выше pragma выражений можно указать несколько pragna выражений encoding. Значение bites добавляется инструментом шифрования для каждого блока, который он шифрует.

ВХОДНЫЕ ДАННЫЕ ДЛЯ РАСШИФРОВКИ: Во время расшифровки директива encoding используется для определения используемого алгоритма кодирования и размера фактических данных.

28.4.10. data_keyowner

28.4.10.1. Синтаксис

data_keyowner = <string>

28.4.10.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: data_keyowner указывает юридическое лицо или инструмент, предоставивший ключи, используемые для шифрования и расшифровки данных. Это ключевое слово pragma разрешает использование стороннего ключа, отличного от ключа, связанного с author или encrypt_agent. Значение data_keyowner используется инструментом шифрования для выбора ключа, используемого для шифрования data_block. Значения data_keyname, data_decrypt_key и data_public_key должны быть уникальными для указанного владельца data_keyowner.

ВЫХОДНОЙ ФАЙЛ ШИФРОВАНИЯ: data_keyowner должны быть неизменными в выходном файле, за исключением случаев использования цифровой подписи, в этом случае они шифруются с помощью key_method и помещаются в key_block.

ВХОД ДЛЯ РАСШИФРОВКИ: Во время расшифровки data_keyowner объединяются с data_keyname или data_public_key для определения соответствующего секретного/закрытого ключа, который будет использоваться во время расшифровки data_block.

28.4.11. data_method

28.4.11.1. Синтаксис

data_method = <string>

28.4.11.2. Описание

ВХОДНЫЕ ДАННЫЕ ШИФРОВАНИЯ: Выражение data_method pragma указывает алгоритм шифрования, который будет использоваться для шифрования последующих begin-end блоков. Метод шифрования — это идентификатор, который обычно ассоциируется с определенным алгоритмом шифрования.

Настоящий стандарт определяет идентификаторы в таблице 28-3 в качестве строковых значений для выражения pragma data_method. Эти идентификаторы связаны с соответствующими типами шифрования. Необходимые методы являются стандартными в каждой реализации. Необязательные идентификаторы зависят от реализации, но их использование обязательно для соответствующего шифра. Дополнительные значения идентификаторов и соответствующие им шифры определяются

Таблица 28-3 — Идентификаторы алгоритмов шифрования

ИдентификаторОбязательно/необязательноАлгоритм шифрования
des-cbcОбязательныйСтандарт шифрования данных (DES) в режиме CBC
3des-cbcНеобязательныйТройной DES в режиме CBС; ANSI X9.52-1998.
aes128-cbcНеобязательныйСтандарт расширенного шифрования (AES) со 128- битным ключом
aes256-cbcНеобязательныйAES в режиме CBC, с 256-битным ключом.
aes192-cbcНеобязательныйAES с 192-битным ключом.
blowfish-cbcНеобязательныйBlowfish в режиме CBC
twofish256-cbcНеобязательныйTwofish в режиме CBC, с 256-битным ключом
twofish192-cbcНеобязательныйTwofish с 192-битным ключом
twofish128-cbcНеобязательныйTwofish со 128-битным ключом
serpent256-cbcНеобязательныйSerpent в режиме CBC, с 256-битным ключом
serpent192-cbcНеобязательныйSerpent с 192-битным ключом
serpent128-cbcНеобязательныйSerpent с 128-битным ключом
cast128-cbcНеобязательныйCAST-128 в режиме CBC
rsaНеобязательныйRSA
elgamalНеобязательныйElGamal
pgp-rsaНеобязательныйOpenPGP RSA key

ВЫХОДНОЙ ФАЙЛ ШИФРОВАНИЯ: data_method должен быть неизменным в выходном файле, за исключением случаев, когда используется цифровая подпись, в этом случае он шифруется с помощью key_method и помещается в key_block.

ВХОДНЫЕ ДАННЫЕ ДЛЯ РАСШИФРОВКИ: data_method указывает алгоритм, который должен быть использован для расшифровки блока данных data_block.

28.4.12. data_keyname

28.4.12.1. Синтаксис

data_keyname = <string>

28.4.12.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: Pragma выражение data_keyname указывает имя ключа или пары ключей для алгоритма асимметричного шифрования, которые должны использоваться для расшифровки блока данных data_block. Ошибкой будет указание имени ключа data_keyname, которое не входит в список ключей, известных для данного владельца data_keyowner.

ВЫХОДНОЙ СИГНАЛ ШИФРОВАНИЯ: Если во входных данных указано имя ключа data_keyname, оно указывает на ключ, который следует использовать для шифрования данных. Инструмент шифрования должен объединить это выражение pragma с data_keyowner и определить ключ для использования. Само имя ключа data_keyname должно быть выведено как чистый текст в выходной файл, за исключением случаев,когда используется цифровe оболочку. При использовании механизма цифрового оболочки data_keyname шифруется с помощью key_method и key_keyname/key_public_key и кодируется в key_block.

ВХОД ДЛЯ РАСШИФРОВКИ: Значение data_keyname объединяется с data_keyowner для выбора одного ключа, который будет использоваться для расшифровки data_block из зашифрованной оболочки.

28.4.13. data_public_key

28.4.13.1. Синтаксис

data_public_key

28.4.13.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: Выражение pragma data_public_key указывает, что следующая строка файла содержит закодированное значение открытого ключа, который будет использоваться для шифрования данных. Кодировка задается pragma выражением encoding, которое действует в данный момент. Если присутствуют и data_public_key, и data_keyname, то они должны ссылаться на один и тот же ключ.

ВЫХОДНЫЕ ДАННЫЕ ШИФРОВАНИЯ: Выражение pragma data_public_key должно быть выведено в каждом зашифрованном блоке, для которого оно используется, за которым следует закодированное значение. data_method и data_public_key могут быть объединены, чтобы полностью определить требуемое шифрование.

ВХОДНЫЕ ДАННЫЕ ДЛЯ РАСШИФРОВКИ: Данные data_keyowner и data_method могут быть объединены с data_public_key, чтобы определить, знает ли инструмент расшифровки соответствующий закрытый ключ для расшифровки данного data_block. Если инструмент расшифровки может вычислить требуемый ключ, модель может быть расшифрована (если это позволяет лицензирование).

28.4.14. data_decrypt_key

28.4.14.1. Синтаксис

data_decrypt_key

28.4.14.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: data_decrypt_key указывает, что следующая строка содержит закодированное значение ключа, который расшифрует блок data_block. Это выражение pragma следует использовать только при применении цифровых подписей. Автор IP может сгенерировать ключ и использовать его для шифрования чистого текста. Затем этот зашифрованный текст сохраняется в выходном файле как блок data_block. Затем data_method и data_decrypt_key шифруются с помощью key_method и сохраняются в выходном файле как содержимое key_block. Сам data_block не перешифровывается. Перешифровывается только информация о ключе данных.

ВЫХОДНЫЕ ДАННЫЕ ШИФРОВАНИЯ: data_decrypt_key выводится как часть зашифрованного содержания key_block. Значение кодируется, как указано в выражении pragma encoding.

ВХОДНЫЕ ДАННЫЕ ДЛЯ РАСШИФРОВКИ: Определив, что для данной защищенной области использовалась цифровая подпись, инструмент расшифровки должен расшифровать key_block, чтобы найти data_decrypt_key и data_method, которые в свою очередь могут быть использованы для расшифровки data_block.

28.4.15. data_block

28.4.15.1. Синтаксис

data_block

28.4.15.2. Описание

ENCRYPTION INPUT: Ошибкой будет, если во входном файле будет найден data_block, если только он не содержится в ранее созданном блоке begin_protected-end_protected, в этом случае он игнорируется.

ВЫХОДНЫЕ ДАННЫЕ ШИФРОВАНИЯ: Выражение data_block pragma указывает, что блок данных начинается со следующей строки в файле. Инструмент шифрования должен взять каждый блок с begin и end, зашифровать содержимое, как указано в выражении pragma data_method, а затем закодировать блок, как указано в выражении pragma encoding. Полученный текст должен быть выведен.

ВХОД ДЛЯ РАСШИФРОВКИ: data_block сначала считывается в закодированном виде. Кодирование должно быть обратным, а затем блок должен быть внутренне расшифрован.

28.4.16. digest_keyowner

28.4.16.1. Синтаксис

digest_keyowner = <string>

28.4.16.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: data_keyowner указывает юридическое лицо или инструмент, предоставивший ключи, используемые для шифрования и расшифровки данных. Это ключевое слово pragma разрешает использование стороннего ключа, отличного от ключа, связанного с author или encrypt_agent. Значение digest_keyowner используется инструментом шифрования для выбора ключа, используемого для шифрования блока digest_block. Значения digest_keyname, digest_decrypt_key и digest_public_key должны быть уникальными для указанного владельца digest_keyowner. Если владелец digest_keyowner не указан во входных данных, то значением по умолчанию для digest_keyowner будет текущее значение data_keyowner.

ВЫХОДНОЙ ФАЙЛ ШИФРОВАНИЯ: Владелец ключа digest_key должен быть неизменным в выходном файле, за исключением случаев, когда используется цифровая подпись, в этом случае он шифруется методом digest_key_method и помещается в блок digest_key_block.

ВХОДНЫЕ ДАННЫЕ ДЛЯ РАСШИФРОВКИ: Во время расшифровки digest_keyowner комбинируется с digest_keyname или digest_public_key для определения соответствующего секретного/закрытого ключа, который будет использоваться во время расшифровки digest_block.

28.4.17. digest_key_method

28.4.17.1. Синтаксис

digest_key_method = <string>

28.4.17.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: Выражение digest_key_method pragma указывает алгоритм шифрования, который будет использоваться для шифрования последующего содержимого digest_block. Значения, указанные для digest_key_method для идентификации алгоритмов шифрования, аналогичны значениям, указанным для data_method. Если во входных данных не указан digest_key_method, то значением digest_key_method по умолчанию будет текущее значение data_method.

ВЫХОДНОЙ ФАЙЛ ШИФРОВАНИЯ: digest_key_method должен быть неизменным в выходном файле, за исключением случаев, когда используется цифровая подпись, в этом случае она шифруется алгоритмом key_method и использует ключ, найденный в key_block.

ВХОДНЫЕ ДАННЫЕ ДЛЯ РАСШИФРОВКИ: digest_key_method указывает на алгоритм, который будет использоваться для расшифровки файла digest_block.

28.4.18. digest_keyname

28.4.18.1. Синтаксис

digest_keyname = <string>

28.4.18.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: Выражение pragma digest_keyname содержит имя ключа или пары ключей для алгоритма асимметричного шифрования, который будет использоваться для расшифровки блока digest_block. Ошибкой будет указание имени ключа digest_keyname, который не входит в список ключей, известных для данного владельца ключа digest_key. Если digest_keyname не указано во входных данных, то значением по умолчанию для digest_keyname будет текущее значение data_keyname.

ВЫХОДНОЙ СИГНАЛ ШИФРОВАНИЯ: Если во входных данных указано имя ключа digest_keyname, оно указывает на ключ, который должен использоваться для шифрования данных. Инструмент шифрования должен уметь комбинировать это выражение pragma с digest_keyowner и определять ключ для использования. Само имя ключа digest_keyname должно быть выведено как чистый текст в выходной файл, за исключением случаев, когда используется цифровой оболочки. При использовании механизма цифровой оболочки digest_keyname шифруется с помощью key_method и key_keyname/key_public_key и кодируется в key_block.

ВХОД ДЛЯ РАСШИФРОВКИ: Значение digest_keyname объединяется со значением digest_keyowner для выбора единственного ключа, который будет использоваться для расшифровки блока digest_block из защищенной оболочки.

28.4.19. digest_public_key

28.4.19.1. Синтаксис

digest_public_key

28.4.19.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: Выражение digest_public_key pragma указывает, что следующая строка файла содержит закодированное значение открытого ключа, используемого для шифрования digest. Кодировка задается pragma выражением encoding, которое действует в данный момент. Если присутствуют и digest_public_key, и digest_keyname, то они должны ссылаться на один и тот же ключ. Если во входных данных не указан ключ digest_public_key, то значением по умолчанию для ключа digest_public_key будет текущее значение ключа data_public_key.

ВЫХОДНЫЕ ДАННЫЕ ШИФРОВАНИЯ: Выражение pragma digest_public_key должно быть выведено в каждом зашифрованном блоке, для которого оно используется, за которым следует закодированное значение. Метод digest_key_method и digest_public_key могут быть объединены, чтобы полностью задать требуемое шифрование.

ВХОДНЫЕ ДАННЫЕ ДЛЯ РАСШИФРОВКИ: Данные digest_keyowner и digest_key_method могут быть объединены с данными digest_public_key, чтобы определить, знает ли инструмент расшифровки соответствующий закрытый ключ для расшифровки данного digest_block. Если инструмент расшифровки может вычислить требуемый ключ, модель может быть расшифрована (если это позволяет лицензия).

28.4.20. digest_decrypt_key

28.4.20.1. Синтаксис

digest_decrypt_key

28.4.20.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: Ключ digest_decrypt_key указывает, что следующая строка содержит закодированное значение ключа, с помощью которого будет расшифрован блок digest_block. Это выражение pragma следует использовать только при применении цифровых подписей. Автор IP может сгенерировать ключ и использовать его для шифрования digest. Затем этот зашифрованный текст сохраняется в выходном файле как блок digest_block. Затем digest_key_method и digest_decrypt_key шифруются с помощью key_method и сохраняются в выходном файле как содержимое key_block. Сам блок digest_block не перешифровывается. Перешифровывается только информация о ключе digest. Если во входных данных не указан ключ digest_decrypt_key, то значением по умолчанию ключа digest_decrypt_key будет текущее значение ключа data_decrypt_key.

ВЫХОДНЫЕ ДАННЫЕ ШИФРОВАНИЯ: Ключ digest_decrypt_key выводится как часть зашифрованного содержимого файла key_block. Значение кодируется, как указано в выражении pragma encoding.

ВХОДНЫЕ ДАННЫЕ ДЛЯ РАСШИФРОВКИ: Определив, что для данной зашифроанной области использовалась цифровая подпись, инструмент расшифровки должен расшифровать key_block, чтобы найти ключи digest_decrypt_key и digest_key_method, которые в свою очередь могут быть использованы для расшифровки блока digest.

28.4.21. digest_method

28.4.21.1. Синтаксис

digest_method = <string>

28.4.21.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: Выражение digest_method pragma указывает алгоритм digest сообщений, который будет использоваться для генерации digest сообщений для последующего вывода data_block и key_block. Строковое значение — это идентификатор, обычно ассоциируемый с конкретным алгоритмом digest сообщений.

Настоящий стандарт устанавливает значения Таблица 28-4 для выражения pragma digest_method. Дополнительные значения идентификатора определяются реализацией.

Таблица 28-4 — Идентификаторы алгоритмов digest сообщений

ИдентификаторОбязательно/необязательноАлгоритм digest сообщений
sha1ОбязательноЗащищенный алгоритм хэширования 1 (SHA-1)
md5НеобязательноMessage Digest Algorithm 5, см. IETF RFC 1321
md2НеобязательноMessage Digest Algorithm 2, см. IETF RFC 1319
ripemd-160НеобязательноRIPEMD-160, см. ISO/IEC 10118-3:2004

ВЫХОДНОЙ ФАЙЛ ШИФРОВАНИЯ: Метод digest_method должен быть неизменным в выходном файле, за исключением случаев, когда используется цифровая подпись, в этом случае она шифруется методом key_method и помещается в блок key_block.

ВХОД ДЛЯ РАСШИФРОВКИ: digest_method указывает алгоритм, который будет использоваться для генерации digestа из data_block.

28.4.22. digest_block

28.4.22.1. Синтаксис

digest_block

28.4.22.2. Описание

ХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: Если выражение pragma digest_block встречается во входном файле (кроме блока begin_protected-end_protected), оно должно рассматриваться инструментом шифрования как запрос на генерацию digest сообщения в выходном файле.

ВЫХОДНОЙ ДАННЫЕ ШИФРОВАНИЯ: digest сообщения используется для гарантии того, что зашифрованные данные не были изменены. Средство шифрования генерирует digest сообщения (вычислительно уникальный идентификатор фиксированной длины, соответствующий набору данных), используя алгоритм, указанный выражением digest_method pragma, и шифрует digest сообщения, как указано в выражении digest_key_method pragma, используя ключ, указанный в выражениях digest_keyname, digest_key_keyowner, digest_public_key и digest_decrypt_key. Если digest_key_method не указан для оболочки шифрования, то используется текущий ключ шифрования data_method.

Затем этот digest должен быть закодирован с использованием текущего выражения pragma encoding и выведен на следующей строке выходного файла после выражения pragma digest_block. Блок digest_block должен генерироваться для каждого key_block и data_block, которые создаются в процессе шифрования, и должен следовать непосредственно за key_block или data_block, на который он ссылается.

ВХОДНЫЕ ДАННЫЕ ДЛЯ ДЕКРИПЦИИ: Чтобы проверить подлинность сообщения, инструмент потребления расшифровывает зашифрованные данные, генерирует digest сообщения из расшифрованных данных, расшифровывает digest сообщения в блоке digest_block с помощью указанного ключа и сравнивает два digest сообщения. Если два digest не совпадают, то либо блок digest_block, либо зашифрованные данные были изменены с момента шифрования входных данных. digest сообщения для key_block или data_block должен содержаться в digest_block, который следует непосредственно за key_block или data_block.

28.4.23. key_keyowner

28.4.23.1. Синтаксис

key_keyowner = <string>

28.4.23.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: Key_keyowner указывает юридическое лицо или инструмент, который предоставил ключи, используемые для шифрования и расшифровки ключевой информации. Значение key_keyowner также имеет те же ограничения, которые указаны для значений data_keyowner.

ВЫХОДНОЙ ФАЙЛ ШИФРОВАНИЯ: Key_keyowner должен быть неизменным в выходном файле.

ВХОД ДЛЯ РАСШИФРОВКИ: Во время расшифровки Key_keyowner ключа может быть объединен с key_keyname ключа или key_public_key для определения соответствующего секретного/закрытого ключа, который будет использоваться при расшифровке key_block.

28.4.24. key_method

28.4.24.1. Синтаксис

key_method = <string>

28.4.24.2. Описание

ВХОДНЫЕ ДАННЫЕ ШИФРОВАНИЯ: Выражение pragma key_method указывает алгоритм шифрования, который должен использоваться для шифрования ключей, используемых для шифрования data_block. Значения, указанные для key_method для идентификации алгоритмов шифрования, такие же, как и для data_method.

ВЫХОДНОЙ ФАЙЛ ШИФРОВАНИЯ: key_method должен быть неизменным в выходном файле.

ВХОДНЫЕ ДАННЫЕ ДЛЯ РАСШИФРОВКИ: Key_method указывает алгоритм, который будет использоваться для расшифровки файла key_block.

28.4.25. key_keyname

28.4.25.1. Синтаксис

key_keyname = <string>

28.4.25.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: Выражение pragma key_keyname содержит имя ключа или пары ключей для алгоритма асимметричного шифрования, которые будут использоваться для расшифровки key_block. Ошибкой будет указание имени key_keyname, которое не входит в список ключей, известных для данного владельца key_keyowner.

ВЫХОД ШИФРОВАНИЯ: Если во входных данных указано key_keyname, оно указывает на ключ, Разрешенное лицензированное использование который должен использоваться для шифрования ключей шифрования данных. Инструмент шифрования должен уметь комбинировать это выражение pragma с key_keyowner и определять ключ для использования. Само key_keyname должно быть выведено как чистый текст в выходной файл.

ВХОД ДЛЯ РАСШИФРОВКИ: Значение key_keyname объединяется с key_keyowner для выбора единственного ключа, который будет использоваться для расшифровки data_block_block из зашифрованной оболочки.

28.4.26. key_public_key

28.4.26.1. Синтаксис

key_public_key

28.4.26.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: Выражение pragma key_public_key указывает, что следующая строка файла содержит закодированное значение открытого ключа, который будет использоваться для шифрования данных ключа. Кодировка задается pragma выражением encoding, которое действует в данный момент. Если присутствуют и key_public_key, и key_keyname, то они должны ссылаться на один и тот же ключ.

ВЫХОДНЫЕ ДАННЫЕ ШИФРОВАНИЯ: Выражение pragma key_public_key должно быть выведено в каждом зашифрованном блоке, для которого оно используется, за которым следует закодированное значение. Key_method и key_public_key могут быть объединены для полного указания требуемого шифрования ключей данных.

ВХОДНЫЕ ДАННЫЕ ДЛЯ РАСШИФРОВКИ: key_keyowner и key_method могут быть объединены с key_public_key, чтобы определить, знает ли инструмент расшифровки соответствующий закрытый ключ для расшифровки данного key_block. Если инструмент расшифровки может вычислить требуемый ключ, ключи данных могут быть расшифрованы.

28.4.27. key_block

28.4.27.1. Синтаксис

key_block

28.4.27.2. Описание

ENCRYPTION INPUT: Будет ошибкой, если key_block будет найден во входном файле, если он не содержится в ранее созданном блоке begin_protected-end_protected, в этом случае он игнорируется.

ВЫХОДНЫЕ ДАННЫЕ ШИФРОВАНИЯ: Выражение pragma key_block указывает, что блок ключей начинается со следующей строки в файле. При запросе на использование цифровой подписи инструмент шифрования должен взять любой из data_method, data_public_key, data_keyname, data_decrypt_key и digest_block для формирования текстового буфера. Затем этот буфер должен быть зашифрован соответствующим ключом key_public_key, а затем зашифрованная область должна быть закодирована с использованием действующего выражения pragma encoding. Выходные данные этого кодирования должны быть сгенерированы как содержимое key_block.

Если в одном begin-end блоке встречается более одного выражения pragma key_block, все сгенерированные блоки ключей должны кодировать одни и те же данные ключа расшифровки данных. Ошибкой считается, если выражения pragma расшифровки данных меняют значение между выражениями pragma key_block одной оболочки шифрования. Несколько ключевых блоков указываются с целью предоставления альтернативных ключей расшифровки для одного оболочки расшифровки.

ВХОД ДЛЯ ДЕШИФРОВАНИЯ: key_block сначала считывается в закодированном виде, кодировка меняется на противоположную, а затем блок расшифровывается изнутри. Полученный текст затем разбирается для определения ключей, необходимых для расшифровки data_block.

28.4.28. decrypt_license

28.4.28.1. Синтаксис

decrypt_license = ( library = <string> , entry = <string> , feature = <string> , [ exit = <string> , ] [ match = <number> ] )

28.4.28.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: Выражение pragma decrypt_license обычно находится внутри begin/end пара в исходном чистом тексте. Это необходимо для того, чтобы в выходном IP, отправляемом конечному пользователю, он был зашифрован.

ВЫХОДНЫЕ ДАННЫЕ ШИФРОВАНИЯ: Лицензия decrypt_license выводится без изменений в описании вывода, за исключением шифрования и кодирования pragma, точно так же, как и другой чистый текст в паре begin/end. Обычно она выводится в блоке data_block.

ВХОДНЫЕ ДАННЫЕ ДЛЯ РАСШИФРОВКИ: Встретив выражение pragma decrypt_license в зашифрованной модели, перед обработкой расшифрованного текста приложение должно загрузить указанную библиотеку и вызвать функцию entry, передав ей указанную строку feature. Возвращаемое значение функции entry сравнивается со значением match. Если приложение имеет лицензию на расшифровку модели, возвращаемое значение должно сравниться со значением match и не должно сравниться с ним в противном случае. Если приложение не имеет лицензии на расшифровку модели, то расшифровка не выполняется, и приложение выдает сообщение об ошибке, которое включает возвращаемое значение функции entry. Если указана функция exit, то она должна быть вызвана перед выходом из расшифровывающего приложения, чтобы можно было освободить лицензию.

ПРИМЕЧАНИЕ-Этот механизм обеспечивает лишь ограниченную безопасность, поскольку конечные пользователи модели имеют общую библиотеку и могут использовать легкодоступные отладчики для отладки последовательности вызова механизма лицензирования. Затем они могут создать эквивалентную библиотеку, которая возвращает 0, но избегает проверки лицензии.

28.4.29. runtime_license

28.4.29.1. Синтаксис

runtime_license = ( library = <string> , entry = <string> , feature = <string> [ , exit = <string> ] [ , match = <number> ] )

28.4.29.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: Выражение runtime_license pragma обычно находится внутри begin/end пара в исходном чистом тексте. Это необходимо для того, чтобы в выходном IP, отправляемом конечному пользователю, он был зашифрован.

ВЫХОДНЫЕ ДАННЫЕ ШИФРОВАНИЯ: Лицензия runtime_license выводится без изменений в описании вывода, за исключением шифрования и кодирования pragma точно так же, как и другого чистого текста в паре begin/end.

ВХОД ДЛЯ РАСШИФРОВКИ: Встретив выражение runtime_license pragma в зашифрованной модели, перед выполнением приложение должно загрузить указанную библиотеку и вызвать функцию входа, передав ей указанную строку. Возвращаемое значение функции входа сравнивается со значением совпадения. Если приложение имеет лицензию на выполнение модели, возвращаемое значение должно быть равно значению совпадения и не равно в противном случае. Если приложение не имеет лицензии на выполнение модели, выполнение не должно начаться, и приложение должно выдать сообщение об ошибке, включающее возвращаемое значение функции входа. Если указана функция exit, то она должна быть вызвана до выхода из выполняющегося приложения, чтобы можно было освободить лицензию.

ПРИМЕЧАНИЕ 1-Исполнение может означать любую оценку модели, включая компиляцию, элаборацию или синтез.

ПРИМЕЧАНИЕ 2 — Этот механизм обеспечивает лишь ограниченную безопасность, поскольку конечные пользователи модели имеют общую библиотеку и могут использовать легкодоступные отладчики для отладки последовательности вызова механизма лицензирования. Затем они могут создать эквивалентную библиотеку, которая возвращает 0, но избегает проверки лицензии. Авторы IP могут пожелать реализовать свою собственную схему лицензирования, встроенную в поведение модели, возможно, с использованием PLI и/или системных задач.

28.4.30. comment

28.4.30.1. Синтаксис

comment = <string>

28.4.30.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЕ: Выражение comment pragma может быть найдено в любом месте входного файла и указывает, что даже если оно находится внутри блока begin-end, значение должно быть выведено как комментарий открытым текстом в выводе непосредственно перед блоком data_block. Это предусмотрено для того, чтобы комментарии, которые могут быть включены в другие файлы внутри блока begin-end, могли защитить себя от шифрования. Это важно для того, чтобы можно было явно исключить из шифрования такую важную информацию, как уведомления об авторских правах. Поскольку это представляет собой известный чистый текст, который будет найден внутри блока data_block, сама pragma и ее значение не должны быть включены в зашифрованный текст.

ВЫХОДНЫЕ ДАННЫЕ ШИФРОВАНИЯ: Весь комментарий, включая начальную pragma, должен быть выведен в чистом тексте непосредственно перед data_block, соответствующим begin-end, в котором был найден комментарий.

ВХОДНЫЕ ДАННЫЕ ДЛЯ РАСШИФРОВКИ: нет

28.4.31. reset

28.4.31.1. Синтаксис

reset

28.4.31.2. Описание

ВХОДНЫЕ ДАННЫЕ ДЛЯ ШИФРОВАНИЯ: Выражение reset pragma является синонимом директивы reset pragma, которая содержит protect в списке ключевых слов pragma. После сброса все ключевые слова pragma protect восстанавливают свои значения по умолчанию.

Поскольку область действия определений pragma является лексической и простирается от точки директивы до конца ввода компиляции, если автор IP решит поместить общие pragma, такие как author и author_info, в начало списка файлов, ему следует включить pragma reset в конец списка файлов, чтобы гарантировать, что эта информация не будет непреднамеренно видна в других файлах.

ВЫХОД ДАНЫЕ ШИФРОВАНИЯ: нет ВХОД

ВХОДНЫЕ ДАННЫЕ РАСШИФРОВАНИЯ: нет

28.4.32. viewport

28.4.32.1. Синтаксис

viewport = ( object = <string> , access = <string> )

28.4.32.2. Описание

Выражение viewport pragma описывает объекты в текущей зашифрованной оболочке, доступ к которым должен быть разрешен инструментом Verilog. Указанное имя объекта должно содержаться в текущей оболочке. Значение доступа — это определенное реализацией ослабление шифрования.