ciris-server 0.1.2__tar.gz → 0.2.1__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.
- ciris_server-0.2.1/.cargo/config.toml +14 -0
- ciris_server-0.2.1/.github/workflows/bench.yml +67 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/.github/workflows/ci.yml +22 -2
- {ciris_server-0.1.2 → ciris_server-0.2.1}/.github/workflows/publish-pypi.yml +80 -1
- {ciris_server-0.1.2 → ciris_server-0.2.1}/CHANGELOG.md +49 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/Cargo.lock +46 -1
- {ciris_server-0.1.2 → ciris_server-0.2.1}/Cargo.toml +34 -10
- {ciris_server-0.1.2 → ciris_server-0.2.1}/FSD/LENS_TO_SERVER_MIGRATION.md +8 -1
- {ciris_server-0.1.2 → ciris_server-0.2.1}/PKG-INFO +1 -1
- ciris_server-0.2.1/benches/replication_ingest.rs +181 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/pyproject.toml +1 -1
- ciris_server-0.2.1/scripts/bench_report.py +234 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/src/compose.rs +74 -20
- ciris_server-0.2.1/src/import.rs +266 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/src/lib.rs +7 -0
- ciris_server-0.2.1/src/main.rs +26 -0
- ciris_server-0.1.2/src/main.rs +0 -14
- {ciris_server-0.1.2 → ciris_server-0.2.1}/.github/workflows/conformance.yml +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/.github/workflows/release.yml +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/.gitignore +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/FSD/PQC_AV_STREAMING_BENCH.md +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/FSD/REGISTRY_FOLD_DERISK.md +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/FSD/SERVER_1.0_PLAN.md +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/LICENSE +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/MISSION.md +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/README.md +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/benches/pqc_av_streaming.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/.github/workflows/bench.yml +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/.github/workflows/ci.yml +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/.gitignore +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/.pre-commit-config.yaml +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/Cargo.toml +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/FSD/CIRIS_LENS_CORE.md +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/FSD/LENS_CORE_V0_5.md +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/FSD/OPEN_QUESTIONS.md +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/LICENSE +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/MISSION.md +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/README.md +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/benches/aggregate.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/benches/canonicalize.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/benches/project.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/deny.toml +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/docs/BENCHMARKS.md +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/docs/COHABITATION.md +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/docs/PRE_COMMIT.md +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/docs/PUBLIC_SCHEMA_CONTRACT.md +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/docs/PYPI_PUBLISH.md +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/docs/RELEASE_NOTES.md +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/docs/STANDARDS_COMPARISON.md +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/docs/THREAT_MODEL.md +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/json_path.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/metadata.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/patterns_from_cirislens_core/extraction/mod.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/distilbert_loader.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/fields.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/mod.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/ner.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/ort_loader.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/proptests.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/regex.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/walker.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/patterns_from_cirislens_core/scrubber/xlm_r_loader.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/pyproject.toml +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/python/ciris_lens_core/__init__.py +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/audit/api.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/audit/delegate.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/audit/mod.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/audit/pyo3.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/canonical/ceg_egress.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/canonical/mod.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/capacity/attestation.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/capacity/mod.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/capacity/score.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/capture/batch.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/capture/client.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/capture/consent.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/capture/correlation.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/capture/event.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/capture/mod.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/capture/partial.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/capture/py_engine.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/capture/seal.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/cohort/declared.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/cohort/mod.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/cohort/resourcing.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/config/egress.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/config/mod.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/config/node.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/config/retention.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/config/upstream.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/detector/axis_metrics.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/detector/coherence_ratchet.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/detector/correlated_action.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/detector/distributive_access.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/detector/manifold.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/detector/mod.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/extract/mod.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/extract/projection.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/ffi/mod.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/ffi/pyo3.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/lib.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/observability/mod.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/pipeline/lifecycle.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/pipeline/mod.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/retention/eviction.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/retention/mod.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/retention/summary.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/role/handler.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/role/mod.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/role/node.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/role/relay.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/role/ret_relay.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/scores/aggregate.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/scores/mod.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/scores/oracle.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/scoring/assembly.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/scoring/axis_calibration.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/scoring/calibration.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/scoring/capacity.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/scoring/mod.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/scoring/n_eff.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/scoring/result.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/signing/event.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/signing/mod.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/wire/mod.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/src/wire/signer.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/tests/parity/README.md +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/tests/parity/canonical_fixtures.json +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/tests/parity/generate_canonical_fixtures.py +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/crates/ciris-lens-core/tests/sovereign_rlib.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/rust-toolchain.toml +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/src/config.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/src/quorum.rs +0 -0
- {ciris_server-0.1.2 → ciris_server-0.2.1}/tests/replication.rs +0 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Android cross-link targets (NDK API 24). The 16 KiB max-page-size arg is the
|
|
2
|
+
# Android-15+ compatibility flag the substrate crates use. Mirrors
|
|
3
|
+
# CIRISVerify/.cargo/config.toml so the android wheel lane links cleanly.
|
|
4
|
+
[target.armv7-linux-androideabi]
|
|
5
|
+
linker = "armv7a-linux-androideabi24-clang"
|
|
6
|
+
rustflags = ["-C", "link-arg=-Wl,-z,max-page-size=16384"]
|
|
7
|
+
|
|
8
|
+
[target.aarch64-linux-android]
|
|
9
|
+
linker = "aarch64-linux-android24-clang"
|
|
10
|
+
rustflags = ["-C", "link-arg=-Wl,-z,max-page-size=16384"]
|
|
11
|
+
|
|
12
|
+
[target.x86_64-linux-android]
|
|
13
|
+
linker = "x86_64-linux-android24-clang"
|
|
14
|
+
rustflags = ["-C", "link-arg=-Wl,-z,max-page-size=16384"]
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
name: bench
|
|
2
|
+
|
|
3
|
+
# Run the criterion benches, turn them into an INTERPRETED page (video
|
|
4
|
+
# throughput / replication speed / post-quantum overhead — what the numbers
|
|
5
|
+
# mean, not just ns), and publish to GitHub Pages. Mirrors the substrate
|
|
6
|
+
# sisters' publish-only bench discipline (not a pass/fail gate — shared runners
|
|
7
|
+
# are too noisy), but with an interpretation layer on top (scripts/bench_report.py).
|
|
8
|
+
#
|
|
9
|
+
# Published at: https://cirisai.github.io/CIRISServer/
|
|
10
|
+
# One-time: Settings → Pages → Source = "GitHub Actions" (the configure-pages
|
|
11
|
+
# step below sets enablement: true to do this automatically on first run).
|
|
12
|
+
|
|
13
|
+
on:
|
|
14
|
+
push:
|
|
15
|
+
branches: [main]
|
|
16
|
+
paths:
|
|
17
|
+
- "benches/**"
|
|
18
|
+
- "scripts/bench_report.py"
|
|
19
|
+
- ".github/workflows/bench.yml"
|
|
20
|
+
- "Cargo.toml"
|
|
21
|
+
workflow_dispatch:
|
|
22
|
+
schedule:
|
|
23
|
+
- cron: "0 7 * * 1" # Mondays 07:00 UTC
|
|
24
|
+
|
|
25
|
+
permissions:
|
|
26
|
+
contents: read
|
|
27
|
+
pages: write
|
|
28
|
+
id-token: write
|
|
29
|
+
|
|
30
|
+
# Never cancel an in-flight Pages deploy; let bench runs serialize.
|
|
31
|
+
concurrency:
|
|
32
|
+
group: bench-pages
|
|
33
|
+
cancel-in-progress: false
|
|
34
|
+
|
|
35
|
+
jobs:
|
|
36
|
+
bench-and-publish:
|
|
37
|
+
runs-on: ubuntu-latest
|
|
38
|
+
environment:
|
|
39
|
+
name: github-pages
|
|
40
|
+
url: ${{ steps.deploy.outputs.page_url }}
|
|
41
|
+
steps:
|
|
42
|
+
- uses: actions/checkout@v4
|
|
43
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
44
|
+
- name: Install build deps
|
|
45
|
+
run: sudo apt-get update && sudo apt-get install -y libtss2-dev libsqlite3-dev
|
|
46
|
+
- uses: Swatinem/rust-cache@v2
|
|
47
|
+
continue-on-error: true
|
|
48
|
+
with:
|
|
49
|
+
cache-bin: false
|
|
50
|
+
key: bench
|
|
51
|
+
- uses: actions/setup-python@v5
|
|
52
|
+
with:
|
|
53
|
+
python-version: "3.12"
|
|
54
|
+
- name: Run benches (criterion)
|
|
55
|
+
run: cargo bench --bench pqc_av_streaming --bench replication_ingest
|
|
56
|
+
- name: Generate interpreted page
|
|
57
|
+
run: |
|
|
58
|
+
BENCH_DATE="$(date -u +%Y-%m-%d)" \
|
|
59
|
+
python3 scripts/bench_report.py --out bench-site --commit "$GITHUB_SHA"
|
|
60
|
+
- uses: actions/configure-pages@v5
|
|
61
|
+
with:
|
|
62
|
+
enablement: true
|
|
63
|
+
- uses: actions/upload-pages-artifact@v3
|
|
64
|
+
with:
|
|
65
|
+
path: bench-site
|
|
66
|
+
- id: deploy
|
|
67
|
+
uses: actions/deploy-pages@v4
|
|
@@ -33,13 +33,23 @@ jobs:
|
|
|
33
33
|
components: clippy
|
|
34
34
|
- name: Install build deps (Linux)
|
|
35
35
|
if: runner.os == 'Linux'
|
|
36
|
+
# libtss2-dev: the Linux-only keyring/tpm backend (cfg(target_os=linux)).
|
|
37
|
+
# libsqlite3-dev: persist's sqlite. macOS/Windows pull NEITHER tss-esapi
|
|
38
|
+
# nor openssl (postgres+tpm are Linux-only per Cargo.toml [target.linux]).
|
|
36
39
|
run: sudo apt-get update && sudo apt-get install -y libtss2-dev libsqlite3-dev
|
|
37
40
|
- uses: Swatinem/rust-cache@v2
|
|
38
41
|
continue-on-error: true
|
|
39
42
|
with:
|
|
40
43
|
cache-bin: false
|
|
41
|
-
|
|
42
|
-
-
|
|
44
|
+
# Default features build everywhere (sqlite + the binary path); postgres +
|
|
45
|
+
# tpm are Linux-only (per-target). NOT --all-features: that drags
|
|
46
|
+
# `extension-module` (libpython-no-link) into the test binary.
|
|
47
|
+
- run: cargo clippy --all-targets -- -D warnings
|
|
48
|
+
- run: cargo test
|
|
49
|
+
# The PyO3 wheel surface (Linux only; libpython linked, no extension-module).
|
|
50
|
+
- name: clippy (python surface, Linux)
|
|
51
|
+
if: runner.os == 'Linux'
|
|
52
|
+
run: cargo clippy --all-targets --features python -- -D warnings
|
|
43
53
|
|
|
44
54
|
# Win7-SP1 → Win11 build check (CIRISVerify#67 pattern, mirrored by every
|
|
45
55
|
# upstream substrate crate). Rust 1.78 raised the windows-msvc std floor to
|
|
@@ -65,6 +75,16 @@ jobs:
|
|
|
65
75
|
- name: Build (x86_64-win7-windows-msvc, build-std)
|
|
66
76
|
shell: bash
|
|
67
77
|
run: |
|
|
78
|
+
# LNK1181 workaround (persist's recipe): build-std relinks std, which
|
|
79
|
+
# needs the windows_x86_64_msvc import-lib dirs on LIB. openssl/tss2 are
|
|
80
|
+
# NOT pulled on this windows target (postgres+tpm are Linux-only), so no
|
|
81
|
+
# vcpkg/openssl-src build is needed here anymore.
|
|
82
|
+
cargo fetch
|
|
83
|
+
extra=""
|
|
84
|
+
while IFS= read -r d; do
|
|
85
|
+
extra="${extra};$(cygpath -w "$d")"
|
|
86
|
+
done < <(find "$HOME/.cargo/registry/src" -type d -path '*windows_x86_64_msvc-*/lib' 2>/dev/null | sort -u)
|
|
87
|
+
[ -n "$extra" ] && export LIB="${LIB:-}${extra}"
|
|
68
88
|
cargo +nightly build --release \
|
|
69
89
|
--target x86_64-win7-windows-msvc \
|
|
70
90
|
-Z build-std=std,panic_abort \
|
|
@@ -108,6 +108,85 @@ jobs:
|
|
|
108
108
|
path: dist/*.whl
|
|
109
109
|
if-no-files-found: warn
|
|
110
110
|
|
|
111
|
+
# Android abi3 wheels (incl. arm32 armeabi-v7a) — the CIRISAgent KMP client's
|
|
112
|
+
# mobile targets. NDK cross-compile + libpython stub, the substrate recipe
|
|
113
|
+
# (CIRISVerify/Persist/Edge). continue-on-error while the cross lane iterates
|
|
114
|
+
# to green — it must not block the desktop/server publish.
|
|
115
|
+
android:
|
|
116
|
+
name: wheel android-${{ matrix.abi }}
|
|
117
|
+
runs-on: ubuntu-latest
|
|
118
|
+
# Green as of 0.2.1 (arm64-v8a + armeabi-v7a both package). A required gate now.
|
|
119
|
+
strategy:
|
|
120
|
+
fail-fast: false
|
|
121
|
+
matrix:
|
|
122
|
+
include:
|
|
123
|
+
- { abi: armeabi-v7a, target: armv7-linux-androideabi, clang: armv7a-linux-androideabi24, legacy: arm-linux-androideabi, pw: 32 }
|
|
124
|
+
- { abi: arm64-v8a, target: aarch64-linux-android, clang: aarch64-linux-android24, legacy: aarch64-linux-android, pw: 64 }
|
|
125
|
+
steps:
|
|
126
|
+
- uses: actions/checkout@v4
|
|
127
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
128
|
+
with:
|
|
129
|
+
targets: ${{ matrix.target }}
|
|
130
|
+
- uses: actions/setup-python@v5
|
|
131
|
+
with:
|
|
132
|
+
python-version: "3.12"
|
|
133
|
+
- uses: nttld/setup-ndk@v1
|
|
134
|
+
id: ndk
|
|
135
|
+
with:
|
|
136
|
+
ndk-version: r26b
|
|
137
|
+
add-to-path: true
|
|
138
|
+
- name: PyO3 cross config + libpython stub
|
|
139
|
+
env:
|
|
140
|
+
ANDROID_NDK_HOME: ${{ steps.ndk.outputs.ndk-path }}
|
|
141
|
+
run: |
|
|
142
|
+
CFG="${RUNNER_TEMP}/pyo3-android.config"
|
|
143
|
+
{
|
|
144
|
+
echo "implementation=CPython"; echo "version=3.10"; echo "shared=false"
|
|
145
|
+
echo "abi3=true"; echo "lib_name=python3.10"; echo "lib_dir="
|
|
146
|
+
echo "executable="; echo "pointer_width=${{ matrix.pw }}"; echo "build_flags="
|
|
147
|
+
echo "suppress_build_script_link_lines=true"
|
|
148
|
+
} > "$CFG"
|
|
149
|
+
echo "PYO3_CONFIG_FILE=${CFG}" >> "$GITHUB_ENV"
|
|
150
|
+
STUB="${RUNNER_TEMP}/python-stub"; mkdir -p "$STUB"
|
|
151
|
+
TC="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64"
|
|
152
|
+
echo 'void __pystub(void){}' | \
|
|
153
|
+
"${TC}/bin/${{ matrix.clang }}-clang" -shared -nostdlib \
|
|
154
|
+
-Wl,-soname,libpython3.10.so -o "${STUB}/libpython3.10.so" -x c -
|
|
155
|
+
- name: Build wheel (maturin, Android NDK)
|
|
156
|
+
env:
|
|
157
|
+
ANDROID_NDK_HOME: ${{ steps.ndk.outputs.ndk-path }}
|
|
158
|
+
ANDROID_API_LEVEL: "24" # maturin can't infer the API level for armv7 (it can for arm64)
|
|
159
|
+
run: |
|
|
160
|
+
# cc-rs guesses the wrong NDK clang name (arm-linux-androideabi-clang);
|
|
161
|
+
# point CC/CXX/AR + the cargo linker at the real r26b tools (what
|
|
162
|
+
# cargo-ndk would set). Var names use the underscore/SCREAMING target.
|
|
163
|
+
TC="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin"
|
|
164
|
+
CLANG="${TC}/${{ matrix.clang }}-clang"
|
|
165
|
+
TUS="$(echo '${{ matrix.target }}' | tr - _)"
|
|
166
|
+
TSC="$(echo "$TUS" | tr a-z A-Z)"
|
|
167
|
+
export "CC_${TUS}=${CLANG}"
|
|
168
|
+
export "CXX_${TUS}=${CLANG}++"
|
|
169
|
+
export "AR_${TUS}=${TC}/llvm-ar"
|
|
170
|
+
export "RANLIB_${TUS}=${TC}/llvm-ranlib"
|
|
171
|
+
export "CARGO_TARGET_${TSC}_LINKER=${CLANG}"
|
|
172
|
+
# openssl-src (pulled by persist on android) hardcodes the LEGACY NDK
|
|
173
|
+
# tool names that r26b dropped; shim them → the r26b llvm tools.
|
|
174
|
+
export ANDROID_NDK_ROOT="${ANDROID_NDK_HOME}"
|
|
175
|
+
ln -sf "${TC}/llvm-ar" "${TC}/${{ matrix.legacy }}-ar"
|
|
176
|
+
ln -sf "${TC}/llvm-ranlib" "${TC}/${{ matrix.legacy }}-ranlib"
|
|
177
|
+
ln -sf "${CLANG}" "${TC}/${{ matrix.legacy }}-clang"
|
|
178
|
+
ln -sf "${CLANG}++" "${TC}/${{ matrix.legacy }}-clang++"
|
|
179
|
+
export PATH="${TC}:${PATH}"
|
|
180
|
+
export RUSTFLAGS="-L ${RUNNER_TEMP}/python-stub -C link-arg=-Wl,--no-as-needed -C link-arg=-lpython3.10"
|
|
181
|
+
python -m pip install --upgrade pip
|
|
182
|
+
pip install "maturin>=1.7,<2"
|
|
183
|
+
maturin build --release --out dist --target ${{ matrix.target }}
|
|
184
|
+
- uses: actions/upload-artifact@v4
|
|
185
|
+
with:
|
|
186
|
+
name: wheels-android-${{ matrix.abi }}
|
|
187
|
+
path: dist/*.whl
|
|
188
|
+
if-no-files-found: warn
|
|
189
|
+
|
|
111
190
|
sdist:
|
|
112
191
|
name: sdist
|
|
113
192
|
runs-on: ubuntu-latest
|
|
@@ -145,7 +224,7 @@ jobs:
|
|
|
145
224
|
# ── Publish to PyPI via Trusted Publishing (OIDC) ──────────────────────────
|
|
146
225
|
publish:
|
|
147
226
|
name: publish to PyPI
|
|
148
|
-
needs: [linux, macos, windows, sdist, conformance-gate]
|
|
227
|
+
needs: [linux, macos, windows, android, sdist, conformance-gate]
|
|
149
228
|
runs-on: ubuntu-latest
|
|
150
229
|
if: startsWith(github.ref, 'refs/tags/') || inputs.publish
|
|
151
230
|
environment: pypi
|
|
@@ -4,6 +4,55 @@ All notable changes to CIRISServer. Format follows [Keep a Changelog](https://ke
|
|
|
4
4
|
this project uses [Semantic Versioning](https://semver.org/). The minor line tracks
|
|
5
5
|
the fabric-node scope (0.1 lens · 0.5 +registry · 1.0 +node), paced by the CIRISAgent train.
|
|
6
6
|
|
|
7
|
+
## [0.2.1] — 2026-06-15
|
|
8
|
+
|
|
9
|
+
Android wheels (incl. arm32) now publish; legacy-trace importer.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- **`ciris-server import-traces <dump-dir>`** — imports the legacy CIRISLens
|
|
13
|
+
TimescaleDB dump into the persist corpus as CEG objects. Reconstructs flat
|
|
14
|
+
1.9.x lens rows → `CompleteTrace`/`BatchEnvelope` (reasoning columns →
|
|
15
|
+
components; original schema + signature in a provenance component); stamped
|
|
16
|
+
`2.7.legacy`; imported pre-verified; idempotent. A salvage pass repairs the
|
|
17
|
+
dump's systematic `\\"`→`\"` export mis-escaping and flags those rows
|
|
18
|
+
`_salvaged: true`. Validated on the prod dump: **all 12,165 traces →
|
|
19
|
+
20,959 trace-events, errored=0** (3,635 salvaged).
|
|
20
|
+
- **Android wheels** (armeabi-v7a + arm64-v8a) now build & publish (NDK r26b
|
|
21
|
+
cross-compile: explicit `CC`/`AR`/linker for the toolchain, legacy-NDK
|
|
22
|
+
tool-name shims for openssl-src, `ANDROID_API_LEVEL`). Promoted from
|
|
23
|
+
continue-on-error to a required publish lane.
|
|
24
|
+
|
|
25
|
+
## [0.2.0] — 2026-06-15
|
|
26
|
+
|
|
27
|
+
All-platforms-green CI, **full hybrid post-quantum federation signatures**, and a
|
|
28
|
+
published interpreted benchmark page.
|
|
29
|
+
|
|
30
|
+
### Added
|
|
31
|
+
- **Full hybrid PQC federation signature (Ed25519 + ML-DSA-65).** The node mints
|
|
32
|
+
(or **adopts**, on takeover) an `ml_dsa_65.seed` and signs every federation
|
|
33
|
+
envelope with both halves (edge `LocalSigner` classical + pqc). `/v1/identity`
|
|
34
|
+
now carries `ml_dsa_65_pubkey_b64` + `pqc_key_id`. Classical stays
|
|
35
|
+
hardware-sealed; the ML-DSA half is a software seed (no sealed-ML-DSA backend
|
|
36
|
+
exists — a TPM can't do ML-DSA).
|
|
37
|
+
- **One remaining classical path**, filed upstream: persist's storage-tier
|
|
38
|
+
scrub signature is Ed25519-only — `with_hardware_signer` is classical-only and
|
|
39
|
+
`with_signer_arcs` (hybrid) needs a plaintext key. **CIRISPersist#224** adds a
|
|
40
|
+
hybrid-hardware ctor to close it without un-sealing.
|
|
41
|
+
- **Interpreted benchmark page** → `https://cirisai.github.io/CIRISServer/`
|
|
42
|
+
(`.github/workflows/bench.yml` + `scripts/bench_report.py`): video throughput
|
|
43
|
+
(fps ceiling, sustainable mesh participants @30 fps), post-quantum handshake
|
|
44
|
+
overhead, mesh fan-out, and **replication speed** (new `replication_ingest`
|
|
45
|
+
bench, ~13K traces/s/core).
|
|
46
|
+
- Android arm32 (armeabi-v7a) + arm64 wheel lane (NDK cross-compile;
|
|
47
|
+
`continue-on-error` while it iterates to green).
|
|
48
|
+
|
|
49
|
+
### Changed / Fixed
|
|
50
|
+
- **All CI platforms green** (was red on macOS/Windows/Win7). Root cause was our
|
|
51
|
+
own feature wiring: a top-level `tpm` feature + unconditional `postgres`
|
|
52
|
+
dragged `tss-esapi`/`openssl` onto platforms that can't build them. Fixed with
|
|
53
|
+
per-target deps (`postgres` + `tpm` Linux-only; `android` keyring backend) and
|
|
54
|
+
dropping `--all-features`.
|
|
55
|
+
|
|
7
56
|
## [0.1.2] — 2026-06-15
|
|
8
57
|
|
|
9
58
|
Substrate floor bump + the `/v1/identity` endpoint the migration runbook requires.
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
# It is not intended for manual editing.
|
|
3
3
|
version = 4
|
|
4
4
|
|
|
5
|
+
[[package]]
|
|
6
|
+
name = "adler2"
|
|
7
|
+
version = "2.0.1"
|
|
8
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
9
|
+
checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
|
|
10
|
+
|
|
5
11
|
[[package]]
|
|
6
12
|
name = "aead"
|
|
7
13
|
version = "0.5.2"
|
|
@@ -982,7 +988,7 @@ dependencies = [
|
|
|
982
988
|
|
|
983
989
|
[[package]]
|
|
984
990
|
name = "ciris-server"
|
|
985
|
-
version = "0.1
|
|
991
|
+
version = "0.2.1"
|
|
986
992
|
dependencies = [
|
|
987
993
|
"anyhow",
|
|
988
994
|
"axum",
|
|
@@ -996,7 +1002,9 @@ dependencies = [
|
|
|
996
1002
|
"ciris-verify-core",
|
|
997
1003
|
"criterion",
|
|
998
1004
|
"ed25519-dalek",
|
|
1005
|
+
"flate2",
|
|
999
1006
|
"fs2",
|
|
1007
|
+
"getrandom 0.3.4",
|
|
1000
1008
|
"pyo3",
|
|
1001
1009
|
"pyo3-async-runtimes",
|
|
1002
1010
|
"serde_json",
|
|
@@ -1195,6 +1203,15 @@ dependencies = [
|
|
|
1195
1203
|
"libc",
|
|
1196
1204
|
]
|
|
1197
1205
|
|
|
1206
|
+
[[package]]
|
|
1207
|
+
name = "crc32fast"
|
|
1208
|
+
version = "1.5.0"
|
|
1209
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1210
|
+
checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511"
|
|
1211
|
+
dependencies = [
|
|
1212
|
+
"cfg-if",
|
|
1213
|
+
]
|
|
1214
|
+
|
|
1198
1215
|
[[package]]
|
|
1199
1216
|
name = "criterion"
|
|
1200
1217
|
version = "0.5.1"
|
|
@@ -1206,6 +1223,7 @@ dependencies = [
|
|
|
1206
1223
|
"ciborium",
|
|
1207
1224
|
"clap",
|
|
1208
1225
|
"criterion-plot",
|
|
1226
|
+
"futures",
|
|
1209
1227
|
"is-terminal",
|
|
1210
1228
|
"itertools 0.10.5",
|
|
1211
1229
|
"num-traits",
|
|
@@ -1218,6 +1236,7 @@ dependencies = [
|
|
|
1218
1236
|
"serde_derive",
|
|
1219
1237
|
"serde_json",
|
|
1220
1238
|
"tinytemplate",
|
|
1239
|
+
"tokio",
|
|
1221
1240
|
"walkdir",
|
|
1222
1241
|
]
|
|
1223
1242
|
|
|
@@ -1737,6 +1756,16 @@ version = "0.4.2"
|
|
|
1737
1756
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1738
1757
|
checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
|
|
1739
1758
|
|
|
1759
|
+
[[package]]
|
|
1760
|
+
name = "flate2"
|
|
1761
|
+
version = "1.1.9"
|
|
1762
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1763
|
+
checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c"
|
|
1764
|
+
dependencies = [
|
|
1765
|
+
"crc32fast",
|
|
1766
|
+
"miniz_oxide",
|
|
1767
|
+
]
|
|
1768
|
+
|
|
1740
1769
|
[[package]]
|
|
1741
1770
|
name = "float_eq"
|
|
1742
1771
|
version = "1.0.1"
|
|
@@ -3044,6 +3073,16 @@ version = "0.2.1"
|
|
|
3044
3073
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
3045
3074
|
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
|
|
3046
3075
|
|
|
3076
|
+
[[package]]
|
|
3077
|
+
name = "miniz_oxide"
|
|
3078
|
+
version = "0.8.9"
|
|
3079
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
3080
|
+
checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
|
|
3081
|
+
dependencies = [
|
|
3082
|
+
"adler2",
|
|
3083
|
+
"simd-adler32",
|
|
3084
|
+
]
|
|
3085
|
+
|
|
3047
3086
|
[[package]]
|
|
3048
3087
|
name = "mio"
|
|
3049
3088
|
version = "1.2.1"
|
|
@@ -5028,6 +5067,12 @@ dependencies = [
|
|
|
5028
5067
|
"rand_core 0.10.1",
|
|
5029
5068
|
]
|
|
5030
5069
|
|
|
5070
|
+
[[package]]
|
|
5071
|
+
name = "simd-adler32"
|
|
5072
|
+
version = "0.3.9"
|
|
5073
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
5074
|
+
checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214"
|
|
5075
|
+
|
|
5031
5076
|
[[package]]
|
|
5032
5077
|
name = "siphasher"
|
|
5033
5078
|
version = "1.0.3"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "ciris-server"
|
|
3
|
-
version = "0.1
|
|
3
|
+
version = "0.2.1" # 0.1 = lens-only (agent ~2.9.7); 0.5 = +registry (~2.9.8); 1.0 = +node (~2.9.10). Patch forward (0.1.1) on breakage.
|
|
4
4
|
edition = "2021"
|
|
5
5
|
# MSRV floor is set by the substrate: ciris-verify v5.2.0 requires 1.86
|
|
6
6
|
# (persist v6.0.1 is 1.83). Build with the higher of the two.
|
|
@@ -41,13 +41,13 @@ python = ["dep:pyo3", "dep:pyo3-async-runtimes", "ciris-lens-core/python"]
|
|
|
41
41
|
# `extension-module` is what maturin builds the wheel with (tells PyO3 not to
|
|
42
42
|
# link libpython). The bin must NOT enable it. See pyproject.toml [tool.maturin].
|
|
43
43
|
extension-module = ["python", "pyo3/extension-module"]
|
|
44
|
-
#
|
|
45
|
-
#
|
|
46
|
-
#
|
|
47
|
-
#
|
|
48
|
-
#
|
|
49
|
-
# software when absent (`is_hardware_backed()` reports the posture).
|
|
50
|
-
|
|
44
|
+
# NOTE: hardware key custody (TPM/SE/StrongBox) is wired per-TARGET below, not as
|
|
45
|
+
# a cargo feature — TPM (tss-esapi) is Linux-only, so a top-level `tpm` feature
|
|
46
|
+
# made `--all-features` drag tss-esapi onto Windows/macOS (where it can't build).
|
|
47
|
+
# The `[target.'cfg(target_os = "linux")']` table enables keyring/tpm + persist
|
|
48
|
+
# postgres on Linux only; runtime auto-detects hardware and degrades to encrypted
|
|
49
|
+
# software when absent (`is_hardware_backed()` reports the posture). This mirrors
|
|
50
|
+
# the substrate crates' per-target keyring/postgres gating.
|
|
51
51
|
|
|
52
52
|
# ----------------------------------------------------------------------------
|
|
53
53
|
# Dependencies — CIRISServer AUTHORS NO PRIMITIVES. It composes the core
|
|
@@ -82,7 +82,10 @@ ciris-lens-core = { path = "crates/ciris-lens-core" } # ABSORBED in-tree (wo
|
|
|
82
82
|
|
|
83
83
|
# The substrate trio (also pulled transitively by the cores; pinned here so the
|
|
84
84
|
# composition root owns the singleton construction).
|
|
85
|
-
|
|
85
|
+
# sqlite on all platforms; postgres is Linux-only (libpq/openssl don't link
|
|
86
|
+
# cleanly on the macOS/Windows runners — same posture as persist's own CI). The
|
|
87
|
+
# `[target.linux]` table below adds postgres.
|
|
88
|
+
ciris-persist = { git = "https://github.com/CIRISAI/CIRISPersist", tag = "v7.0.0", features = ["sqlite"] }
|
|
86
89
|
ciris-edge = { git = "https://github.com/CIRISAI/CIRISEdge", tag = "v3.6.0", features = ["transport-reticulum", "transport-http"] }
|
|
87
90
|
# Founder-quorum verification + key-id fingerprint at the composition root
|
|
88
91
|
# (threshold:: module path — NOT re-exported at the crate root).
|
|
@@ -106,9 +109,25 @@ fs2 = "0.4" # available-disk check for realistic-minimum feature gating
|
|
|
106
109
|
axum = "0.8"
|
|
107
110
|
base64 = "0.22"
|
|
108
111
|
serde_json = "1"
|
|
112
|
+
getrandom = "0.3" # mint the ML-DSA-65 federation seed on first boot (hybrid PQC)
|
|
113
|
+
flate2 = "1" # read the gz'd legacy-trace dump (import-traces subcommand)
|
|
109
114
|
tracing = "0.1"
|
|
110
115
|
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
|
|
111
116
|
|
|
117
|
+
# Linux-only hardware + Postgres: cargo UNIONS these onto the base deps above.
|
|
118
|
+
# - persist `postgres` (libpq/openssl) — Linux deployment + the postgres
|
|
119
|
+
# conformance lane; macOS/Windows stay sqlite-only.
|
|
120
|
+
# - keyring `tpm` (tss-esapi / TPM 2.0) — the real hardware backend; needs
|
|
121
|
+
# libtss2 (Linux build dep). Other targets keep the software keystore.
|
|
122
|
+
[target.'cfg(target_os = "linux")'.dependencies]
|
|
123
|
+
ciris-persist = { git = "https://github.com/CIRISAI/CIRISPersist", tag = "v7.0.0", features = ["postgres"] }
|
|
124
|
+
ciris-keyring = { git = "https://github.com/CIRISAI/CIRISVerify", tag = "v5.6.0", version = "5", features = ["tpm"] }
|
|
125
|
+
|
|
126
|
+
# Android (arm64/arm32/x86_64): the keyring `android` backend (JNI → Android
|
|
127
|
+
# Keystore/StrongBox); sqlite bundles, no postgres/tpm. Mirrors persist/edge.
|
|
128
|
+
[target.'cfg(target_os = "android")'.dependencies]
|
|
129
|
+
ciris-keyring = { git = "https://github.com/CIRISAI/CIRISVerify", tag = "v5.6.0", version = "5", features = ["android"] }
|
|
130
|
+
|
|
112
131
|
# Test-only — the two-node replication integration test (tests/replication.rs)
|
|
113
132
|
# builds + signs CEG batches with the same primitives persist verifies against.
|
|
114
133
|
# ed25519-dalek MUST match persist's locked 2.x (the SigningKey type crosses the
|
|
@@ -118,7 +137,7 @@ ed25519-dalek = "2"
|
|
|
118
137
|
base64 = "0.22"
|
|
119
138
|
chrono = { version = "0.4", features = ["serde"] }
|
|
120
139
|
serde_json = "1"
|
|
121
|
-
criterion = "0.5"
|
|
140
|
+
criterion = { version = "0.5", features = ["async_tokio"] }
|
|
122
141
|
# The PQC primitives the realtime-A/V E2E bench drives directly: hybrid KEX
|
|
123
142
|
# (X25519 + ML-KEM-768) for the per-Link transit key, AES-256-GCM for the
|
|
124
143
|
# two-layer chunk seal. Same pin/features edge composes (tag parity).
|
|
@@ -129,6 +148,11 @@ ciris-crypto = { git = "https://github.com/CIRISAI/CIRISVerify", tag = "v5.6.0"
|
|
|
129
148
|
name = "pqc_av_streaming"
|
|
130
149
|
harness = false
|
|
131
150
|
|
|
151
|
+
# Replication / corpus-ingest throughput (the CEG-RC5 receive spine).
|
|
152
|
+
[[bench]]
|
|
153
|
+
name = "replication_ingest"
|
|
154
|
+
harness = false
|
|
155
|
+
|
|
132
156
|
[profile.release]
|
|
133
157
|
# panic strategy stays "unwind" (the Win7 build-std lane relies on this being
|
|
134
158
|
# pinned here, not on the build-std crate list — see release.yml win7 lane).
|
|
@@ -72,8 +72,13 @@ pip install ciris-server # the abi3 wheel (live on PyPI; self-contained,
|
|
|
72
72
|
```
|
|
73
73
|
export CIRIS_HOME=/var/lib/ciris-server # data + identity root
|
|
74
74
|
mkdir -p "$CIRIS_HOME/identity"
|
|
75
|
-
# Federation signing seed → adopted + TPM-sealed on first boot, byte-identical
|
|
75
|
+
# Federation signing seed (Ed25519) → adopted + TPM-sealed on first boot, byte-identical
|
|
76
76
|
cp /var/lib/cirislens/keyring/ed25519.seed "$CIRIS_HOME/identity/ed25519.seed"
|
|
77
|
+
# PQC signing seed (ML-DSA-65) → adopted as the hybrid half, IF the deployment had one.
|
|
78
|
+
# The federation signature is a FULL HYBRID (Ed25519 + ML-DSA-65); if no ml_dsa_65.seed
|
|
79
|
+
# is carried over, the node MINTS a fresh PQC half on first boot — a NEW PQC pubkey, so
|
|
80
|
+
# coordinate enrollment (the Ed25519 key_id is still continuous).
|
|
81
|
+
cp /var/lib/cirislens/keyring/ml_dsa_65.seed "$CIRIS_HOME/identity/ml_dsa_65.seed" # if present
|
|
77
82
|
# RNS transport identity → adopted into the keystore byte-identically (dest hash preserved)
|
|
78
83
|
export CIRIS_SERVER_RET_IDENTITY_PATH=/var/lib/cirislens/keyring/lens-edge.identity
|
|
79
84
|
```
|
|
@@ -81,6 +86,8 @@ On first boot the node:
|
|
|
81
86
|
- **adopts** `ed25519.seed` (`SealedEd25519Signer::adopt`) → the **same** 32-byte
|
|
82
87
|
Ed25519 pubkey ⇒ the **same `key_id`**, now TPM-sealed; the plaintext is archived
|
|
83
88
|
to `ed25519.seed.migrated` (the sealed copy is load-bearing);
|
|
89
|
+
- **adopts** `ml_dsa_65.seed` (if present) → the **same** ML-DSA-65 pubkey (the PQC
|
|
90
|
+
half of the hybrid signature); software-at-rest (no sealed-ML-DSA backend);
|
|
84
91
|
- **adopts** the `.rid` into `BlobTransportKeystore` → the **same Reticulum
|
|
85
92
|
destination hash**, now TPM-sealed; the original is archived to
|
|
86
93
|
`*.migrated-<ts>`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ciris-server
|
|
3
|
-
Version: 0.1
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
License-File: LICENSE
|
|
5
5
|
Summary: The fabric node — the federation's headless cohabitation runtime (registry + lens [+ node] over one shared substrate), as the abi3 wheel CIRISAgent consumes. agent = fabric node + brain.
|
|
6
6
|
Author-email: Eric Moore <eric@ciris.ai>
|