Песочница

Практическое рабочее пространство решений

Проведите фиксированный пример возврата через ограниченный обмен решением, аутентификацию получателя, Vouch с изображением Lispex и локальный gate текущего запроса.

Выберите фиксированное рабочее пространство

Возьмите практическое рабочее пространство со страницы загрузок или используйте examples/refund-workspace в репозитории Lispex. Архив и каталог репозитория имеют один фиксированный состав. Все ключи и создаваемые материалы держите вне этого неизменяемого каталога.

В рабочем пространстве находятся два разных правила возврата.

КонтурИсходникФорма входаРезультат
Обмен решениемgenerated/exchange/refund-window.lspxобычные записи JSONallow или deny
Vouchgenerated/vouch/refund-window-native.lspx.pngзначения проверяемого входаapprove или deny

Результат обмена не является свидетельством Vouch. Результат Vouch не является результатом обмена. Контуры используют один деловой пример, но не делят идентичность, квитанцию, политику или полномочия.

Проверьте рабочее пространство до начала работы

Перейдите в корень распакованного пространства или в каталог репозитория. Создайте отдельный рабочий корень под управлением вызывающей стороны и попросите Native проверить фиксированный состав.

SH
mkdir -p ../refund-work
lispex workspace status --dir . --work-dir ../refund-work

workspace status проверяет точных участников пространства до отчёта о рабочих слотах. Состояние present-unchecked означает только наличие. Оно не означает проверку, доверие, свежесть или разрешение.

Выполните ограниченный обмен решением

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

SH
mkdir -p ../refund-work/exchange
lispex rule run \
  --source ./generated/exchange/refund-window.lspx \
  --input ./generated/exchange/inputs/day-14-unopened.json \
  --prepare-limits ./generated/exchange/prepare-limits.json \
  --eval-limits ./generated/exchange/evaluation-limits.json \
  --out ../refund-work/exchange/decision

lispex rule inspect --dir ../refund-work/exchange/decision
lispex rule verify --dir ../refund-work/exchange/decision
lispex rule replay --dir ../refund-work/exchange/decision

Inspect и verify не выполняют правило. Replay создаёт один новый экземпляр встроенного вычислителя и требует тот же результат. Переносимый результат сохраняет значение vouch_eligible false.

Подготовьте локального издателя и независимого получателя

Создайте закрытый ключ в каталоге вызывающей стороны вне рабочего пространства и рабочего корня.

SH
mkdir -p ../refund-issuer ../refund-recipient
lispex key generate --out-dir ../refund-issuer/key
lispex key inspect --public-key ../refund-issuer/key/public.spki.der

Для упражнения на одной машине скопируйте только проверенный открытый SPKI в каталог получателя и снова проверьте скопированные байты.

SH
cp ../refund-issuer/key/public.spki.der \
  ../refund-recipient/reviewed-issuer.spki.der
lispex key inspect \
  --public-key ../refund-recipient/reviewed-issuer.spki.der

Настоящим издателю и получателю нужен отдельно выбранный канал передачи и проверки. Локальная копия помогает пройти пример, но не является процедурой доверия. Не помещайте private.pkcs8.der в рабочее пространство, рабочий корень, каталог получателя, систему контроля версий или bundle.

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

SH
lispex decision policy create \
  --public-key ../refund-recipient/reviewed-issuer.spki.der \
  --semantic-rule-sha256 14bb6f2e43cee011aedbeafc71d3716789bea8117e8331cd6a7feb1858d7418f \
  --semantic-profile-id lispex/r7rs-rule-embedded-core/1 \
  --engine-artifact-sha256 fa6e52559e1f5a43e50a3b7ac0cc5add6930cff0aed8aaff462cff4609362870 \
  --portable-core-schema lispex.embed-receipt-core/v1 \
  --consumer-label refund-recipient \
  --out ../refund-recipient/decision-policy.json

lispex decision policy check \
  --policy ../refund-recipient/decision-policy.json

Создание политики записывает конфигурацию. Оно не аутентифицирует организацию издателя и не даёт полномочий повторного использования или внешнего действия.

Выдайте и аутентифицируйте переносимое решение

Издатель подписывает уже проверенное переносимое ядро и пишет один ограниченный файл .lpxdecision.

SH
lispex decision issue \
  --dir ../refund-work/exchange/decision \
  --private-key ../refund-issuer/key/private.pkcs8.der \
  --issuer-label refund-issuer \
  --out ../refund-work/exchange/refund.lpxdecision

Получатель использует свою политику и явно называет полученный bundle.

SH
lispex decision inspect \
  --bundle ../refund-work/exchange/refund.lpxdecision
lispex decision authenticate \
  --bundle ../refund-work/exchange/refund.lpxdecision \
  --policy ../refund-recipient/decision-policy.json
lispex decision replay \
  --bundle ../refund-work/exchange/refund.lpxdecision \
  --policy ../refund-recipient/decision-policy.json

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

Файлы в samples/recipient навсегда помечены sample-do-not-trust. Они подходят только для тренировки команд и не могут стать настоящей политикой получателя или корнем доверия.

Начните отдельный путь Vouch с изображением Lispex

Этот путь снова начинается с проверяемого входа и точного изображения Lispex. Он не использует результат обмена, каталог решения, политику решения или bundle .lpxdecision.

Сначала проверьте четыре входа идентичности Vouch.

SH
mkdir -p ../refund-work/vouch
lispex vouch source-id \
  --source-image ./generated/vouch/refund-window-native.lspx.png
lispex vouch input-id \
  --input ./generated/vouch/inputs/day-14-unopened.checked.json
lispex vouch key-id \
  --public-key ../refund-recipient/reviewed-issuer.spki.der
lispex vouch engine-id \
  --executable /absolute/path/to/lispex

Проверьте точный вывод движка, затем используйте полное напечатанное значение как ENGINE_ID. Политика Vouch отделена от политики решения, даже если обе ссылаются на один проверенный открытый ключ.

SH
ENGINE_ID="sha256:<reviewed-native-engine-digest>"
lispex vouch policy create \
  --public-key ../refund-recipient/reviewed-issuer.spki.der \
  --engine-sha256 "$ENGINE_ID" \
  --source-image ./generated/vouch/refund-window-native.lspx.png \
  --out ../refund-work/vouch/policy.json
lispex vouch policy check \
  --trust-policy ../refund-work/vouch/policy.json

Выдайте сохранённый учебный вход из точного изображения.

SH
ISSUER_KEY_URI="pkcs8-file:///absolute/path/outside-workspace/refund-issuer/key/private.pkcs8.der"
lispex vouch issue \
  --source-image ./generated/vouch/refund-window-native.lspx.png \
  --input ./generated/vouch/inputs/day-14-unopened.checked.json \
  --profile csk.checked-profile/v1 \
  --key-handle "$ISSUER_KEY_URI" \
  --out-dir ../refund-work/vouch/issued \
  --emit-bundle

Сохранённый проверяемый вход содержит только [14, false]. Выданный для него bundle служит только пошаговому примеру. Его нельзя повторно использовать в передаче приложению, потому что он не связывает ID запроса, исполнителя, действие и срок.

Выдайте отдельный bundle для шести значений запроса

Создайте файл вызывающей стороны с этими точными каноническими байтами и одним конечным переводом строки.

JSON
{
  "input": "csk.checked-input/v1",
  "value": [
    14,
    false,
    "request-123",
    "operator-7",
    "refund",
    1785600000
  ]
}

Сохраните его как ../refund-work/app/current-request.checked.json. Выдайте новый bundle, который связывает все шесть значений.

SH
mkdir -p ../refund-work/app
lispex vouch issue \
  --source-image ./generated/vouch/refund-window-native.lspx.png \
  --input ../refund-work/app/current-request.checked.json \
  --profile csk.checked-profile/v1 \
  --key-handle "$ISSUER_KEY_URI" \
  --out-dir ../refund-work/app/current-request-issued \
  --emit-bundle

Правило возврата читает первые два значения. Идентичность входа Vouch и подписанный контекст всё равно связывают все шесть точных значений. Дополнительная связь не доказывает аутентификацию исполнителя или уникальность запроса. Эти факты устанавливает окружающее приложение из собственного доверенного состояния.

Запустите новый gate для точного текущего запроса

Получатель независимо предоставляет отдельный bundle, свою политику, точное изображение и тот же вход из шести значений. Gate создаёт новое локальное наблюдение выполнения и требует approve.

SH
lispex vouch gate \
  --bundle ../refund-work/app/current-request-issued/vouch-input-bundle.json \
  --trust-policy ../refund-work/vouch/policy.json \
  --source-image ./generated/vouch/refund-window-native.lspx.png \
  --input ../refund-work/app/current-request.checked.json \
  --profile csk.checked-profile/v1 \
  --require-decision approve \
  --report-out ../refund-work/app/current-request-gate.json

Сохранённый отчёт проверки или gate является диагностическим выводом. Он не заменяет новый gate для другого запроса и не может стать входным свидетельством следующего gate.

Остановитесь на границе полномочий

Gate с кодом выхода 0 устанавливает одно локальное совпадение между живым аутентифицированным текущим выполнением и требуемым решением. Он не аутентифицирует вызывающего пользователя приложения, не разрешает исполнителя или действие, не проверяет серверное время, не резервирует ID запроса, не выполняет возврат и не делает внешнюю транзакцию однократной.

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

Передача приложению · Использование Lispex Vouch · Изображения Лиспекса