Skip to main content

scrollcase-consumer

scrollcase-consumer is the typed Python API for verifying, preparing, and running a caller-supplied local Scrollcase box:

python -m pip install scrollcase-consumer
from scrollcase_consumer import run_box

result = run_box(
    "release.json",
    public_key_path="trusted-key.json",
    archive="box.zip",
    args=("--input", "sample.json"),
)

The public operations are verify_and_extract_box, attach_extracted_box, verify_extracted_payload, run_extracted_box, and run_box. Verification always precedes execution, and the child application runs with the box's own interpreter through an argument array, never a shell.

Every operation that verifies a signed release takes exactly one trust source: public_key_path, or trusted_keys for keys the caller already holds. parse_trusted_keys(source) turns either the single-key JSON shape or a {"keys": [...]} bundle from text or bytes into the latter, without requiring a temporary key file. Malformed trust JSON or entries raise Invalid trusted ed25519 key file.; an empty bundle or an unusable PEM cannot verify a signature and reaches the common no-valid-signature error.

Every verification, attachment, payload-check, and run result carries environment_report. Release-declared values override inherited host and caller values; no inherited variable is filtered. Host values are masked by default. Pass env_report=True to include every name and env_report_values=True only when revealing host values in logs is intentional. The report is a local diagnostic snapshot, not a signed guarantee of the box. Release and caller values are never masked, so do not log a report containing caller-supplied secrets.

A receipt is bound to the process that produced it, so an application that installs a box once and runs it across restarts calls attach_extracted_box on each later launch: it re-identifies the extracted directory against the signed release without the archive and without re-reading original payload file contents. It still enumerates paths, measures metadata, requires the native target, and verifies on-demand assets. The returned receipt says status == "attached"; a freshly extracted receipt says "prepared".

verify_extracted_payload is the separate, opt-in check that the installed bytes are still the ones the release describes. It verifies the signed payload-digest.v1 list before parsing it, then hashes only the files and links that list names. Extra application output and on-demand assets are ignored; embedded assets are listed and may make the check read tens of gigabytes. Modes and timestamps are not part of the commitment.

The result is point-in-time integrity, not protection against later changes or a live local attacker. The build collector excludes __pycache__ directories and *.pyc files, so the digest never makes an assertion about compiled Python caches. Protect an installation with operating-system permissions and the embedding application's ownership policy.

This package does not select channels, download boxes or on-demand assets, update installations, publish, promote, revoke, or manage application lifecycle. The caller supplies local release, archive, trust-key, destination, and asset paths.

The repository's src/contract/schema/ directory is the format authority. Run python scripts/sync_schemas.py after an intentional schema change and python scripts/sync_schemas.py --check in verification; the bundled files are generated copies, not a second Python contract.

Repository verification:

python -m unittest discover -s tests -t .
mypy src
python scripts/sync_schemas.py --check
python -m build
python scripts/check_distribution.py dist/*

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

scrollcase_consumer-0.4.1.tar.gz (35.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

scrollcase_consumer-0.4.1-py3-none-any.whl (40.5 kB view details)

Uploaded Python 3

File details

Details for the file scrollcase_consumer-0.4.1.tar.gz.

File metadata

  • Download URL: scrollcase_consumer-0.4.1.tar.gz
  • Upload date:
  • Size: 35.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for scrollcase_consumer-0.4.1.tar.gz
Algorithm Hash digest
SHA256 93bb30b8ac761825e515aaed9bba4f3ee402e78255bac32f3af9e1055ab8c25e
MD5 a41744b799779d131c70f3235c5e381a
BLAKE2b-256 a797e8bdd15ac3a4d9a556f0a73ef91ba5a81c03d05544a9511b211b0af62e75

See more details on using hashes here.

Provenance

The following attestation bundles were made for scrollcase_consumer-0.4.1.tar.gz:

Publisher: publish-python.yml on suffro/scrollcase

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scrollcase_consumer-0.4.1-py3-none-any.whl.

File metadata

File hashes

Hashes for scrollcase_consumer-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 af64a0970ec039875eb6a357905fa950cd50af44223145e14fa079ff697b453c
MD5 60d2a9424e136cf3a11c4d0b50512425
BLAKE2b-256 3ada7b92543be2615e2dc8cec8946045e52b432a2ea32dcd18bc587215721f36

See more details on using hashes here.

Provenance

The following attestation bundles were made for scrollcase_consumer-0.4.1-py3-none-any.whl:

Publisher: publish-python.yml on suffro/scrollcase

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.5.0

2 files

This release

0.4.1 This release

2 files

0.4.0

2 files

0.3.0

2 files

0.2.1

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page