matrixscroll 0.4.1__tar.gz → 0.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/CHANGELOG.md +33 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/PKG-INFO +46 -31
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/README.md +42 -29
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/SPEC.md +55 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/ADOPTER_KIT.md +3 -3
- matrixscroll-0.5.0/docs/CRYPTO_BACKEND.md +53 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/FIVE_MINUTES.md +2 -2
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/ROADMAP_2026-07.md +2 -2
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/SECURITY_PROPERTIES.md +11 -1
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/SOFTWARE_PRODUCTS.md +3 -3
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/WHITEPAPER.md +4 -4
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/commercial/PLATFORM_PIVOT.md +3 -3
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/commercial/SSX360_SCROLL.md +1 -1
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/hardware-provider.md +1 -1
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/quickstart-agent.md +1 -1
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/quickstart-claude-code.md +1 -1
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/quickstart-git.md +4 -4
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/quickstart-mcp.md +2 -2
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/registries-guide.md +11 -4
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/examples/ci/protected-branch.yml +3 -3
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/__init__.py +1 -1
- matrixscroll-0.5.0/matrixscroll/canonical.py +38 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/cli.py +71 -1
- matrixscroll-0.5.0/matrixscroll/constants.py +26 -0
- matrixscroll-0.5.0/matrixscroll/crypto_backend.py +176 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/gate.py +15 -2
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/git.py +2 -2
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/manifest.py +29 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/mcp.py +176 -38
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/policy.py +55 -0
- matrixscroll-0.5.0/matrixscroll/pqc.py +208 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/providers/emulated.py +15 -16
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/providers/registry.py +3 -6
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/providers/se050_transport.py +9 -10
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/providers/tpm.py +13 -17
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/rekor_publish.py +2 -2
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/pyproject.toml +11 -3
- matrixscroll-0.5.0/schemas/commit-envelope.v1.1.json +19 -0
- matrixscroll-0.5.0/schemas/pqc-signature.v1.json +37 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/tests/test_canonical.py +9 -0
- matrixscroll-0.5.0/tests/test_canonical_pqc.py +16 -0
- matrixscroll-0.5.0/tests/test_crypto_backend.py +50 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/tests/test_mcp_server.py +36 -1
- matrixscroll-0.5.0/tests/test_pqc.py +100 -0
- matrixscroll-0.4.1/matrixscroll/canonical.py +0 -18
- matrixscroll-0.4.1/matrixscroll/constants.py +0 -12
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/.gitignore +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/CONTRIBUTING.md +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/LICENSE +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/SECURITY.md +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/controls/agentic_ai_controls.json +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/ADOPTION.md +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/AGENTIC_AI_SECURITY.md +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/CI_HARD_GATE.md +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/COMMIT_TIME_VS_ARTIFACT_TIME.md +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/COMPARISON.md +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/HERO_DEMO.md +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/SE050_POC_SCOPE.md +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/SE050_USB_PROTOCOL.md +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/commercial/SCROLL_GATE_V2.md +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/delegation-attestation-rfc.md +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/rekor-guac-bridge-design.md +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/superpowers/plans/2026-06-19-ci-action-plan.md +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/superpowers/plans/2026-06-19-sdk-refactor-plan.md +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/superpowers/specs/2026-06-19-matrixscroll-git-design.md +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/yubikey-bridge.md +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/docs/yubikey-smoke.md +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/examples/agentic_ai_evidence_manifest.json +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/examples/agentic_ai_evidence_manifest.signed.json +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/examples/commit-envelope.json +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/examples/commit-envelope.signed.json +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/examples/demo/agent-commit-demo.sh +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/examples/demo/generate_signed_examples.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/examples/demo/hero-self-attestation-demo.sh +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/examples/release-manifest.json +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/examples/release-manifest.signed.json +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/examples/trusted-keys-policy.json +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/_claim.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/_core.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/_payment.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/cloud/__init__.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/cloud/client.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/errors.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/guac_export.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/hooks/post-commit +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/hooks/pre-push +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/mcp_core.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/provenance/__init__.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/provenance/actions.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/providers/__init__.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/providers/base.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/providers/hardware.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/providers/yubikey.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/py.typed +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/scroll/README.md +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/matrixscroll/scroll/__init__.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/schemas/action-envelope.v1.json +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/schemas/commit-envelope.v1.json +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/schemas/evidence-pack.v1.json +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/schemas/release-manifest.v1.json +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/tests/__init__.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/tests/fixtures/github-gpgsig-commit.txt +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/tests/test_agentic_guidance.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/tests/test_cli.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/tests/test_core.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/tests/test_gate.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/tests/test_git_envelope.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/tests/test_guac_rekor.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/tests/test_mcp_core.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/tests/test_policy.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/tests/test_provenance.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/tests/test_release_metadata.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/tests/test_se050_transport.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/tests/test_security_properties.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/tests/test_tpm_provider.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/tests/test_vectors.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/tests/test_yubikey_provider.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/vectors/README.md +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/vectors/_fixture_key.json +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/vectors/_generate.py +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/vectors/tampered_algorithm.json +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/vectors/tampered_device_id.json +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/vectors/tampered_field.json +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/vectors/tampered_nested.json +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/vectors/tampered_public_key.json +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/vectors/tampered_schema.json +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/vectors/tampered_signature.json +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/vectors/unsigned_empty_block.json +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/vectors/unsigned_no_block.json +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/vectors/valid_commit_envelope.json +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/vectors/valid_nested.json +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/vectors/valid_simple.json +0 -0
- {matrixscroll-0.4.1 → matrixscroll-0.5.0}/vectors/valid_unicode.json +0 -0
|
@@ -4,6 +4,38 @@ All notable changes to the Matrix Scroll Python SDK are documented here. The
|
|
|
4
4
|
format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and
|
|
5
5
|
this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [0.5.0] - 2026-07-02
|
|
8
|
+
|
|
9
|
+
Post-quantum overlay (v1.1 additive extension).
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- **SPEC.md §11** — optional `pqc_signatures` array (ML-DSA FIPS 204, SLH-DSA FIPS 205).
|
|
13
|
+
- **`matrixscroll.pqc`** — software-only PQC overlay; Ed25519 `signature` block unchanged.
|
|
14
|
+
- **`matrixscroll pqc-keygen`** — generate/load PQC keys under `~/.matrixscroll/pqc/`.
|
|
15
|
+
- **`MATRIXSCROLL_PQC`** env — attach overlay on sign (e.g. `ml-dsa-65`); hardware mode exempt.
|
|
16
|
+
- **Policy `require_pqc`** — `false` (default), `emulated_only`, or `true` (hardware exempt).
|
|
17
|
+
- **Optional extra `[pqc]`** — `liboqs-python` backend for ML-DSA / SLH-DSA.
|
|
18
|
+
|
|
19
|
+
### Unchanged
|
|
20
|
+
- USB/NFC/SE050 device signing remains **Ed25519-only** (no firmware change).
|
|
21
|
+
- All v1 vectors and Ed25519 verification behavior.
|
|
22
|
+
|
|
23
|
+
## [0.4.2] - 2026-06-29
|
|
24
|
+
|
|
25
|
+
Crypto backend consolidation (middle path).
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
- **`matrixscroll.crypto_backend`** — all Ed25519 sign/verify/keygen and
|
|
29
|
+
security-relevant SHA-256 hashing route through the `cryptography` package
|
|
30
|
+
(native wheels; no user Rust toolchain).
|
|
31
|
+
- **Dependency** — `cryptography>=42.0` is now required (was `>=41.0`).
|
|
32
|
+
- **Docs** — `docs/CRYPTO_BACKEND.md`, README security note, SECURITY_PROPERTIES
|
|
33
|
+
backend section.
|
|
34
|
+
|
|
35
|
+
### Removed
|
|
36
|
+
- Scattered direct `cryptography` / `hashlib` calls in providers and gate paths
|
|
37
|
+
in favor of the centralized backend module (Git SHA-1 wire hashing unchanged).
|
|
38
|
+
|
|
7
39
|
## [0.4.1] - 2026-06-29
|
|
8
40
|
|
|
9
41
|
Universal provenance SDK expansion and SSX360 Scroll Phase 1 wrapper.
|
|
@@ -173,6 +205,7 @@ Initial public release. Extracted from the SSX360 reference implementation.
|
|
|
173
205
|
- Device id format: `MS-XXXX-XXXX` (SHA-256 of the raw public key, first 8 hex
|
|
174
206
|
chars, uppercase).
|
|
175
207
|
|
|
208
|
+
[0.5.0]: https://github.com/SSX360/matrixscroll/releases/tag/v0.5.0
|
|
176
209
|
[0.2.2]: https://github.com/SSX360/matrixscroll/releases/tag/v0.2.2
|
|
177
210
|
[0.2.1]: https://github.com/SSX360/matrixscroll/releases/tag/v0.2.1
|
|
178
211
|
[0.2.0]: https://github.com/SSX360/matrixscroll/releases/tag/v0.2.0
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: matrixscroll
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary: Signed provenance for agent-assisted Git commits with offline verification;
|
|
3
|
+
Version: 0.5.0
|
|
4
|
+
Summary: Signed provenance for agent-assisted Git commits with offline Ed25519 verification; optional ML-DSA/SLH-DSA software overlay (FIPS 204/205). USB/NFC/SE050 hardware remains Ed25519.
|
|
5
5
|
Project-URL: Homepage, https://ssx360.com
|
|
6
6
|
Project-URL: Documentation, https://ssx360.com/docs
|
|
7
7
|
Project-URL: Repository, https://github.com/SSX360/matrixscroll
|
|
@@ -22,7 +22,7 @@ Project-URL: Public Roadmap, https://github.com/SSX360/matrixscroll/blob/main/do
|
|
|
22
22
|
Author-email: SSX360 <security@matrixscroll.com>
|
|
23
23
|
License-Expression: Apache-2.0
|
|
24
24
|
License-File: LICENSE
|
|
25
|
-
Keywords: ai,ed25519,matrixscroll,provenance,root-of-trust,secure-element,signing,ssx360,supply-chain
|
|
25
|
+
Keywords: ai,ed25519,fips-204,fips-205,matrixscroll,ml-dsa,post-quantum,provenance,root-of-trust,secure-element,signing,slh-dsa,ssx360,supply-chain
|
|
26
26
|
Classifier: Development Status :: 4 - Beta
|
|
27
27
|
Classifier: Intended Audience :: Developers
|
|
28
28
|
Classifier: Intended Audience :: Information Technology
|
|
@@ -38,7 +38,7 @@ Classifier: Topic :: Security :: Cryptography
|
|
|
38
38
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
39
39
|
Classifier: Typing :: Typed
|
|
40
40
|
Requires-Python: >=3.10
|
|
41
|
-
Requires-Dist: cryptography>=
|
|
41
|
+
Requires-Dist: cryptography>=43.0
|
|
42
42
|
Provides-Extra: dev
|
|
43
43
|
Requires-Dist: build>=1.0; extra == 'dev'
|
|
44
44
|
Requires-Dist: hypothesis>=6.100; extra == 'dev'
|
|
@@ -49,6 +49,8 @@ Provides-Extra: hardware
|
|
|
49
49
|
Requires-Dist: pyserial>=3.5; extra == 'hardware'
|
|
50
50
|
Provides-Extra: mcp
|
|
51
51
|
Requires-Dist: mcp<2.0.0,>=1.0.0; extra == 'mcp'
|
|
52
|
+
Provides-Extra: pqc
|
|
53
|
+
Requires-Dist: liboqs-python>=0.12.0; extra == 'pqc'
|
|
52
54
|
Provides-Extra: tpm
|
|
53
55
|
Provides-Extra: yubikey
|
|
54
56
|
Requires-Dist: python-pkcs11>=0.7; extra == 'yubikey'
|
|
@@ -60,17 +62,18 @@ Description-Content-Type: text/markdown
|
|
|
60
62
|
[](https://github.com/SSX360/matrixscroll/actions/workflows/provenance-gate.yml)
|
|
61
63
|
[](https://codecov.io/gh/SSX360/matrixscroll)
|
|
62
64
|
|
|
63
|
-
**
|
|
65
|
+
**123 tests** · Hypothesis-verified security properties · [Security properties](docs/SECURITY_PROPERTIES.md)
|
|
64
66
|
|
|
65
|
-
**Signed proof of who — or what — wrote every commit.** Matrix Scroll is
|
|
66
|
-
**
|
|
67
|
-
|
|
68
|
-
offline in CLI, browser, and CI.
|
|
69
|
-
|
|
67
|
+
**Signed proof of who — or what — wrote every AI-assisted commit.** Matrix Scroll is an
|
|
68
|
+
**open protocol for cryptographically signed, AI-assisted code provenance** — Ed25519 commit
|
|
69
|
+
envelopes for Git (and universal action envelopes for CI, IaC, and migrations),
|
|
70
|
+
verified offline in CLI, browser, and CI. Software emulated keys ship today; NXP SE050
|
|
71
|
+
secure-element signing is on the roadmap with the same verifier contract.
|
|
70
72
|
|
|
71
|
-
**Hosted control plane:** identity, billing, and
|
|
72
|
-
[ssx360.com](https://ssx360.com/).
|
|
73
|
-
[book a provenance pilot](https://ssx360.com/contact?intent=pilot)
|
|
73
|
+
**Hosted control plane:** identity, billing, audit ledger, and Scroll Gate live at
|
|
74
|
+
[ssx360.com](https://ssx360.com/). Enterprise teams evaluating protected-branch enforcement should
|
|
75
|
+
[book a provenance pilot](https://ssx360.com/contact?intent=pilot) or visit
|
|
76
|
+
[ssx360.com/enterprise](https://ssx360.com/enterprise).
|
|
74
77
|
Provisioned pilot and team accounts sign in at [ssx360.com/signup](https://ssx360.com/signup).
|
|
75
78
|
|
|
76
79
|
## Compliance evidence mapping
|
|
@@ -100,18 +103,18 @@ Agents sign commits in-loop via the **provenance-only** MCP server:
|
|
|
100
103
|
```
|
|
101
104
|
|
|
102
105
|
```bash
|
|
103
|
-
pip install "matrixscroll[mcp]==0.
|
|
106
|
+
pip install "matrixscroll[mcp]==0.5.0"
|
|
104
107
|
matrixscroll-mcp # stdio — register in Cursor / Claude Desktop / VS Code
|
|
105
108
|
```
|
|
106
109
|
|
|
107
110
|
**MCP tools (provenance verbs only):** `create_envelope`, `sign_action`, `verify_envelope`,
|
|
108
111
|
`verify_pr_range` (Scroll Gate), `publish_notes`, `status`, `audit_export`, `list_envelopes`,
|
|
109
|
-
`connect_card` (SE050 preview).
|
|
112
|
+
`connect_card` (SE050 hardware preview, roadmap).
|
|
110
113
|
|
|
111
114
|
## Also available — CLI & hooks
|
|
112
115
|
|
|
113
116
|
```bash
|
|
114
|
-
pip install "matrixscroll==0.
|
|
117
|
+
pip install "matrixscroll==0.5.0"
|
|
115
118
|
matrixscroll hook-install
|
|
116
119
|
export MATRIXSCROLL_ACTOR_TYPE=agent
|
|
117
120
|
export MATRIXSCROLL_TOOL=agent-runner
|
|
@@ -175,12 +178,12 @@ canonical UTF-8 JSON bytes (see [`SPEC.md`](SPEC.md) §4). Verifiers reject any
|
|
|
175
178
|
|
|
176
179
|
## Honest limits
|
|
177
180
|
|
|
178
|
-
- Shipping now: PyPI `matrixscroll==0.
|
|
181
|
+
- Shipping now: PyPI `matrixscroll==0.5.0`, Git post-commit hooks,
|
|
179
182
|
`matrixscroll sign-action`, `matrixscroll scroll commit` (thin wrapper),
|
|
180
183
|
`matrixscroll envelope-verify`, Scroll Gate PR verification (partial SLSA L1–2),
|
|
181
184
|
verifier, the GitHub Action, and a USB CDC host transport preview for the
|
|
182
185
|
SE050 rollout path. Emulated mode is the default evaluation path.
|
|
183
|
-
- In progress: nRF52840 + SE050 firmware validation
|
|
186
|
+
- In progress: nRF52840 + SE050 firmware validation for hardware-backed signing, external Ed25519-capable
|
|
184
187
|
hardware key backends, and transparency-log integrations.
|
|
185
188
|
- Not: IAM, sandboxing, prompt filtering, or an agent runtime.
|
|
186
189
|
|
|
@@ -190,8 +193,10 @@ canonical UTF-8 JSON bytes (see [`SPEC.md`](SPEC.md) §4). Verifiers reject any
|
|
|
190
193
|
records who or what signed the change before push.
|
|
191
194
|
- Hardware keys and build attestations remain complementary roots and downstream
|
|
192
195
|
proofs; Matrix Scroll covers commit-time provenance.
|
|
193
|
-
- The public contract stays pure Ed25519 over canonical manifest bytes
|
|
194
|
-
whether the signer is emulated today or
|
|
196
|
+
- The public contract stays pure Ed25519 over canonical manifest bytes for the
|
|
197
|
+
required `signature` block — whether the signer is emulated today or
|
|
198
|
+
hardware-backed later. Software signers may optionally attach ML-DSA/SLH-DSA
|
|
199
|
+
overlays (FIPS 204/205) via `matrixscroll[pqc]` without changing hardware firmware.
|
|
195
200
|
|
|
196
201
|
## Common questions
|
|
197
202
|
|
|
@@ -221,7 +226,7 @@ alongside your existing scanners, branch protection, and build attestations.
|
|
|
221
226
|
## Quickstart (CLI)
|
|
222
227
|
|
|
223
228
|
```bash
|
|
224
|
-
pip install "matrixscroll==0.
|
|
229
|
+
pip install "matrixscroll==0.5.0"
|
|
225
230
|
matrixscroll hook-install
|
|
226
231
|
matrixscroll hook-status
|
|
227
232
|
|
|
@@ -248,7 +253,7 @@ See [`docs/quickstart-git.md`](docs/quickstart-git.md) and run
|
|
|
248
253
|
head-ref: ${{ github.event.pull_request.head.sha }}
|
|
249
254
|
base-ref: ${{ github.event.pull_request.base.sha }}
|
|
250
255
|
source: notes
|
|
251
|
-
matrixscroll-version: "0.
|
|
256
|
+
matrixscroll-version: "0.5.0"
|
|
252
257
|
require-mode: emulated
|
|
253
258
|
```
|
|
254
259
|
|
|
@@ -268,7 +273,7 @@ git push origin refs/notes/matrixscroll
|
|
|
268
273
|
head-ref: ${{ github.event.pull_request.head.sha }}
|
|
269
274
|
base-ref: ${{ github.event.pull_request.base.sha }}
|
|
270
275
|
source: notes
|
|
271
|
-
matrixscroll-version: "0.
|
|
276
|
+
matrixscroll-version: "0.5.0"
|
|
272
277
|
summary-output: provenance-summary.json
|
|
273
278
|
```
|
|
274
279
|
|
|
@@ -276,7 +281,15 @@ See [`docs/quickstart-git.md`](docs/quickstart-git.md) and
|
|
|
276
281
|
[`examples/ci/protected-branch.yml`](examples/ci/protected-branch.yml).
|
|
277
282
|
|
|
278
283
|
The `--require-mode`, `--trusted-keys`, and actor or delegation policy checks
|
|
279
|
-
|
|
284
|
+
ship in the current release line; examples in this README pin `0.5.0`.
|
|
285
|
+
|
|
286
|
+
## Security: Ed25519 via cryptography
|
|
287
|
+
|
|
288
|
+
Ed25519 signing, verification, and key generation use the [`cryptography`](https://pypi.org/project/cryptography/)
|
|
289
|
+
package (required dependency, `>=42.0`). Official wheels ship native crypto
|
|
290
|
+
backends (OpenSSL + Rust components) — no Rust toolchain for users. All
|
|
291
|
+
primitives are centralized in `matrixscroll/crypto_backend.py`; see
|
|
292
|
+
[`docs/CRYPTO_BACKEND.md`](docs/CRYPTO_BACKEND.md).
|
|
280
293
|
|
|
281
294
|
## Why it is different from Sigstore
|
|
282
295
|
|
|
@@ -291,21 +304,23 @@ when they preserve the same pure Ed25519 byte contract.
|
|
|
291
304
|
|
|
292
305
|
## Public proof links
|
|
293
306
|
|
|
294
|
-
- Browser verifier: <https://
|
|
295
|
-
- Compare page: <https://
|
|
307
|
+
- Browser verifier: <https://ssx360.com/verify>
|
|
308
|
+
- Compare page: <https://ssx360.com/compare>
|
|
309
|
+
- Documentation: <https://ssx360.com/docs>
|
|
296
310
|
- Specification: [`SPEC.md`](SPEC.md)
|
|
297
311
|
- Commit envelope schema: [`schemas/commit-envelope.v1.json`](schemas/commit-envelope.v1.json)
|
|
298
312
|
- Whitepaper: [`docs/WHITEPAPER.md`](docs/WHITEPAPER.md)
|
|
299
313
|
- Conformance vectors: [`vectors/`](vectors/)
|
|
300
314
|
- GitHub Action: <https://github.com/SSX360/matrixscroll-verify-action>
|
|
301
315
|
- Agentic AI controls: [`docs/AGENTIC_AI_SECURITY.md`](docs/AGENTIC_AI_SECURITY.md)
|
|
302
|
-
- Site: <https://matrixscroll.com>
|
|
303
|
-
-
|
|
316
|
+
- Site: <https://matrixscroll.com> · Enterprise: <https://ssx360.com/enterprise>
|
|
317
|
+
- [AP2 Vault Card hardware](https://ssx360.com/hardware)
|
|
318
|
+
- SE050 hardware signing: <https://ssx360.com/enterprise#roadmap>
|
|
304
319
|
|
|
305
320
|
## Python API
|
|
306
321
|
|
|
307
322
|
```bash
|
|
308
|
-
pip install "matrixscroll==0.
|
|
323
|
+
pip install "matrixscroll==0.5.0"
|
|
309
324
|
```
|
|
310
325
|
|
|
311
326
|
```python
|
|
@@ -415,7 +430,7 @@ The MCP server exposes **provenance verbs only**: `create_envelope`, `verify_env
|
|
|
415
430
|
Install and register in Cursor / Claude Desktop / VS Code:
|
|
416
431
|
|
|
417
432
|
```bash
|
|
418
|
-
pip install "matrixscroll[mcp]==0.
|
|
433
|
+
pip install "matrixscroll[mcp]==0.5.0"
|
|
419
434
|
matrixscroll-mcp # stdio
|
|
420
435
|
```
|
|
421
436
|
|
|
@@ -435,5 +450,5 @@ Report vulnerabilities privately to
|
|
|
435
450
|
|
|
436
451
|
---
|
|
437
452
|
|
|
438
|
-
**Protocol:** https://
|
|
453
|
+
**Protocol:** https://ssx360.com/docs · **Verify:** https://ssx360.com/verify
|
|
439
454
|
**Control plane:** https://ssx360.com · **Pilot:** mission@ssx360.com · **Sign in:** https://ssx360.com/signup
|
|
@@ -4,17 +4,18 @@
|
|
|
4
4
|
[](https://github.com/SSX360/matrixscroll/actions/workflows/provenance-gate.yml)
|
|
5
5
|
[](https://codecov.io/gh/SSX360/matrixscroll)
|
|
6
6
|
|
|
7
|
-
**
|
|
8
|
-
|
|
9
|
-
**Signed proof of who — or what — wrote every commit.** Matrix Scroll is
|
|
10
|
-
**
|
|
11
|
-
|
|
12
|
-
offline in CLI, browser, and CI.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
**Hosted control plane:** identity, billing, and
|
|
16
|
-
[ssx360.com](https://ssx360.com/).
|
|
17
|
-
[book a provenance pilot](https://ssx360.com/contact?intent=pilot)
|
|
7
|
+
**123 tests** · Hypothesis-verified security properties · [Security properties](docs/SECURITY_PROPERTIES.md)
|
|
8
|
+
|
|
9
|
+
**Signed proof of who — or what — wrote every AI-assisted commit.** Matrix Scroll is an
|
|
10
|
+
**open protocol for cryptographically signed, AI-assisted code provenance** — Ed25519 commit
|
|
11
|
+
envelopes for Git (and universal action envelopes for CI, IaC, and migrations),
|
|
12
|
+
verified offline in CLI, browser, and CI. Software emulated keys ship today; NXP SE050
|
|
13
|
+
secure-element signing is on the roadmap with the same verifier contract.
|
|
14
|
+
|
|
15
|
+
**Hosted control plane:** identity, billing, audit ledger, and Scroll Gate live at
|
|
16
|
+
[ssx360.com](https://ssx360.com/). Enterprise teams evaluating protected-branch enforcement should
|
|
17
|
+
[book a provenance pilot](https://ssx360.com/contact?intent=pilot) or visit
|
|
18
|
+
[ssx360.com/enterprise](https://ssx360.com/enterprise).
|
|
18
19
|
Provisioned pilot and team accounts sign in at [ssx360.com/signup](https://ssx360.com/signup).
|
|
19
20
|
|
|
20
21
|
## Compliance evidence mapping
|
|
@@ -44,18 +45,18 @@ Agents sign commits in-loop via the **provenance-only** MCP server:
|
|
|
44
45
|
```
|
|
45
46
|
|
|
46
47
|
```bash
|
|
47
|
-
pip install "matrixscroll[mcp]==0.
|
|
48
|
+
pip install "matrixscroll[mcp]==0.5.0"
|
|
48
49
|
matrixscroll-mcp # stdio — register in Cursor / Claude Desktop / VS Code
|
|
49
50
|
```
|
|
50
51
|
|
|
51
52
|
**MCP tools (provenance verbs only):** `create_envelope`, `sign_action`, `verify_envelope`,
|
|
52
53
|
`verify_pr_range` (Scroll Gate), `publish_notes`, `status`, `audit_export`, `list_envelopes`,
|
|
53
|
-
`connect_card` (SE050 preview).
|
|
54
|
+
`connect_card` (SE050 hardware preview, roadmap).
|
|
54
55
|
|
|
55
56
|
## Also available — CLI & hooks
|
|
56
57
|
|
|
57
58
|
```bash
|
|
58
|
-
pip install "matrixscroll==0.
|
|
59
|
+
pip install "matrixscroll==0.5.0"
|
|
59
60
|
matrixscroll hook-install
|
|
60
61
|
export MATRIXSCROLL_ACTOR_TYPE=agent
|
|
61
62
|
export MATRIXSCROLL_TOOL=agent-runner
|
|
@@ -119,12 +120,12 @@ canonical UTF-8 JSON bytes (see [`SPEC.md`](SPEC.md) §4). Verifiers reject any
|
|
|
119
120
|
|
|
120
121
|
## Honest limits
|
|
121
122
|
|
|
122
|
-
- Shipping now: PyPI `matrixscroll==0.
|
|
123
|
+
- Shipping now: PyPI `matrixscroll==0.5.0`, Git post-commit hooks,
|
|
123
124
|
`matrixscroll sign-action`, `matrixscroll scroll commit` (thin wrapper),
|
|
124
125
|
`matrixscroll envelope-verify`, Scroll Gate PR verification (partial SLSA L1–2),
|
|
125
126
|
verifier, the GitHub Action, and a USB CDC host transport preview for the
|
|
126
127
|
SE050 rollout path. Emulated mode is the default evaluation path.
|
|
127
|
-
- In progress: nRF52840 + SE050 firmware validation
|
|
128
|
+
- In progress: nRF52840 + SE050 firmware validation for hardware-backed signing, external Ed25519-capable
|
|
128
129
|
hardware key backends, and transparency-log integrations.
|
|
129
130
|
- Not: IAM, sandboxing, prompt filtering, or an agent runtime.
|
|
130
131
|
|
|
@@ -134,8 +135,10 @@ canonical UTF-8 JSON bytes (see [`SPEC.md`](SPEC.md) §4). Verifiers reject any
|
|
|
134
135
|
records who or what signed the change before push.
|
|
135
136
|
- Hardware keys and build attestations remain complementary roots and downstream
|
|
136
137
|
proofs; Matrix Scroll covers commit-time provenance.
|
|
137
|
-
- The public contract stays pure Ed25519 over canonical manifest bytes
|
|
138
|
-
whether the signer is emulated today or
|
|
138
|
+
- The public contract stays pure Ed25519 over canonical manifest bytes for the
|
|
139
|
+
required `signature` block — whether the signer is emulated today or
|
|
140
|
+
hardware-backed later. Software signers may optionally attach ML-DSA/SLH-DSA
|
|
141
|
+
overlays (FIPS 204/205) via `matrixscroll[pqc]` without changing hardware firmware.
|
|
139
142
|
|
|
140
143
|
## Common questions
|
|
141
144
|
|
|
@@ -165,7 +168,7 @@ alongside your existing scanners, branch protection, and build attestations.
|
|
|
165
168
|
## Quickstart (CLI)
|
|
166
169
|
|
|
167
170
|
```bash
|
|
168
|
-
pip install "matrixscroll==0.
|
|
171
|
+
pip install "matrixscroll==0.5.0"
|
|
169
172
|
matrixscroll hook-install
|
|
170
173
|
matrixscroll hook-status
|
|
171
174
|
|
|
@@ -192,7 +195,7 @@ See [`docs/quickstart-git.md`](docs/quickstart-git.md) and run
|
|
|
192
195
|
head-ref: ${{ github.event.pull_request.head.sha }}
|
|
193
196
|
base-ref: ${{ github.event.pull_request.base.sha }}
|
|
194
197
|
source: notes
|
|
195
|
-
matrixscroll-version: "0.
|
|
198
|
+
matrixscroll-version: "0.5.0"
|
|
196
199
|
require-mode: emulated
|
|
197
200
|
```
|
|
198
201
|
|
|
@@ -212,7 +215,7 @@ git push origin refs/notes/matrixscroll
|
|
|
212
215
|
head-ref: ${{ github.event.pull_request.head.sha }}
|
|
213
216
|
base-ref: ${{ github.event.pull_request.base.sha }}
|
|
214
217
|
source: notes
|
|
215
|
-
matrixscroll-version: "0.
|
|
218
|
+
matrixscroll-version: "0.5.0"
|
|
216
219
|
summary-output: provenance-summary.json
|
|
217
220
|
```
|
|
218
221
|
|
|
@@ -220,7 +223,15 @@ See [`docs/quickstart-git.md`](docs/quickstart-git.md) and
|
|
|
220
223
|
[`examples/ci/protected-branch.yml`](examples/ci/protected-branch.yml).
|
|
221
224
|
|
|
222
225
|
The `--require-mode`, `--trusted-keys`, and actor or delegation policy checks
|
|
223
|
-
|
|
226
|
+
ship in the current release line; examples in this README pin `0.5.0`.
|
|
227
|
+
|
|
228
|
+
## Security: Ed25519 via cryptography
|
|
229
|
+
|
|
230
|
+
Ed25519 signing, verification, and key generation use the [`cryptography`](https://pypi.org/project/cryptography/)
|
|
231
|
+
package (required dependency, `>=42.0`). Official wheels ship native crypto
|
|
232
|
+
backends (OpenSSL + Rust components) — no Rust toolchain for users. All
|
|
233
|
+
primitives are centralized in `matrixscroll/crypto_backend.py`; see
|
|
234
|
+
[`docs/CRYPTO_BACKEND.md`](docs/CRYPTO_BACKEND.md).
|
|
224
235
|
|
|
225
236
|
## Why it is different from Sigstore
|
|
226
237
|
|
|
@@ -235,21 +246,23 @@ when they preserve the same pure Ed25519 byte contract.
|
|
|
235
246
|
|
|
236
247
|
## Public proof links
|
|
237
248
|
|
|
238
|
-
- Browser verifier: <https://
|
|
239
|
-
- Compare page: <https://
|
|
249
|
+
- Browser verifier: <https://ssx360.com/verify>
|
|
250
|
+
- Compare page: <https://ssx360.com/compare>
|
|
251
|
+
- Documentation: <https://ssx360.com/docs>
|
|
240
252
|
- Specification: [`SPEC.md`](SPEC.md)
|
|
241
253
|
- Commit envelope schema: [`schemas/commit-envelope.v1.json`](schemas/commit-envelope.v1.json)
|
|
242
254
|
- Whitepaper: [`docs/WHITEPAPER.md`](docs/WHITEPAPER.md)
|
|
243
255
|
- Conformance vectors: [`vectors/`](vectors/)
|
|
244
256
|
- GitHub Action: <https://github.com/SSX360/matrixscroll-verify-action>
|
|
245
257
|
- Agentic AI controls: [`docs/AGENTIC_AI_SECURITY.md`](docs/AGENTIC_AI_SECURITY.md)
|
|
246
|
-
- Site: <https://matrixscroll.com>
|
|
247
|
-
-
|
|
258
|
+
- Site: <https://matrixscroll.com> · Enterprise: <https://ssx360.com/enterprise>
|
|
259
|
+
- [AP2 Vault Card hardware](https://ssx360.com/hardware)
|
|
260
|
+
- SE050 hardware signing: <https://ssx360.com/enterprise#roadmap>
|
|
248
261
|
|
|
249
262
|
## Python API
|
|
250
263
|
|
|
251
264
|
```bash
|
|
252
|
-
pip install "matrixscroll==0.
|
|
265
|
+
pip install "matrixscroll==0.5.0"
|
|
253
266
|
```
|
|
254
267
|
|
|
255
268
|
```python
|
|
@@ -359,7 +372,7 @@ The MCP server exposes **provenance verbs only**: `create_envelope`, `verify_env
|
|
|
359
372
|
Install and register in Cursor / Claude Desktop / VS Code:
|
|
360
373
|
|
|
361
374
|
```bash
|
|
362
|
-
pip install "matrixscroll[mcp]==0.
|
|
375
|
+
pip install "matrixscroll[mcp]==0.5.0"
|
|
363
376
|
matrixscroll-mcp # stdio
|
|
364
377
|
```
|
|
365
378
|
|
|
@@ -379,5 +392,5 @@ Report vulnerabilities privately to
|
|
|
379
392
|
|
|
380
393
|
---
|
|
381
394
|
|
|
382
|
-
**Protocol:** https://
|
|
395
|
+
**Protocol:** https://ssx360.com/docs · **Verify:** https://ssx360.com/verify
|
|
383
396
|
**Control plane:** https://ssx360.com · **Pilot:** mission@ssx360.com · **Sign in:** https://ssx360.com/signup
|
|
@@ -196,3 +196,58 @@ Signed release metadata (version, tag, artifact list). JSON Schema:
|
|
|
196
196
|
|
|
197
197
|
Signed audit or agent-scope evidence. JSON Schema:
|
|
198
198
|
[`schemas/evidence-pack.v1.json`](schemas/evidence-pack.v1.json).
|
|
199
|
+
|
|
200
|
+
## 11. Post-quantum overlay (v1.1 extension)
|
|
201
|
+
|
|
202
|
+
Matrix Scroll v1 **requires** an Ed25519 `signature` block (§5). USB, NFC, and SE050
|
|
203
|
+
hardware signers produce **only** this block today and remain unchanged.
|
|
204
|
+
|
|
205
|
+
Software signers MAY attach an optional `pqc_signatures` array for FIPS 204 (ML-DSA)
|
|
206
|
+
and FIPS 205 (SLH-DSA) post-quantum overlays. This is an **additive** extension;
|
|
207
|
+
verifiers that do not implement PQC MUST still verify Ed25519 and MAY ignore
|
|
208
|
+
`pqc_signatures`.
|
|
209
|
+
|
|
210
|
+
### 11.1 PQC signature block
|
|
211
|
+
|
|
212
|
+
Each element of `pqc_signatures`:
|
|
213
|
+
|
|
214
|
+
```json
|
|
215
|
+
{
|
|
216
|
+
"schema": "matrixscroll.pqc_signature.v1",
|
|
217
|
+
"algorithm": "ml-dsa-65",
|
|
218
|
+
"public_key": "<base64(raw public key bytes)>",
|
|
219
|
+
"value": "<base64(detached signature)>",
|
|
220
|
+
"signed_at": "<RFC 3339 UTC, informational>"
|
|
221
|
+
}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
Allowed `algorithm` values: `ml-dsa-44`, `ml-dsa-65`, `ml-dsa-87`,
|
|
225
|
+
`slh-dsa-sha2-128s`, `slh-dsa-sha2-128f`.
|
|
226
|
+
|
|
227
|
+
Hardware envelopes (`signature.mode` = `"hardware"`) MUST NOT include
|
|
228
|
+
`pqc_signatures` until secure-element firmware supports PQC. Policy engines
|
|
229
|
+
MUST exempt hardware mode from `require_pqc` rules.
|
|
230
|
+
|
|
231
|
+
### 11.2 Canonical input for PQC (§4.1)
|
|
232
|
+
|
|
233
|
+
PQC signing and verification remove **both** top-level keys `"signature"` and
|
|
234
|
+
`"pqc_signatures"` before applying §4 encoding rules. Because Ed25519 is applied
|
|
235
|
+
first, the PQC signing input is byte-identical to the Ed25519 signing input.
|
|
236
|
+
|
|
237
|
+
### 11.3 Verification
|
|
238
|
+
|
|
239
|
+
1. Verify Ed25519 per §6 (always required).
|
|
240
|
+
2. If `pqc_signatures` is absent, stop (valid for v1-only policy).
|
|
241
|
+
3. For each PQC block: validate `schema`, decode keys, verify against PQC canonical bytes.
|
|
242
|
+
4. If policy requires PQC and verification fails or array is missing (non-hardware), reject.
|
|
243
|
+
|
|
244
|
+
### 11.4 Policy knobs
|
|
245
|
+
|
|
246
|
+
| `require_pqc` | Behavior |
|
|
247
|
+
| ------------- | -------- |
|
|
248
|
+
| `false` (default) | PQC optional |
|
|
249
|
+
| `emulated_only` | Require valid PQC when `signature.mode` is `emulated` or `tpm` |
|
|
250
|
+
| `true` | Require valid PQC for all modes except `hardware` |
|
|
251
|
+
|
|
252
|
+
JSON Schema: [`schemas/pqc-signature.v1.json`](schemas/pqc-signature.v1.json),
|
|
253
|
+
[`schemas/commit-envelope.v1.1.json`](schemas/commit-envelope.v1.1.json).
|
|
@@ -11,7 +11,7 @@ who want to trial Matrix Scroll without changing their core workflow.
|
|
|
11
11
|
|
|
12
12
|
## 15-minute pilot
|
|
13
13
|
|
|
14
|
-
1. Install `matrixscroll==0.
|
|
14
|
+
1. Install `matrixscroll==0.4.1` in one repo.
|
|
15
15
|
2. Run `matrixscroll hook-install`.
|
|
16
16
|
3. Make one agent-assisted commit and verify it locally.
|
|
17
17
|
4. Publish notes with `matrixscroll envelope-publish-notes`.
|
|
@@ -38,7 +38,7 @@ jobs:
|
|
|
38
38
|
head-ref: ${{ github.event.pull_request.head.sha }}
|
|
39
39
|
base-ref: ${{ github.event.pull_request.base.sha }}
|
|
40
40
|
source: notes
|
|
41
|
-
matrixscroll-version: "0.
|
|
41
|
+
matrixscroll-version: "0.4.1"
|
|
42
42
|
require-mode: emulated
|
|
43
43
|
```
|
|
44
44
|
|
|
@@ -64,7 +64,7 @@ jobs:
|
|
|
64
64
|
## Clean-machine proof status
|
|
65
65
|
|
|
66
66
|
Recorded on `2026-06-21` against the pinned public flow:
|
|
67
|
-
`pip install "matrixscroll==0.
|
|
67
|
+
`pip install "matrixscroll==0.4.1"` -> `matrixscroll hook-install` ->
|
|
68
68
|
`matrixscroll hook-status` -> first agent-assisted commit ->
|
|
69
69
|
`matrixscroll envelope-verify`.
|
|
70
70
|
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Cryptographic backend (middle path)
|
|
2
|
+
|
|
3
|
+
Matrix Scroll v0.5.0+ routes all Ed25519 and security-relevant SHA-256
|
|
4
|
+
operations through a single Python module: `matrixscroll/crypto_backend.py`.
|
|
5
|
+
|
|
6
|
+
Post-quantum overlays (ML-DSA FIPS 204, SLH-DSA FIPS 205) are optional and
|
|
7
|
+
implemented via `matrixscroll/pqc.py` when `matrixscroll[pqc]` (liboqs-python)
|
|
8
|
+
is installed. **USB/NFC/SE050 hardware signers remain Ed25519-only.**
|
|
9
|
+
|
|
10
|
+
## Design
|
|
11
|
+
|
|
12
|
+
| Approach | What users install | Crypto implementation |
|
|
13
|
+
| -------- | ------------------ | --------------------- |
|
|
14
|
+
| **Full Rust rewrite** | Python SDK + Rust extension build chain | Custom PyO3/maturin crate |
|
|
15
|
+
| **Middle path (this release)** | `pip install matrixscroll` only | `cryptography` wheels (OpenSSL + Rust components) |
|
|
16
|
+
| **Pure Python fallback** | No native deps | Not used — removed from the reference SDK |
|
|
17
|
+
|
|
18
|
+
The middle path keeps the public Python API, CLI, and MCP surface unchanged while
|
|
19
|
+
moving primitive work onto battle-tested native code shipped inside official
|
|
20
|
+
`cryptography` wheels. Users never run `cargo` or `maturin`.
|
|
21
|
+
|
|
22
|
+
## Primitives
|
|
23
|
+
|
|
24
|
+
| Operation | Module API | Underlying primitive |
|
|
25
|
+
| --------- | ---------- | -------------------- |
|
|
26
|
+
| Ed25519 key generation | `generate_ed25519_private_key()` | `cryptography.hazmat.primitives.asymmetric.ed25519` |
|
|
27
|
+
| Ed25519 sign / verify | `ed25519_sign`, `ed25519_verify` | Same |
|
|
28
|
+
| SHA-256 (device IDs, gate digests, Rekor bridge) | `sha256`, `sha256_hex` | `cryptography.hazmat.primitives.hashes.SHA256` |
|
|
29
|
+
| ML-DSA / SLH-DSA overlay (optional) | `pqc_sign`, `pqc_verify` | `liboqs-python` via `matrixscroll[pqc]` extra |
|
|
30
|
+
|
|
31
|
+
Git object hashing (`hashlib.sha1` in `matrixscroll/git.py`) stays on the
|
|
32
|
+
stdlib because it implements Git wire-format identifiers, not provenance
|
|
33
|
+
signatures.
|
|
34
|
+
|
|
35
|
+
## Optional provider paths
|
|
36
|
+
|
|
37
|
+
- **Emulated / TPM mock / SE050 mock** — software Ed25519 via this backend.
|
|
38
|
+
- **SE050 hardware** — signing occurs on the secure element; the host verifies
|
|
39
|
+
responses with the same backend where needed.
|
|
40
|
+
- **YubiKey PIV preview** — experimental ECDSA path; not part of the v1 Ed25519
|
|
41
|
+
contract and not routed through Ed25519 helpers here.
|
|
42
|
+
|
|
43
|
+
## Dependency pin
|
|
44
|
+
|
|
45
|
+
`pyproject.toml` requires `cryptography>=42.0` as a mandatory (non-optional)
|
|
46
|
+
dependency.
|
|
47
|
+
|
|
48
|
+
## Diagnostics
|
|
49
|
+
|
|
50
|
+
```python
|
|
51
|
+
from matrixscroll.crypto_backend import backend_info
|
|
52
|
+
print(backend_info())
|
|
53
|
+
```
|
|
@@ -12,7 +12,7 @@ five-minute path from `pip install` to a verifiable commit envelope.
|
|
|
12
12
|
## 1. Install the SDK
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
|
-
pip install "matrixscroll==0.
|
|
15
|
+
pip install "matrixscroll==0.4.1"
|
|
16
16
|
matrixscroll hook-install
|
|
17
17
|
matrixscroll hook-status
|
|
18
18
|
```
|
|
@@ -61,7 +61,7 @@ git push origin refs/notes/matrixscroll
|
|
|
61
61
|
head-ref: ${{ github.event.pull_request.head.sha }}
|
|
62
62
|
base-ref: ${{ github.event.pull_request.base.sha }}
|
|
63
63
|
source: notes
|
|
64
|
-
matrixscroll-version: "0.
|
|
64
|
+
matrixscroll-version: "0.4.1"
|
|
65
65
|
require-mode: emulated
|
|
66
66
|
```
|
|
67
67
|
|
|
@@ -8,13 +8,13 @@ what ships now before widening the story.
|
|
|
8
8
|
## Baseline on June 21, 2026
|
|
9
9
|
|
|
10
10
|
- GitHub: early public repo, product-first docs, and offline verification
|
|
11
|
-
- Current public release
|
|
11
|
+
- Current public release: `matrixscroll==0.5.0`
|
|
12
12
|
- Public trust contract: pure Ed25519 over canonical manifest bytes
|
|
13
13
|
- Hardware path: SSX360 SE050 reference implementation in progress
|
|
14
14
|
|
|
15
15
|
## Next 7 days
|
|
16
16
|
|
|
17
|
-
-
|
|
17
|
+
- Public release: `matrixscroll==0.5.0` (universal provenance + scroll commit)
|
|
18
18
|
- make the GitHub Action a real public proof surface
|
|
19
19
|
- align site, README, action docs, and PyPI around one install flow
|
|
20
20
|
- remove broken links and stale release drift from public copy
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Matrix Scroll security properties
|
|
2
2
|
|
|
3
|
-
Machine-checkable guarantees for the reference SDK (v0.
|
|
3
|
+
Machine-checkable guarantees for the reference SDK (v0.5.0). Properties marked
|
|
4
4
|
**verified** have Hypothesis property tests in `tests/test_security_properties.py`.
|
|
5
5
|
Formal TLA+ models are on the public roadmap.
|
|
6
6
|
|
|
@@ -13,6 +13,16 @@ Formal TLA+ models are on the public roadmap.
|
|
|
13
13
|
| **P5** | Offline verification | Envelope verification requires no network, hosted API, or hardware ping once the envelope and trusted key set are local. | **Verified** (unit) |
|
|
14
14
|
| **P6** | Algorithm binding | Only Ed25519 (RFC 8032) signatures with `algorithm: "ed25519"` are accepted; other algorithms are rejected. | **Verified** (unit + vectors) |
|
|
15
15
|
|
|
16
|
+
## Cryptographic backend
|
|
17
|
+
|
|
18
|
+
All Ed25519 and security-relevant SHA-256 operations in the reference SDK route
|
|
19
|
+
through `matrixscroll/crypto_backend.py`, backed by the [`cryptography`](https://pypi.org/project/cryptography/)
|
|
20
|
+
package (official wheels bundle OpenSSL and Rust components; users install with
|
|
21
|
+
`pip install matrixscroll` only). There is no pure-Python Ed25519 fallback.
|
|
22
|
+
|
|
23
|
+
See [`CRYPTO_BACKEND.md`](CRYPTO_BACKEND.md) for the middle-path design vs a full
|
|
24
|
+
Rust rewrite.
|
|
25
|
+
|
|
16
26
|
## Standards alignment
|
|
17
27
|
|
|
18
28
|
- **Ed25519:** [RFC 8032](https://www.rfc-editor.org/rfc/rfc8032) — 32-byte seed, 32-byte public key, 64-byte signature.
|
|
@@ -5,7 +5,7 @@ manifest bytes today.
|
|
|
5
5
|
|
|
6
6
|
| Product | Status | Access | Notes |
|
|
7
7
|
|---------|--------|--------|-------|
|
|
8
|
-
| **Matrix Scroll SDK** | GA | PyPI `matrixscroll==0.
|
|
8
|
+
| **Matrix Scroll SDK** | GA | PyPI `matrixscroll==0.4.1` | Hooks, envelopes, Scroll Gate, policy CLI |
|
|
9
9
|
| **Scroll Gate CI** | GA | [`matrixscroll-verify-action@v1`](https://github.com/SSX360/matrixscroll-verify-action) | PR range + manifest verify |
|
|
10
10
|
| **Browser verifier** | GA | [matrixscroll.com/verify](https://matrixscroll.com/verify/) | Offline paste-and-verify |
|
|
11
11
|
| **Protocol docs** | GA | [matrixscroll.com/docs](https://matrixscroll.com/docs/) | SPEC mirror, whitepaper, quickstarts |
|
|
@@ -18,7 +18,7 @@ manifest bytes today.
|
|
|
18
18
|
## Developer install
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
|
-
pip install "matrixscroll==0.
|
|
21
|
+
pip install "matrixscroll==0.4.1"
|
|
22
22
|
matrixscroll hook-install
|
|
23
23
|
export MATRIXSCROLL_ACTOR_TYPE=agent
|
|
24
24
|
export MATRIXSCROLL_TOOL=agent-runner
|
|
@@ -34,7 +34,7 @@ matrixscroll envelope-verify "$(git rev-parse HEAD)"
|
|
|
34
34
|
head-ref: ${{ github.event.pull_request.head.sha }}
|
|
35
35
|
base-ref: ${{ github.event.pull_request.base.sha }}
|
|
36
36
|
source: notes
|
|
37
|
-
matrixscroll-version: "0.
|
|
37
|
+
matrixscroll-version: "0.4.1"
|
|
38
38
|
summary-output: provenance-summary.json
|
|
39
39
|
```
|
|
40
40
|
|