Open protocol for hardware-signed AI-assisted code (Ed25519 root of trust, software emulator + SSX360 reference device).
Project description
Matrix Scroll
Open protocol for hardware-signed AI-assisted code.
Every AI-generated change in your IDE gets cryptographically signed by an Ed25519 key sealed in a hardware root of trust. Anyone can verify the result offline with a public key and one command.
- 📜 Spec:
SPEC.md— wire format, canonical encoding, schemas. - 🛡 Agentic AI controls:
docs/AGENTIC_AI_SECURITY.mdmaps Matrix Scroll to the joint Careful Adoption of Agentic AI Services guidance. - 🔐 Algorithm: Ed25519 (RFC 8032). Keys never leave the provider.
- 🧪 Conformance vectors:
vectors/— for non-Python implementations. - 🌐 Site: https://matrixscroll.com
- 🔧 Reference device: SSX360 (NXP SE050).
pip install matrixscroll
Quickstart
import matrixscroll
# What identity is active on this machine?
print(matrixscroll.status())
# {'schema': 'matrixscroll.identity.v1', 'available': True,
# 'mode': 'emulated', 'device_id': 'MS-A3F2-9C81', ...}
# Sign anything (a release manifest, a commit envelope, a SBOM, an evidence pack)
signed = matrixscroll.sign_manifest({"release": "v1.0.0", "artifacts": [...]})
# Verify, anywhere, offline
assert matrixscroll.verify_manifest(signed)
CLI
$ matrixscroll status
{
"available": true,
"device_id": "MS-A3F2-9C81",
"mode": "emulated",
"public_key": "...",
"schema": "matrixscroll.identity.v1"
}
$ matrixscroll sign release.json > release.signed.json
$ matrixscroll verify release.signed.json
{"device_id": "MS-A3F2-9C81", "mode": "emulated", "ok": true, "signed_at": "..."}
matrixscroll verify exits 0 on a valid signature, 2 on any failure
(tampered manifest, missing signature block, wrong schema/algorithm, mismatched
device id, malformed public key, unreadable file). Pipe it from CI without
parsing the output.
How it works
your IDE / agent / CI
│
│ manifest (release, commit, evidence pack, SBOM, anything)
▼
matrixscroll.sign_manifest(...)
│
│ canonical JSON (sorted keys, ASCII-escaped, no NaN,
│ signature block excluded from input)
▼
IdentityProvider ──► Ed25519 signature
(Emulated today,
SSX360 / SE050 tomorrow)
│
▼
signed manifest ──► matrixscroll.verify_manifest(...)
(anyone, anywhere, offline)
The same Python API serves the local software emulator and the physical
SSX360 device. Switch with the MATRIXSCROLL_MODE environment variable.
Compliance levels
| Level | Provider | Backed by | Status |
|---|---|---|---|
| L1 Emulated | EmulatedProvider |
Software key, file-backed (0600) | ✅ Shipping |
| L2 Hardware | HardwareProvider |
NXP SE050 secure element (SSX360) | 🛠 Stage-0 prototype |
| L3 Attested | future | L2 + remote attestation | 🗺 Roadmap |
status() exposes the active level via the mode and available fields so
read-only dashboards can render before the hardware path is wired.
Storage and trust boundaries
- Emulated key store:
~/.matrixscroll/device.json(override withMATRIXSCROLL_HOME). - The directory is created
0700; the seed file is opened0600withO_CREAT|O_EXCLso the private seed is never momentarily world-readable and a race cannot silently clobber an existing key store. - A corrupt or truncated store fails loud (
IdentityError) rather than silently minting a fresh identity. Identity rotation is an explicit operation. - The hardware path holds nothing private on disk — the seed is sealed in the secure element.
Reference implementation, not the only one
Matrix Scroll is a protocol. This Python package is the reference. We welcome
implementations in Rust, Go, TypeScript, and embedded C — run them against
vectors/ to self-certify. See CONTRIBUTING.md.
Agentic AI guidance proof
The repo includes a machine-readable control matrix at
controls/agentic_ai_controls.json, an
example bounded-agent evidence manifest at
examples/agentic_ai_evidence_manifest.json,
and executable checks in tests/test_agentic_guidance.py. These prove each
claim maps to repo evidence and that signed agent scope changes fail verify.
License
- Code: Apache-2.0 (
LICENSE). - Specification text (
SPEC.md,vectors/): CC0 1.0 — public domain.
Security
See SECURITY.md. Report vulnerabilities privately to
security@matrixscroll.com or via a GitHub Security Advisory.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file matrixscroll-0.1.0.tar.gz.
File metadata
- Download URL: matrixscroll-0.1.0.tar.gz
- Upload date:
- Size: 29.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9707f560a3fd39ed8b357fb2878c7d856ac2ace0e8ca737600b75846f06558a4
|
|
| MD5 |
bde656c33786f37a0d11713abfac0ee8
|
|
| BLAKE2b-256 |
59a536c6b423e94500079f211489c29ec1dd2f14f07b5615e758756296fbbab0
|
Provenance
The following attestation bundles were made for matrixscroll-0.1.0.tar.gz:
Publisher:
publish.yml on SSX360/matrixscroll
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
matrixscroll-0.1.0.tar.gz -
Subject digest:
9707f560a3fd39ed8b357fb2878c7d856ac2ace0e8ca737600b75846f06558a4 - Sigstore transparency entry: 1870494869
- Sigstore integration time:
-
Permalink:
SSX360/matrixscroll@3d56006781c708677981e0aa9a727be1298f2a40 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/SSX360
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3d56006781c708677981e0aa9a727be1298f2a40 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file matrixscroll-0.1.0-py3-none-any.whl.
File metadata
- Download URL: matrixscroll-0.1.0-py3-none-any.whl
- Upload date:
- Size: 14.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
83545fc1894d502bad9c029f56e96ff42a5a819a3d9aaf42222cae2eeabef8b4
|
|
| MD5 |
8e18bb1dca5eec1b8c937e1a1909fbaa
|
|
| BLAKE2b-256 |
6fd07cfb70352db928c48962c58fe2a5a3ed599c18a452b4d9d1b050e8c5a1f1
|
Provenance
The following attestation bundles were made for matrixscroll-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on SSX360/matrixscroll
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
matrixscroll-0.1.0-py3-none-any.whl -
Subject digest:
83545fc1894d502bad9c029f56e96ff42a5a819a3d9aaf42222cae2eeabef8b4 - Sigstore transparency entry: 1870494920
- Sigstore integration time:
-
Permalink:
SSX360/matrixscroll@3d56006781c708677981e0aa9a727be1298f2a40 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/SSX360
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3d56006781c708677981e0aa9a727be1298f2a40 -
Trigger Event:
workflow_dispatch
-
Statement type: