Песочница

Запуск и проверка записей решения

Выполните правило вёрстки и сохраните решение о том, можно ли оставить заголовок на странице. Затем проверьте запись, подпись издателя и повторите выполнение.

Используйте Native Lispex. Команды предназначены для Bash, в том числе Git Bash в Windows. Начните в новом каталоге и для каждого запуска задавайте новый путь результата.

Подготовьте четыре файла

Ввод [2, false] означает две строки под заголовком раздела. Сохраните правило как house-style.lspx, а ввод как heading.json. Создайте рядом два файла лимитов, приведённых ниже.

LISPEX
(let ((осталось-строк (car input))
      (заголовок-главы? (car (cdr input))))
  (if (< осталось-строк 2)
      "deny"
      (if заголовок-главы? "deny" "allow")))
JSON
[2, false]

prepare-limits.json задаёт лимиты подготовки правила.

JSON
{
  "raw_source_bytes": 4096,
  "prepare_work": 1000000,
  "logical_allocation": 1000000,
  "syntax_depth": 64
}

evaluation-limits.json задаёт лимиты вычисления одного входа и записи его результата.

JSON
{
  "canonical_input_bytes": 4096,
  "eval_work": 1000000,
  "logical_allocation": 1000000,
  "semantic_frames": 1000,
  "traversal_depth": 256,
  "output_bytes": 1000000,
  "diagnostic_bytes": 1000000,
  "transcript_bytes": 1000000,
  "transcript_events": 100,
  "result_bytes": 1000000
}
SH
lispex rule run --source house-style.lspx --input heading.json \
  --prepare-limits prepare-limits.json \
  --eval-limits evaluation-limits.json --out decision
lispex rule inspect --dir decision
lispex rule verify --dir decision
lispex rule replay --dir decision

Все четыре команды завершаются с кодом 0 и выводят JSON. В таблице показаны выбранные поля фактического вывода.

КомандаПоля вывода
rule run"decision": "allow", "category": "semantic-complete"
rule inspect"decision": "allow", "executed": false
rule verify"status": "verified", "executed": false
rule replay"status": "agreed", "fresh_instance": true

Приложение передаёт число оставшихся строк и признак заголовка главы. allow означает оставить заголовок, а deny означает перенести его на следующую страницу.

ВводРешениеПричина
[2, false]allowПод заголовком раздела помещаются две строки
[1, false]denyПод заголовком мало места
[5, true]denyГлава начинается с новой страницы

Найдите пять сохранённых файлов

rule run атомарно записывает готовый каталог decision. Храните исходник отдельно вместе с входными файлами.

ФайлСодержимое
prepared.lpxembedПодготовленное правило в установленном исполняемом формате
canonical-input.lpxvalueТочное значение запроса в установленном байтовом представлении
result.lpxembedРезультат и его связь с запросом
receipt-core.lpxreceiptПереносимая основная запись, связывающая правило, ввод, лимиты, вычислитель, подробную запись выполнения и результат
summary.jsonЧитаемая сводка этих записей

rule inspect читает сохранённые данные. rule verify проверяет точный состав файлов, идентификаторы, хеши и связи между записями. rule replay выполняет запрос в новом экземпляре вычислителя и сравнивает результат и основную запись. Неверный формат или изменение записей приводит к отказу.

Подпишите решение и аутентифицируйте издателя

В этом локальном упражнении вы создадите пару ключей и политику получателя из только что проверенного решения. Храните закрытый ключ вне каталога решения и системы контроля версий. Чтобы разделить роли издателя и получателя, пройдите рабочее пространство вёрстки. В нём получатель независимо проверяет открытый ключ и допустимое правило.

SH
lispex key generate --out-dir issuer-key

lispex rule issue --dir decision \
  --private-key issuer-key/private.pkcs8.der \
  --issuer-label "Publisher A" \
  --out issuer-envelope.json

lispex rule policy create --dir decision \
  --public-key issuer-key/public.spki.der \
  --consumer-label "Print receiver" \
  --out recipient-policy.json

lispex rule authenticate --dir decision \
  --envelope issuer-envelope.json \
  --policy recipient-policy.json

lispex decision issue --dir decision \
  --private-key issuer-key/private.pkcs8.der \
  --issuer-label "Publisher A" \
  --out heading.lpxdecision

lispex decision inspect --bundle heading.lpxdecision
lispex decision authenticate --bundle heading.lpxdecision \
  --policy recipient-policy.json
lispex decision replay --bundle heading.lpxdecision \
  --policy recipient-policy.json

Каждая команда завершается с кодом 0. В таблице перечислены созданные файлы и выбранные поля фактического вывода.

КомандаСозданный файл или вывод
key generateissuer-key/private.pkcs8.der и issuer-key/public.spki.der. "status": "generated"
rule issueissuer-envelope.json. "status": "issued"
rule policy createrecipient-policy.json. стандартный вывод пуст
rule authenticatepackage_integrity.status равно verified. signature_valid и policy_admitted равны true
decision issueheading.lpxdecision. "status": "issued"
decision inspect"decision": "allow", "executed": false
decision authenticaterequest_binding.status равно exact. signature_valid и policy_admitted равны true
decision replay"decision": "allow", "status": "agreed", "fresh_instance": true

Пакет .lpxdecision содержит семь элементов в установленном байтовом формате. К пяти сохранённым файлам добавляются манифест с перечнем и метаданными и контейнер записи, подписанной издателем. Native создаёт, изучает, аутентифицирует и повторно выполняет пакет. npm изучает и аутентифицирует его без подключения к сети.

Выберите запись для своей задачи

Аутентификация решения проверяет целостность пакета, подпись издателя, допуск политикой получателя и связь с запросом. Повторное выполнение добавляет новый результат вычисления.

Ваучер Лиспекса использует собственные подписанные подробные записи выполнения и запрос, независимо предоставленный получателем. Локальная проверка допуска сопоставляет текущее выполнение Native с требуемым решением. Приложение проверяет актуальность запроса, предотвращает повторное использование, разрешает деловое действие и выполняет его.

Использование Ваучера Лиспекса · Что делает приложение после решения