From 4006f9268a1232d4162678999eb12463ddd558b2 Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" Date: Mon, 12 Oct 2026 15:02:53 +0000 Subject: [PATCH 1/5] secret-types: termination-insensitive noninterference for the two-point lattice MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Volpano-Smith typing over L ⊑ H for a while-language with one public and one secret variable; fuel-indexed semantics. tini proved by induction on fuel and typing (eval-low, confine). Explicit and implicit flows refused by the type system and shown to leak by computation. A well-typed secret-guarded loop that spins on one secret and stops on another makes termination-insensitivity concrete. Agda --safe --without-K, builtins only. --- PROOF-STATUS.adoc | 51 +++++++++++++ README.adoc | 23 +++--- docs/README-section.adoc | 15 ++++ scripts/check.sh | 36 +++++++++ secret-types.agda-lib | 3 + src/SecretTypes/All.agda | 9 +++ src/SecretTypes/Lang.agda | 73 +++++++++++++++++++ src/SecretTypes/Lang.agdai | Bin 0 -> 39132 bytes src/SecretTypes/Lattice.agda | 30 ++++++++ src/SecretTypes/Lattice.agdai | Bin 0 -> 12374 bytes src/SecretTypes/Noninterference.agda | 101 ++++++++++++++++++++++++++ src/SecretTypes/Noninterference.agdai | Bin 0 -> 98313 bytes src/SecretTypes/Prelude.agda | 45 ++++++++++++ src/SecretTypes/Prelude.agdai | Bin 0 -> 23128 bytes src/SecretTypes/Typing.agda | 23 ++++++ src/SecretTypes/Typing.agdai | Bin 0 -> 22777 bytes src/SecretTypes/Witness.agda | 56 ++++++++++++++ tests/reject/ExplicitFlow.agda | 11 +++ tests/reject/ImplicitFlow.agda | 12 +++ 19 files changed, 477 insertions(+), 11 deletions(-) create mode 100644 PROOF-STATUS.adoc create mode 100644 docs/README-section.adoc create mode 100755 scripts/check.sh create mode 100644 secret-types.agda-lib create mode 100644 src/SecretTypes/All.agda create mode 100644 src/SecretTypes/Lang.agda create mode 100644 src/SecretTypes/Lang.agdai create mode 100644 src/SecretTypes/Lattice.agda create mode 100644 src/SecretTypes/Lattice.agdai create mode 100644 src/SecretTypes/Noninterference.agda create mode 100644 src/SecretTypes/Noninterference.agdai create mode 100644 src/SecretTypes/Prelude.agda create mode 100644 src/SecretTypes/Prelude.agdai create mode 100644 src/SecretTypes/Typing.agda create mode 100644 src/SecretTypes/Typing.agdai create mode 100644 src/SecretTypes/Witness.agda create mode 100644 tests/reject/ExplicitFlow.agda create mode 100644 tests/reject/ImplicitFlow.agda diff --git a/PROOF-STATUS.adoc b/PROOF-STATUS.adoc new file mode 100644 index 0000000..bbb1da4 --- /dev/null +++ b/PROOF-STATUS.adoc @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: CC-BY-SA-4.0 += secret-types — Proof Status +:revdate: 2026-10-12 + +Statuses: PROVEN / TESTED / ASSUMED / DESIGNED / OPEN. Every PROVEN line +names its module; all modules are `--safe --without-K --no-libraries`, +checked with `--double-check`, no postulates. + +== Fragment (stated before the claims) + +One public and one secret variable; naturals; expressions `lit`, `var`, +`plus`; commands `skip`, assignment, sequence, `ifz`, `while`; fuel-indexed +big-step semantics (`nothing` when fuel runs out). Volpano–Smith typing with +a program-counter label over the two-point lattice. Not in the fragment: +n variables / arbitrary lattices, declassification, procedures, concurrency, +timing. Termination is the one channel the theorem names as open. + +== Claims + +[cols="1,3,1",options="header"] +|=== +| ID | Claim | Status +| N-1 | *TINI*: `pc ⊢ c → s ≈ s' → exec n c s ≡ just t → exec n' c s' ≡ just t' → t ≈ t'`, fuels independent | PROVEN (`Noninterference.tini`) +| N-2 | Public expressions read the same in low-equivalent stores | PROVEN (`eval-low`) +| N-3 | Confinement: under a secret program counter the public variable is unchanged, loops included | PROVEN (`confine`) +| N-4 | The typing side-condition is load-bearing: an explicit flow and an implicit flow are each refused (`L != H` at the `⊑` obligation) *and* each actually leaks from low-equivalent stores | TESTED (`tests/reject/ExplicitFlow`, `ImplicitFlow`; `Witness.explicit-leaks`, `implicit-leaks`) +| N-5 | Termination-insensitivity is real, not vacuous: a well-typed program spins on one secret and stops on another; TINI says nothing about that pair, by design | TESTED (`Witness.secret-loop-spins/stops`) +| N-6 | Laws census: the proof uses only the two-point order (`⊔-L₁`, `⊔-L₂`, `H ⊔ y = H`) and decidable zero-testing of naturals; no lattice law beyond that | ASSUMED by inspection (no parametric lattice to certify against yet) +|=== + +== Separation from siblings (criterion 2 of the family bar) + +* Noninterference is a property of *two* runs. Echo grades, tropical grades + and occupancy grades are accumulations over *one* run; none of them can + state N-1. That is the separation, and it is why this is a family and not + a view. The converse connection — that a well-typed program's low + observer has an Echo fibre that does not separate secret inputs — is a + CONJECTURE, recorded in the README, not claimed here. +* A label is not an epistemic standpoint (README). The Kripke frame built + for choreographic-types indexes knowledge by *views*; a label indexes + *permission to flow*. Nothing here imports epistemic-types, deliberately. + +== Open + +* Termination-sensitive noninterference (close the named channel): needs a + stronger typing rule for `while` on secret guards. Pre-registered: + the falsifier is `secret-loop` above, which TSNI must refuse. +* Arbitrary lattices (parametric in a `Lattice` record, with the census in + N-6 then certifiable the way resource-algebra's is). +* Declassification; multiple variables. +* CI (`proofs.yml`): DESIGNED until first green run on the 2.6.4.3 pin. diff --git a/README.adoc b/README.adoc index bae32a7..e003438 100644 --- a/README.adoc +++ b/README.adoc @@ -38,17 +38,18 @@ this standalone home), the first model, and the explicit non-claims. == Status -* *Specification only.* There is no `Secret` type, no information-flow - calculus, no declassification rule, no noninterference theorem and no - cross-repository import in this project. -* *Minted 2026-10-04 in scope, not yet in scaffolding.* The scope statement and - this README are real project content. The RSR template placeholder sweep - (`just repo-init`) has not been run across the tree yet, so other files still - carry `{{TOKEN}}` template text; that sweep is tracked in - link:https://github.com/hyperpolymath/secret-types/issues/2[issue #2]. -* *No progress grade claimed.* A documentation link is not a mechanised - dependency; an integration may only be claimed once a real import builds in - CI. +Core theorem PROVEN (2026-10-12): termination-insensitive noninterference +for the two-point lattice, `src/SecretTypes/Noninterference.agda` +(`tini`), with the explicit and implicit flows refused by the type system +and shown to leak by computation (`tests/reject/`, `Witness.agda`). The +fragment is one public and one secret variable with a `while` language and +fuel semantics; see link:PROOF-STATUS.adoc[]. Termination is the channel +the theorem leaves open, by name. + +Conjecture (not claimed): for a well-typed program, the public observer's +Echo fibre over its outputs does not separate secret inputs — the Echo +reading of noninterference, and the first candidate connection +Secret → Echo for `nextgen-typing/docs/TYPE-CONNECTIONS.adoc`. == Where things belong diff --git a/docs/README-section.adoc b/docs/README-section.adoc new file mode 100644 index 0000000..c25851e --- /dev/null +++ b/docs/README-section.adoc @@ -0,0 +1,15 @@ +// Splice into README.adoc, replacing "== Status" (specification only). +== Status + +Core theorem PROVEN (2026-10-12): termination-insensitive noninterference +for the two-point lattice, `src/SecretTypes/Noninterference.agda` +(`tini`), with the explicit and implicit flows refused by the type system +and shown to leak by computation (`tests/reject/`, `Witness.agda`). The +fragment is one public and one secret variable with a `while` language and +fuel semantics; see link:PROOF-STATUS.adoc[]. Termination is the channel +the theorem leaves open, by name. + +Conjecture (not claimed): for a well-typed program, the public observer's +Echo fibre over its outputs does not separate secret inputs — the Echo +reading of noninterference, and the first candidate connection +Secret → Echo for `nextgen-typing/docs/TYPE-CONNECTIONS.adoc`. diff --git a/scripts/check.sh b/scripts/check.sh new file mode 100755 index 0000000..2d2ab69 --- /dev/null +++ b/scripts/check.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: MPL-2.0 +# Core proofs plus expected rejections. Pattern: residual-evidence-types. +set -euo pipefail +cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." +export LC_ALL="${LC_ALL:-C.UTF-8}" +prover="${AGDA:-agda}" +"$prover" --version +flags=(--safe --without-K --no-libraries --ignore-interfaces --double-check -i src) +"$prover" "${flags[@]}" src/SecretTypes/All.agda +mkdir -p _build/check-logs +shopt -s nullglob +rejects=(tests/reject/*.agda) +shopt -u nullglob +if (( ${#rejects[@]} == 0 )); then + echo 'ERROR: no expected-rejection modules found under tests/reject' >&2 + exit 1 +fi +for file in "${rejects[@]}"; do + name="$(basename -- "$file" .agda)" + log="_build/check-logs/$name.log" + if "$prover" "${flags[@]}" -i tests/reject "$file" >"$log" 2>&1; then + cat "$log" + echo "ERROR: invalid proof accepted: $name" >&2 + exit 1 + fi + if ! grep -Eq "/$name\.agda:[0-9]+,[0-9]+" "$log" || + ! grep -q 'when checking that' "$log" || + grep -Eq 'Not in scope|Failed to find|Unsolved|Parse error' "$log"; then + cat "$log" + echo "ERROR: unexpected failure while checking $name" >&2 + exit 1 + fi + echo "PASS: rejected $name at its invalid declaration" +done +echo "PASS: core proofs and all ${#rejects[@]} expected rejections" diff --git a/secret-types.agda-lib b/secret-types.agda-lib new file mode 100644 index 0000000..bef4bdc --- /dev/null +++ b/secret-types.agda-lib @@ -0,0 +1,3 @@ +name: secret-types +include: src +flags: --safe --without-K diff --git a/src/SecretTypes/All.agda b/src/SecretTypes/All.agda new file mode 100644 index 0000000..97676d1 --- /dev/null +++ b/src/SecretTypes/All.agda @@ -0,0 +1,9 @@ +{-# OPTIONS --safe --without-K #-} +-- SPDX-License-Identifier: MPL-2.0 +module SecretTypes.All where +import SecretTypes.Prelude +import SecretTypes.Lattice +import SecretTypes.Lang +import SecretTypes.Typing +import SecretTypes.Noninterference +import SecretTypes.Witness diff --git a/src/SecretTypes/Lang.agda b/src/SecretTypes/Lang.agda new file mode 100644 index 0000000..5eefa28 --- /dev/null +++ b/src/SecretTypes/Lang.agda @@ -0,0 +1,73 @@ +{-# OPTIONS --safe --without-K #-} +-- SPDX-License-Identifier: MPL-2.0 +-- SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell +-- +-- A small while-language with one public and one secret variable, and a +-- fuel-indexed big-step semantics. Fuel is what makes "termination- +-- insensitive" a real qualifier: a loop that does not finish within the +-- fuel returns `nothing`, and the theorem is stated only for runs that +-- return `just`. +module SecretTypes.Lang where + +open import SecretTypes.Prelude +open import SecretTypes.Lattice + +data Var : Set where + lo hi : Var + +label : Var → Label +label lo = L +label hi = H + +record Store : Set where + constructor ⟨_,_⟩ + field + low : Nat + high : Nat +open Store public + +data Expr : Set where + lit : Nat → Expr + var : Var → Expr + plus : Expr → Expr → Expr + +infixr 5 _﹔_ +data Cmd : Set where + skip : Cmd + _≔_ : Var → Expr → Cmd + _﹔_ : Cmd → Cmd → Cmd + ifz : Expr → Cmd → Cmd → Cmd -- if e = 0 then c₁ else c₂ + while : Expr → Cmd → Cmd -- while e = 0 do c + +eval : Store → Expr → Nat +eval s (lit n) = n +eval s (var lo) = low s +eval s (var hi) = high s +eval s (plus a b) = eval s a + eval s b + +update : Var → Nat → Store → Store +update lo n ⟨ l , h ⟩ = ⟨ n , h ⟩ +update hi n ⟨ l , h ⟩ = ⟨ l , n ⟩ + +-- exec fuel c s: `just t` if c runs to completion within fuel, else `nothing`. +exec : Nat → Cmd → Store → Maybe Store +execIf : Nat → Nat → Cmd → Cmd → Store → Maybe Store -- guard value, branches +execWhile : Nat → Nat → Expr → Cmd → Store → Maybe Store -- remaining fuel, guard value + +exec fuel skip s = just s +exec fuel (x ≔ e) s = just (update x (eval s e) s) +exec fuel (c₁ ﹔ c₂) s = bind (exec fuel c₁ s) (exec fuel c₂) +exec fuel (ifz e c₁ c₂) s = execIf fuel (eval s e) c₁ c₂ s +exec zero (while e c) s = nothing +exec (suc fuel) (while e c) s = execWhile fuel (eval s e) e c s + +execIf fuel zero c₁ c₂ s = exec fuel c₁ s +execIf fuel (suc _) c₁ c₂ s = exec fuel c₂ s + +execWhile fuel zero e c s = bind (exec fuel c s) (exec fuel (while e c)) +execWhile fuel (suc _) e c s = just s + +-- Low-equivalence: the public observer sees the same thing. +infix 4 _≈_ +_≈_ : Store → Store → Set +s ≈ s' = low s ≡ low s' diff --git a/src/SecretTypes/Lang.agdai b/src/SecretTypes/Lang.agdai new file mode 100644 index 0000000000000000000000000000000000000000..bae9579ae1a6568ac42f9b4e648ccfbcef2eceef GIT binary patch literal 39132 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Ρ?7-GjVld^gAt3w$0DBDpbTlYM-p+g>uKIeXJ z^zMkTGreb+)!qDv6%}U9u<3}{>bJRM!g�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 literal 0 HcmV?d00001 diff --git a/src/SecretTypes/Lattice.agda b/src/SecretTypes/Lattice.agda new file mode 100644 index 0000000..2c18556 --- /dev/null +++ b/src/SecretTypes/Lattice.agda @@ -0,0 +1,30 @@ +{-# OPTIONS --safe --without-K #-} +-- SPDX-License-Identifier: MPL-2.0 +-- SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell +-- The two-point lattice Public ⊑ Secret. A label is a flow constraint, not +-- an epistemic standpoint (README, "A label is not an epistemic standpoint"). +module SecretTypes.Lattice where + +open import SecretTypes.Prelude + +data Label : Set where + L H : Label -- L = Public, H = Secret + +infix 4 _⊑_ +data _⊑_ : Label → Label → Set where + L⊑L : L ⊑ L + L⊑H : L ⊑ H + H⊑H : H ⊑ H + +infixl 6 _⊔_ +_⊔_ : Label → Label → Label +L ⊔ y = y +H ⊔ y = H + +⊔-L₁ : ∀ {x y} → x ⊔ y ≡ L → x ≡ L +⊔-L₁ {L} _ = refl +⊔-L₁ {H} () + +⊔-L₂ : ∀ {x y} → x ⊔ y ≡ L → y ≡ L +⊔-L₂ {L} e = e +⊔-L₂ {H} () diff --git a/src/SecretTypes/Lattice.agdai b/src/SecretTypes/Lattice.agdai new file mode 100644 index 0000000000000000000000000000000000000000..8b6fa17575c819b24421410cceafc0464f5ee5c7 GIT binary patch literal 12374 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

&ATHwG3*k!xw5k-WM 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 H1qS^O@!%&C literal 0 HcmV?d00001 diff --git a/src/SecretTypes/Typing.agda b/src/SecretTypes/Typing.agda new file mode 100644 index 0000000..fb48cd0 --- /dev/null +++ b/src/SecretTypes/Typing.agda @@ -0,0 +1,23 @@ +{-# OPTIONS --safe --without-K #-} +-- SPDX-License-Identifier: MPL-2.0 +-- SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell +-- Volpano–Smith security typing: expressions get the join of their +-- variables' labels; commands are typed under a program-counter label. +module SecretTypes.Typing where + +open import SecretTypes.Prelude +open import SecretTypes.Lattice +open import SecretTypes.Lang + +lab : Expr → Label +lab (lit _) = L +lab (var x) = label x +lab (plus a b) = lab a ⊔ lab b + +infix 3 _⊢_ +data _⊢_ : Label → Cmd → Set where + skip : ∀ {pc} → pc ⊢ skip + assign : ∀ {pc x e} → pc ⊔ lab e ⊑ label x → pc ⊢ (x ≔ e) + seq : ∀ {pc c₁ c₂} → pc ⊢ c₁ → pc ⊢ c₂ → pc ⊢ (c₁ ﹔ c₂) + ifz : ∀ {pc e c₁ c₂} → pc ⊔ lab e ⊢ c₁ → pc ⊔ lab e ⊢ c₂ → pc ⊢ ifz e c₁ c₂ + while : ∀ {pc e c} → pc ⊔ lab e ⊢ c → pc ⊢ while e c diff --git a/src/SecretTypes/Typing.agdai b/src/SecretTypes/Typing.agdai new file mode 100644 index 0000000000000000000000000000000000000000..1ef26d0ce3407c2089fc486e00fdd351cef7a70f GIT binary patch literal 22777 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 literal 0 HcmV?d00001 diff --git a/src/SecretTypes/Witness.agda b/src/SecretTypes/Witness.agda new file mode 100644 index 0000000..cafb327 --- /dev/null +++ b/src/SecretTypes/Witness.agda @@ -0,0 +1,56 @@ +{-# OPTIONS --safe --without-K #-} +-- SPDX-License-Identifier: MPL-2.0 +-- SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell +-- Computed witnesses (TESTED): the typing side-condition is load-bearing. +module SecretTypes.Witness where + +open import SecretTypes.Prelude +open import SecretTypes.Lattice +open import SecretTypes.Lang +open import SecretTypes.Typing +open import SecretTypes.Noninterference + +-- An explicit flow and an implicit flow. Both are refused by the type +-- system (tests/reject/), and both actually leak: from low-equivalent +-- stores they end low-inequivalent. +explicit implicit : Cmd +explicit = lo ≔ var hi +implicit = ifz (var hi) (lo ≔ lit 0) (lo ≔ lit 1) + +s₀ s₁ : Store +s₀ = ⟨ 0 , 0 ⟩ +s₁ = ⟨ 0 , 1 ⟩ + +low-equivalent : s₀ ≈ s₁ +low-equivalent = refl + +explicit-leaks : ¬ (∀ {t t'} → exec 1 explicit s₀ ≡ just t → exec 1 explicit s₁ ≡ just t' → t ≈ t') +explicit-leaks h = absurd (h refl refl) + where absurd : 0 ≡ 1 → ⊥ + absurd () + +implicit-leaks : ¬ (∀ {t t'} → exec 1 implicit s₀ ≡ just t → exec 1 implicit s₁ ≡ just t' → t ≈ t') +implicit-leaks h = absurd (h refl refl) + where absurd : 0 ≡ 1 → ⊥ + absurd () + +-- A well-typed program with a secret loop guard: it spins forever when the +-- secret is 0 and stops at once otherwise, touching nothing public. +secret-loop : Cmd +secret-loop = while (var hi) skip + +secret-loop-typed : L ⊢ secret-loop +secret-loop-typed = while skip + +-- From s₁ the loop does not run (guard 1): finishes. From s₀ it runs until +-- the fuel is spent: `nothing`, so TINI has nothing to say — and need not. +secret-loop-stops : exec 3 secret-loop s₁ ≡ just s₁ +secret-loop-stops = refl + +secret-loop-spins : exec 3 secret-loop s₀ ≡ nothing +secret-loop-spins = refl + +-- Termination-insensitivity, made explicit: the public observer cannot +-- tell s₀ from s₁ by any finishing run of a well-typed program, but CAN by +-- whether the program finishes. That is the channel this theorem leaves +-- open, by name. diff --git a/tests/reject/ExplicitFlow.agda b/tests/reject/ExplicitFlow.agda new file mode 100644 index 0000000..76541bf --- /dev/null +++ b/tests/reject/ExplicitFlow.agda @@ -0,0 +1,11 @@ +{-# OPTIONS --safe --without-K #-} +-- SPDX-License-Identifier: MPL-2.0 +-- SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell +module ExplicitFlow where +open import SecretTypes.Lattice +open import SecretTypes.Lang +open import SecretTypes.Typing + +-- Must fail: assigning the secret variable to the public one needs H ⊑ L. +invalid : L ⊢ (lo ≔ var hi) +invalid = assign L⊑L diff --git a/tests/reject/ImplicitFlow.agda b/tests/reject/ImplicitFlow.agda new file mode 100644 index 0000000..1e8e65a --- /dev/null +++ b/tests/reject/ImplicitFlow.agda @@ -0,0 +1,12 @@ +{-# OPTIONS --safe --without-K #-} +-- SPDX-License-Identifier: MPL-2.0 +-- SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell +module ImplicitFlow where +open import SecretTypes.Lattice +open import SecretTypes.Lang +open import SecretTypes.Typing + +-- Must fail: branching on the secret raises the program counter to H, so +-- the public assignment inside the branch needs H ⊑ L. +invalid : L ⊢ ifz (var hi) (lo ≔ lit 0) (lo ≔ lit 1) +invalid = ifz (assign L⊑L) (assign L⊑L) From 4388c9085e07e3b4bc7e5ae2886320ae2bd65c15 Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Mon, 12 Oct 2026 21:08:48 +0100 Subject: [PATCH 2/5] Update src/SecretTypes/Prelude.agda Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Signed-off-by: Jonathan D.A. Jewell <6759885+hyperpolymath@users.noreply.github.com> --- src/SecretTypes/Prelude.agda | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/SecretTypes/Prelude.agda b/src/SecretTypes/Prelude.agda index 78d9a73..4184ac5 100644 --- a/src/SecretTypes/Prelude.agda +++ b/src/SecretTypes/Prelude.agda @@ -1,6 +1,8 @@ {-# OPTIONS --safe --without-K #-} -- SPDX-License-Identifier: MPL-2.0 -- SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell +-- Minimal prelude over Agda builtins only (no stdlib): negation, equality +-- lemmas, Maybe with monadic bind, and pairs. Used by the TINI proof. module SecretTypes.Prelude where open import Agda.Builtin.Nat public using (Nat; zero; suc; _+_) From 1295ce211ee71ecabbe5ba821d54519c16cde4bd Mon Sep 17 00:00:00 2001 From: "coderabbitai[bot]" <136622811+coderabbitai[bot]@users.noreply.github.com> Date: Mon, 12 Oct 2026 20:12:29 +0000 Subject: [PATCH 3/5] docs(agda): document semantics and proof helpers --- src/SecretTypes/Lang.agda | 13 +++++++++++++ src/SecretTypes/Lattice.agda | 3 +++ src/SecretTypes/Noninterference.agda | 18 +++++++++++++++++- src/SecretTypes/Prelude.agda | 13 +++++++++++++ src/SecretTypes/Typing.agda | 2 ++ 5 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/SecretTypes/Lang.agda b/src/SecretTypes/Lang.agda index 5eefa28..a67d3b3 100644 --- a/src/SecretTypes/Lang.agda +++ b/src/SecretTypes/Lang.agda @@ -15,6 +15,7 @@ open import SecretTypes.Lattice data Var : Set where lo hi : Var +-- Classify the public variable as L and the secret variable as H. label : Var → Label label lo = L label hi = H @@ -39,19 +40,31 @@ data Cmd : Set where ifz : Expr → Cmd → Cmd → Cmd -- if e = 0 then c₁ else c₂ while : Expr → Cmd → Cmd -- while e = 0 do c +-- Evaluate an expression using the store's current variable values. eval : Store → Expr → Nat eval s (lit n) = n eval s (var lo) = low s eval s (var hi) = high s eval s (plus a b) = eval s a + eval s b +-- Return a store with the selected variable replaced, preserving the other. update : Var → Nat → Store → Store update lo n ⟨ l , h ⟩ = ⟨ n , h ⟩ update hi n ⟨ l , h ⟩ = ⟨ l , n ⟩ -- exec fuel c s: `just t` if c runs to completion within fuel, else `nothing`. +-- Fuel bounds recursive loop evaluation: each while consumes one unit, +-- even when its guard is non-zero. At zero fuel, while returns `nothing`. +-- Other commands consume no fuel; sequence reuses it for both commands, +-- and a loop's body and continuation each receive the remaining fuel. exec : Nat → Cmd → Store → Maybe Store +-- Run the first branch for guard value zero, otherwise the second, using +-- the supplied fuel unchanged; return the selected branch's result. execIf : Nat → Nat → Cmd → Cmd → Store → Maybe Store -- guard value, branches +-- Continue a loop after its fuel decrement, using the supplied guard value. +-- Non-zero returns `just s`; zero runs the body then repeats the loop with +-- the same remaining fuel, re-evaluating e in the updated store. Return +-- `nothing` if either the body or the repeated loop exhausts its fuel. execWhile : Nat → Nat → Expr → Cmd → Store → Maybe Store -- remaining fuel, guard value exec fuel skip s = just s diff --git a/src/SecretTypes/Lattice.agda b/src/SecretTypes/Lattice.agda index 2c18556..a804953 100644 --- a/src/SecretTypes/Lattice.agda +++ b/src/SecretTypes/Lattice.agda @@ -17,14 +17,17 @@ data _⊑_ : Label → Label → Set where H⊑H : H ⊑ H infixl 6 _⊔_ +-- Combine flow labels: the result is secret if either input is secret. _⊔_ : Label → Label → Label L ⊔ y = y H ⊔ y = H +-- A public join guarantees that its left input is public. ⊔-L₁ : ∀ {x y} → x ⊔ y ≡ L → x ≡ L ⊔-L₁ {L} _ = refl ⊔-L₁ {H} () +-- A public join guarantees that its right input is public. ⊔-L₂ : ∀ {x y} → x ⊔ y ≡ L → y ≡ L ⊔-L₂ {L} e = e ⊔-L₂ {H} () diff --git a/src/SecretTypes/Noninterference.agda b/src/SecretTypes/Noninterference.agda index c454943..47ea2b4 100644 --- a/src/SecretTypes/Noninterference.agda +++ b/src/SecretTypes/Noninterference.agda @@ -21,6 +21,7 @@ open import SecretTypes.Lang open import SecretTypes.Typing ---------------------------------------------------------------------- +-- A public expression has equal values in stores that agree on lo. eval-low : ∀ e {s s'} → lab e ≡ L → s ≈ s' → eval s e ≡ eval s' e eval-low (lit n) _ _ = refl eval-low (var lo) _ eq = eq @@ -29,8 +30,13 @@ eval-low (plus a b) p eq = cong₂ _+_ (eval-low a (⊔-L₁ p) eq) (eval-low b ---------------------------------------------------------------------- -- Confinement: under a secret program counter the public variable is unchanged. +-- Requires evidence that execution finishes with the supplied fuel. confine : ∀ {c} fuel {s t} → H ⊢ c → exec fuel c s ≡ just t → low t ≡ low s +-- Confinement for a finishing conditional with supplied guard value n; +-- both branches must be typed under a secret program counter. confineIf : ∀ {c₁ c₂} fuel n {s t} → H ⊢ c₁ → H ⊢ c₂ → execIf fuel n c₁ c₂ s ≡ just t → low t ≡ low s +-- Confinement for a finishing loop continuation with remaining fuel and +-- supplied guard value n, when its body is typed under a secret counter. confineW : ∀ {e c} fuel n {s t} → H ⊢ c → execWhile fuel n e c s ≡ just t → low t ≡ low s confine fuel skip e = cong low (sym (just-inj e)) @@ -50,12 +56,19 @@ confineW fuel zero t e with bind-just _ _ e confineW fuel (suc _) t e = cong low (sym (just-inj e)) ---------------------------------------------------------------------- --- The theorem. +-- Finishing runs of a well-typed command preserve low-equivalence. +-- The fuel bounds may differ; runs returning nothing are not covered. tini : ∀ {pc c} fuel fuel' {s s' t t'} → pc ⊢ c → s ≈ s' → exec fuel c s ≡ just t → exec fuel' c s' ≡ just t' → t ≈ t' +-- Preserve low-equivalence across two finishing conditional evaluations. +-- ℓ is the program-counter label joined with the guard's label; when it +-- is secret, the runs may take different branches. Fuel bounds may differ. tiniIf : ∀ {pc e c₁ c₂} fuel fuel' {s s' t t'} ℓ → pc ⊔ lab e ≡ ℓ → pc ⊔ lab e ⊢ c₁ → pc ⊔ lab e ⊢ c₂ → s ≈ s' → execIf fuel (eval s e) c₁ c₂ s ≡ just t → execIf fuel' (eval s' e) c₁ c₂ s' ≡ just t' → t ≈ t' +-- Preserve low-equivalence across two finishing loop continuations. +-- ℓ is the program-counter label joined with the guard's label; the fuel +-- bounds are those remaining after each loop's decrement and may differ. tiniW : ∀ {pc e c} fuel fuel' {s s' t t'} ℓ → pc ⊔ lab e ≡ ℓ → pc ⊔ lab e ⊢ c → s ≈ s' → execWhile fuel (eval s e) e c s ≡ just t → execWhile fuel' (eval s' e) e c s' ≡ just t' → t ≈ t' @@ -66,6 +79,7 @@ tini fuel fuel' (assign {pc} {lo} {g} ok) eq e e' = (trans (eval-low g (⊔-L₂ (low-pc ok)) eq) (cong low (just-inj e'))) where + -- Any label allowed to flow to the public variable must itself be public. low-pc : ∀ {x} → x ⊑ L → x ≡ L low-pc L⊑L = refl tini fuel fuel' (assign {x = hi} _) eq e e' = @@ -81,6 +95,7 @@ tini (suc fuel) (suc fuel') (while {pc} {g} t) eq e e' = tiniW {pc} {g} fuel fue tiniIf {pc} {g} {c₁} {c₂} fuel fuel' {s} {s'} {t} {t'} L p t₁ t₂ eq e e' = go (eval s g) (eval-low g (⊔-L₂ p) eq) e e' where + -- Equal guard values select the same branch in the two finishing runs. go : ∀ n {m} → n ≡ m → execIf fuel n c₁ c₂ s ≡ just t → execIf fuel' m c₁ c₂ s' ≡ just t' → t ≈ t' go zero refl e e' = tini fuel fuel' t₁ eq e e' go (suc n) refl e e' = tini fuel fuel' t₂ eq e e' @@ -92,6 +107,7 @@ tiniIf {pc} {g} {c₁} {c₂} fuel fuel' {s} {s'} H p t₁ t₂ eq e e' = tiniW {pc} {g} {c} fuel fuel' {s} {s'} {t} {t'} L p tc eq e e' = go (eval s g) (eval-low g (⊔-L₂ p) eq) e e' where + -- Equal guard values make both finishing runs continue the loop or stop. go : ∀ n {m} → n ≡ m → execWhile fuel n g c s ≡ just t → execWhile fuel' m g c s' ≡ just t' → t ≈ t' go zero refl e e' with bind-just _ _ e | bind-just _ _ e' ... | s₁ , (e₁ , e₂) | s₁' , (e₁' , e₂') = tini fuel fuel' (while tc) (tini fuel fuel' tc eq e₁ e₁') e₂ e₂' diff --git a/src/SecretTypes/Prelude.agda b/src/SecretTypes/Prelude.agda index 4184ac5..6e1834f 100644 --- a/src/SecretTypes/Prelude.agda +++ b/src/SecretTypes/Prelude.agda @@ -10,20 +10,27 @@ open import Agda.Builtin.Equality public using (_≡_; refl) open import Agda.Builtin.Sigma public using (Σ; _,_; fst; snd) data ⊥ : Set where +-- Negation is evidence that a proposition would imply a contradiction. ¬_ : Set → Set ¬ A = A → ⊥ infix 4 _≢_ +-- Express inequality by ruling out evidence of equality. _≢_ : {A : Set} → A → A → Set a ≢ b = ¬ (a ≡ b) +-- Reverse an equality proof. sym : {A : Set} {a b : A} → a ≡ b → b ≡ a sym refl = refl +-- Chain equality proofs through their shared intermediate value. trans : {A : Set} {a b c : A} → a ≡ b → b ≡ c → a ≡ c trans refl q = q +-- Carry equality through application of a function. cong : {A B : Set} (f : A → B) {a b : A} → a ≡ b → f a ≡ f b cong f refl = refl +-- Carry equalities in both arguments through a binary function. cong₂ : {A B C : Set} (f : A → B → C) {a b : A} {c d : B} → a ≡ b → c ≡ d → f a c ≡ f b d cong₂ f refl refl = refl +-- Transport evidence for the predicate P along an equality of its indices. subst : {A : Set} (P : A → Set) {a b : A} → a ≡ b → P a → P b subst P refl p = p @@ -31,17 +38,23 @@ data Maybe (A : Set) : Set where nothing : Maybe A just : A → Maybe A +-- Recover equality of the values inside equal just results. just-inj : {A : Set} {a b : A} → just a ≡ just b → a ≡ b just-inj refl = refl +-- Pass a present value to f and return its result; propagate nothing +-- without applying f when the input is absent. bind : {A : Set} → Maybe A → (A → Maybe A) → Maybe A bind nothing f = nothing bind (just a) f = f a infixr 2 _×_ +-- Pair evidence for two propositions without a dependency between them. _×_ : Set → Set → Set P × Q = Σ P (λ _ → Q) +-- From a successful bind, recover the intermediate value and proofs that +-- both the input and the continuation produced the required just results. bind-just : {A : Set} (m : Maybe A) (f : A → Maybe A) {t : A} → bind m f ≡ just t → Σ A (λ a → (m ≡ just a) × (f a ≡ just t)) bind-just (just a) f e = a , (refl , e) diff --git a/src/SecretTypes/Typing.agda b/src/SecretTypes/Typing.agda index fb48cd0..7defbf3 100644 --- a/src/SecretTypes/Typing.agda +++ b/src/SecretTypes/Typing.agda @@ -9,6 +9,8 @@ open import SecretTypes.Prelude open import SecretTypes.Lattice open import SecretTypes.Lang +-- Classify an expression as secret exactly when it mentions hi; +-- literals and expressions using only lo are public. lab : Expr → Label lab (lit _) = L lab (var x) = label x From 9d6fae674e41f7fe7c48fe13051c8b66e433347d Mon Sep 17 00:00:00 2001 From: "coderabbitai[bot]" <136622811+coderabbitai[bot]@users.noreply.github.com> Date: Mon, 12 Oct 2026 20:13:56 +0000 Subject: [PATCH 4/5] docs(repo): Update proof status badge and allow proof report and Agda library at root --- .machine_readable/root-allow.txt | 4 ++++ README.adoc | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.machine_readable/root-allow.txt b/.machine_readable/root-allow.txt index 196dbcf..f59dbf5 100644 --- a/.machine_readable/root-allow.txt +++ b/.machine_readable/root-allow.txt @@ -38,6 +38,10 @@ CLAUDE.md # generated arrival pack; the generator, pre-commit a Justfile # thin; delegates phases to build/just/*.just coordination.k9.ncl # repo-local session binding (template-mandated) +# ─── Project-specific root entries ─────────────────────────────────────────── +PROOF-STATUS.adoc # project theorem evidence and fragment limits, linked from README.adoc +secret-types.agda-lib # Agda discovers library descriptors at the project root + # ─── Conventional dotfiles (tool-required at root) ─────────────────────────── .editorconfig .envrc diff --git a/README.adoc b/README.adoc index e003438..fcc6b56 100644 --- a/README.adoc +++ b/README.adoc @@ -10,7 +10,7 @@ image:https://img.shields.io/badge/Code-MPL--2.0-blue.svg?logo=mozilla[Code lice image:https://img.shields.io/badge/Docs-CC--BY--SA--4.0-blue.svg?logo=creativecommons[Docs licence: CC-BY-SA-4.0,link="https://creativecommons.org/licenses/by-sa/4.0/"] // ── Status ────────────────────────────────────────────────────────────────── -image:https://img.shields.io/badge/Stage-specification--only-orange[Specification only: no code, no proofs] +image:https://img.shields.io/badge/Proof-core_theorem_proven-brightgreen[Core theorem proven,link="PROOF-STATUS.adoc"] image:https://img.shields.io/badge/RSR-Rhodium_Standard-9C27B0[Rhodium Standard Repository,link="https://github.com/hyperpolymath/rhodium-standard-repositories"] Confidentiality labels that constrain value flow, with declassification only at From 27025f4b210fd6d9f770e4d260ad8821d9e8cd60 Mon Sep 17 00:00:00 2001 From: "coderabbitai[bot]" <136622811+coderabbitai[bot]@users.noreply.github.com> Date: Mon, 12 Oct 2026 20:23:31 +0000 Subject: [PATCH 5/5] chore(repo): set owners and update repository map --- .github/CODEOWNERS | 12 ++++++------ docs/MAINTAINERS.adoc | 4 ++-- docs/architecture/REPOSITORY-MAP.adoc | 8 ++++++++ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 611b5a8..9257eac 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -2,13 +2,13 @@ # CODEOWNERS - Define code review assignments # See: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners # -# Replace {{OWNER}} with your GitHub username or team +# Repository owner: hyperpolymath # Default owners for everything -* @{{OWNER}} +* @hyperpolymath # Security-sensitive files require explicit review -SECURITY.md @{{OWNER}} -.github/workflows/ @{{OWNER}} -Trustfile.a2ml @{{OWNER}} -.machine_readable/ @{{OWNER}} +SECURITY.md @hyperpolymath +.github/workflows/ @hyperpolymath +Trustfile.a2ml @hyperpolymath +.machine_readable/ @hyperpolymath diff --git a/docs/MAINTAINERS.adoc b/docs/MAINTAINERS.adoc index 458fc55..3f1fad4 100644 --- a/docs/MAINTAINERS.adoc +++ b/docs/MAINTAINERS.adoc @@ -12,9 +12,9 @@ earlier duplicates at `.github/MAINTAINERS` and `docs/attribution/MAINTAINERS.ad |=== | Name | Role | Contact -| {{AUTHOR}} +| Jonathan D.A. Jewell | Lead Maintainer -| https://github.com/{{OWNER}}[@{{OWNER}}] +| https://github.com/hyperpolymath[@hyperpolymath] |=== == Responsibilities diff --git a/docs/architecture/REPOSITORY-MAP.adoc b/docs/architecture/REPOSITORY-MAP.adoc index 8c77eea..d7848e2 100644 --- a/docs/architecture/REPOSITORY-MAP.adoc +++ b/docs/architecture/REPOSITORY-MAP.adoc @@ -113,6 +113,10 @@ predecessors did. | yes | REUSE licence texts, dual-licence model (code MPL-2.0 / docs CC-BY-SA-4.0) +| `PROOF-STATUS.adoc` +| yes +| project theorem evidence and fragment limits, linked from README.adoc + | `README.adoc` | yes | - @@ -161,6 +165,10 @@ predecessors did. | yes | repo helper scripts +| `secret-types.agda-lib` +| yes +| Agda discovers library descriptors at the project root + | `session/` | yes | dispatch.sh, custom-checks.k9.ncl, local-hooks.sh