Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
* @chrismaz11
/apps/api/src/ @chrismaz11
/circuits/ @chrismaz11
/packages/core/ @chrismaz11
37 changes: 20 additions & 17 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,18 @@ on:
branches:
- master

permissions:
contents: read

jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Setup Node.js
uses: actions/setup-node@v6
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: '20'
cache: npm
Expand All @@ -31,10 +34,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Setup Node.js
uses: actions/setup-node@v6
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: '20'
cache: npm
Expand All @@ -54,10 +57,10 @@ jobs:
POLYGON_RPC_URL: ${{ secrets.POLYGON_RPC_URL }}
steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Setup Node.js
uses: actions/setup-node@v6
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: '20'
cache: npm
Expand All @@ -72,10 +75,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Setup Node.js
uses: actions/setup-node@v6
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: '20'
cache: npm
Expand Down Expand Up @@ -106,10 +109,10 @@ jobs:
DATABASE_URL: postgresql://postgres@127.0.0.1:5432/trustsignal_signed_receipt_smoke?sslmode=disable
steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Setup Node.js
uses: actions/setup-node@v6
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: '20'
cache: npm
Expand All @@ -127,10 +130,10 @@ jobs:
working-directory: circuits/non_mem_gadget
steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
uses: dtolnay/rust-toolchain@631a55b12751854ce901bb631d5902ceb48146f7 # stable

- name: Build Halo2 verifier
run: cargo build --release
Expand All @@ -142,7 +145,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Install gitleaks
run: |
Expand All @@ -158,10 +161,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Setup Node.js
uses: actions/setup-node@v6
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: '20'
cache: npm
Expand All @@ -178,10 +181,10 @@ jobs:
contents: read
steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Setup Node.js
uses: actions/setup-node@v6
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: 22

Expand Down
7 changes: 5 additions & 2 deletions .github/workflows/copilotsetupsteps.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
name: "Copilot Setup Steps"
on: workflow_dispatch

permissions:
contents: read

jobs:
copilot-setup:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: '24'
cache: 'npm'
Expand Down
26 changes: 26 additions & 0 deletions .github/workflows/dependency-review.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: Dependency diff review

on:
pull_request:
branches:
- master
- work
Comment on lines +5 to +7
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Run dependency review on main-targeted pull requests

This trigger only matches PRs into master/work, so PRs targeting main will never execute the blocking dependency diff check. Given the repository’s branch-protection guidance and required-check setup are defined for main, this leaves the intended high/critical dependency gate inactive on the branch where merges are expected; include main (or remove the branch filter) so the control actually enforces there.

Useful? React with 👍 / 👎.


# Restrict to the minimum permissions needed for checkout and dependency review.
permissions:
contents: read

jobs:
dependency-review:
name: Dependency diff review
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false

- name: Dependency diff review
uses: actions/dependency-review-action@da24556b548a50705dd671f47852072ea4c105d9 # v4.7.1
with:
fail-on-severity: high
5 changes: 4 additions & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ on:
push:
branches: ["master"]

permissions:
contents: read

jobs:
verify-artifact:
runs-on: ubuntu-latest
Expand All @@ -13,7 +16,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Build release artifact
run: |
Expand Down
46 changes: 46 additions & 0 deletions .github/workflows/trivy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: Trivy repository scan

on:
push:
branches:
- master
- work
pull_request:
branches:
- master
Comment on lines +6 to +10
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Enable Trivy scan for pushes and PRs on main

The Trivy workflow is scoped to master/work, so it will not run for activity on main; that means no filesystem scan and no SARIF refresh for the primary protected branch described in the repo docs. Add main to both push and pull_request branch filters (or broaden the trigger) to avoid silently losing security coverage on the branch used for compliance checks.

Useful? React with 👍 / 👎.

- work

# Restrict to minimum required permissions.
# security-events: write is required only for SARIF upload to code scanning.
permissions:
contents: read
security-events: write
Comment on lines +15 to +17
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Restrict Trivy write permission to SARIF upload context

security-events: write is declared at workflow scope, so the third-party aquasecurity/trivy-action step runs with that write-capable token too. This expands blast radius unnecessarily and contradicts the stated least-privilege intent in the workflow comments; scope security-events: write only to the SARIF upload job/step so scanner execution keeps read-only permissions.

Useful? React with 👍 / 👎.


jobs:
trivy:
name: Trivy filesystem scan
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false

- name: Run Trivy filesystem scan
uses: aquasecurity/trivy-action@6e7b7d1fd3e4fef0c5fa8cce1229c54b2c9bd0d8 # v0.30.0
Comment on lines +15 to +30
with:
scan-type: fs
scan-ref: "."
severity: HIGH,CRITICAL
ignore-unfixed: true
format: sarif
output: trivy-results.sarif

- name: Upload Trivy SARIF to code scanning
# Skip on forked PRs — GitHub does not grant security-events: write to
# untrusted fork tokens, so SARIF upload would fail with a permissions error.
if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository }}
uses: github/codeql-action/upload-sarif@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18
with:
sarif_file: trivy-results.sarif
category: trivy
34 changes: 34 additions & 0 deletions .github/workflows/zizmor.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: zizmor advisory audit

on:
pull_request:
paths:
- ".github/workflows/**"

# Restrict to minimum required permissions.
permissions:
contents: read

jobs:
zizmor:
name: zizmor workflow audit
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false

- name: Install zizmor
run: pip install zizmor==1.5.0

- name: Run zizmor workflow audit
# Advisory mode — findings are reported but do not fail the job.
# Maintainers should review and address findings before merging workflow changes.
run: |
EXIT_CODE=0
zizmor --format plain .github/workflows/ || EXIT_CODE=$?
if [ $EXIT_CODE -ne 0 ]; then
echo "::warning::zizmor found workflow security findings (advisory). Review the output above before merging."
fi
exit 0
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ packages/core/registry/registry.private.jwk
.vercel
circuits/non_mem_gadget/target/
ml/.venv/
**/__pycache__/
**/*.py[cod]
ml/zkml/deed_cnn.pk
tmp/

Expand Down
44 changes: 22 additions & 22 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Those risks matter in audit, compliance, partner-review, and trust-sensitive wor

## Verification Lifecycle

The canonical lifecycle diagram and trust-boundary view are documented in [docs/verification-lifecycle.md](/Users/christopher/Projects/trustsignal/docs/verification-lifecycle.md).
The canonical lifecycle diagram and trust-boundary view are documented in [docs/verification-lifecycle.md](docs/verification-lifecycle.md).

TrustSignal accepts a verification request, returns verification signals, issues a signed verification receipt, and supports later verification against stored receipt state so downstream teams can detect artifact tampering, evidence provenance loss, or stale records during audit review.

Expand Down Expand Up @@ -47,17 +47,17 @@ It shows the full lifecycle in one run:
4. later verification
5. tampered artifact mismatch detection

See [demo/README.md](/Users/christopher/Projects/trustsignal/demo/README.md).
See [demo/README.md](demo/README.md).

## Integration Model

Start here if you are evaluating the public verification lifecycle:

- [Evaluator quickstart](/Users/christopher/Projects/trustsignal/docs/partner-eval/quickstart.md)
- [API playground](/Users/christopher/Projects/trustsignal/docs/partner-eval/api-playground.md)
- [OpenAPI contract](/Users/christopher/Projects/trustsignal/openapi.yaml)
- [Postman collection](/Users/christopher/Projects/trustsignal/postman/TrustSignal.postman_collection.json)
- [Postman local environment](/Users/christopher/Projects/trustsignal/postman/TrustSignal.local.postman_environment.json)
- [Evaluator quickstart](docs/partner-eval/quickstart.md)
- [API playground](docs/partner-eval/api-playground.md)
- [OpenAPI contract](openapi.yaml)
- [Postman collection](postman/TrustSignal.postman_collection.json)
- [Postman local environment](postman/TrustSignal.local.postman_environment.json)

Golden path:

Expand Down Expand Up @@ -191,12 +191,12 @@ Fail-closed defaults are part of the security posture. They are meant to prevent

The public evaluation artifacts in this repo are:

- [openapi.yaml](/Users/christopher/Projects/trustsignal/openapi.yaml)
- [verification-request.json](/Users/christopher/Projects/trustsignal/examples/verification-request.json)
- [verification-response.json](/Users/christopher/Projects/trustsignal/examples/verification-response.json)
- [verification-receipt.json](/Users/christopher/Projects/trustsignal/examples/verification-receipt.json)
- [verification-status.json](/Users/christopher/Projects/trustsignal/examples/verification-status.json)
- [partner evaluation kit](/Users/christopher/Projects/trustsignal/docs/partner-eval/overview.md)
- [openapi.yaml](openapi.yaml)
- [verification-request.json](examples/verification-request.json)
- [verification-response.json](examples/verification-response.json)
- [verification-receipt.json](examples/verification-receipt.json)
- [verification-status.json](examples/verification-status.json)
- [partner evaluation kit](docs/partner-eval/overview.md)

These artifacts document the public verification lifecycle only. They intentionally avoid proof internals, model outputs, circuit identifiers, signing infrastructure specifics, and internal service topology.

Expand All @@ -211,7 +211,7 @@ Public-facing security properties for this repository are:
- explicit lifecycle boundaries for read, revoke, and provenance-state operations
- fail-closed defaults where production trust assumptions are not satisfied

See [docs/security-summary.md](/Users/christopher/Projects/trustsignal/docs/security-summary.md), [SECURITY_CHECKLIST.md](/Users/christopher/Projects/trustsignal/SECURITY_CHECKLIST.md), and [docs/SECURITY.md](/Users/christopher/Projects/trustsignal/docs/SECURITY.md) for the current public-safe security summary and repository guardrails.
See [docs/security-summary.md](docs/security-summary.md), [SECURITY_CHECKLIST.md](SECURITY_CHECKLIST.md), and [docs/SECURITY.md](docs/SECURITY.md) for the current public-safe security summary and repository guardrails.

## What TrustSignal Does Not Claim

Expand All @@ -225,7 +225,7 @@ TrustSignal does not provide:

## Current Repository Context

DeedShield is the current application surface in this repository. The broader product framing remains TrustSignal as evidence integrity infrastructure and an integrity layer for existing workflows.
TrustSignal is the canonical product and application surface in this repository. The current wedge remains property-record verification, with the platform framed as evidence integrity infrastructure for existing workflows.

## Newbie Difficulty Rating

Expand Down Expand Up @@ -261,10 +261,10 @@ npm run build

## Documentation Map

- [docs/partner-eval/overview.md](/Users/christopher/Projects/trustsignal/docs/partner-eval/overview.md)
- [docs/partner-eval/quickstart.md](/Users/christopher/Projects/trustsignal/docs/partner-eval/quickstart.md)
- [docs/partner-eval/api-playground.md](/Users/christopher/Projects/trustsignal/docs/partner-eval/api-playground.md)
- [wiki/What-is-TrustSignal.md](/Users/christopher/Projects/trustsignal/wiki/What-is-TrustSignal.md)
- [wiki/API-Overview.md](/Users/christopher/Projects/trustsignal/wiki/API-Overview.md)
- [wiki/Claims-Boundary.md](/Users/christopher/Projects/trustsignal/wiki/Claims-Boundary.md)
- [wiki/Verification-Receipts.md](/Users/christopher/Projects/trustsignal/wiki/Verification-Receipts.md)
- [docs/partner-eval/overview.md](docs/partner-eval/overview.md)
- [docs/partner-eval/quickstart.md](docs/partner-eval/quickstart.md)
- [docs/partner-eval/api-playground.md](docs/partner-eval/api-playground.md)
- [wiki/What-is-TrustSignal.md](wiki/What-is-TrustSignal.md)
- [wiki/API-Overview.md](wiki/API-Overview.md)
- [wiki/Claims-Boundary.md](wiki/Claims-Boundary.md)
- [wiki/Verification-Receipts.md](wiki/Verification-Receipts.md)
6 changes: 3 additions & 3 deletions SECURITY_CHECKLIST.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Deed Shield — Security & Production Readiness Checklist
# TrustSignal — Security & Production Readiness Checklist

> This document tracks the security posture of the Deed Shield API.
> This document tracks the security posture of the TrustSignal API.
> Each item is either ✅ (verified in-repo), 🔒 (enforced by code), or 📋 (requires infra/ops verification).

---
Expand Down Expand Up @@ -45,7 +45,7 @@

| # | Requirement | Status | Evidence |
| --- | ------------------------------------------ | ------ | -------------------------------------------------------- |
| 4.1 | Keccak-256 for document hashing | ✅ | `keccak256Buffer` from `@deed-shield/core`. |
| 4.1 | Keccak-256 for document hashing | ✅ | `keccak256Buffer` from `@trustsignal/core`. |
| 4.2 | Receipt hash verification | ✅ | `POST /receipt/:id/verify` recomputes hash. |
| 4.3 | JWT receipts have expiration | ✅ | Enforced in core receipt builder. |
| 4.4 | Private keys never in code or config files | ✅ | Only via `PRIVATE_KEY` env var, never imported directly. |
Expand Down
Loading
Loading