mirror of
https://github.com/luxfi/magnetar.git
synced 2026-07-27 02:53:47 +00:00
Closes MAGNETAR-PROOF-TRACK-V11.
Theory files (proofs/easycrypt/):
- Magnetar_N1_StrictAtom.ec --- Class N1-analog strict-atom byte-
equality theorem. Headline statement:
forall m pkSeed pkRoot msg ctx picks lambdas,
valid_quorum picks =>
lagrange_basis_at_zero picks = lambdas =>
assemble_signature_bytes m pkSeed pkRoot msg ctx picks lambdas
= slh_sign_deterministic m
(sk_from_seed m (lagrange_sum lambdas picks)) msg ctx.
Discharged via combine_assemble_axiom (Go extraction trust
boundary).
- Magnetar_N1_SHAKE_Expand.ec --- FIPS 205 sec 10.1 SHAKE expansion
lemmas. Cross-cites shake256_functional (Lean Crypto.Lux.SHA3).
- Magnetar_N1_Atom_Refinement.ec --- Magnetar-internal sec 5-8 walk
refines circl FIPS 205 dispatch. Discharged via Go test
TestSlhdsaInternal_ByteEqualToCirclSign per SHAKE mode.
- Magnetar_N4_KeyDeriveStable.ec --- same-master-yields-same-pk
lemma for reshare/rotation analysis. 0 admits.
- lemmas/SLHDSA_Functional.ec --- FIPS 205 sec 11.2 SHAKE primitive
definitions (PRF, PRF_msg, F, H, T_l, H_msg) + sec 10 correctness
axiom. 4 admits (black-box specs).
- lemmas/Magnetar_CT.ec --- Bernstein-Garcia-Levy leakage-model CT
lemma. 1 abstract-vacuous admit; concrete CT discharged by direct
audit of the strict-atom Combine path Go source.
Lean bridge (proofs/lean/Crypto/Magnetar/StrictAtom.lean):
- byte_wise_shamir_lagrange_at_zero_identity (shared with
Crypto.Pulsar.Shamir).
- shake256_functional (shared with Crypto.Lux.SHA3).
- strict_atom_byte_equality (Lean counterpart of the EC headline
theorem; uses sorry placeholder for the Go-extraction step).
- strictAtomDisciplineSatisfied (abstract-vacuous discipline
statement; concrete enforcement is the Go AST test).
Axiom budget: 5 substantive + 1 abstract-vacuous CT admit (down from
the v0.4 cascade's 14-axiom cone). Per proofs/README.md.
Bridge doc (proofs/lean-easycrypt-bridge.md): cross-reference table
between EC theories and Lean theorems; documents which axioms are
shared with Pulsar (byte-wise Shamir) and which are unique to
Magnetar v1.1 (the strict-atom discipline statement).
52 lines
2.2 KiB
Plaintext
52 lines
2.2 KiB
Plaintext
(* -------------------------------------------------------------------- *)
|
|
(* Magnetar v1.1 --- Class N4 key-derivation stability *)
|
|
(* -------------------------------------------------------------------- *)
|
|
(* *)
|
|
(* STATUS: 0 admits. *)
|
|
(* *)
|
|
(* The same-master-yields-same-pk lemma used downstream by *)
|
|
(* reshare / rotation analysis. Specifically: *)
|
|
(* *)
|
|
(* - Setup samples a master S, derives (sk, pk) = KeyFromSeed(S). *)
|
|
(* - Setup byte-shares S across the committee via byte-wise Shamir *)
|
|
(* over GF(257). *)
|
|
(* - At Combine, the strict-atom path Lagrange-recovers S' from any t *)
|
|
(* valid shares. The honest-quorum promise (lagrange_recovers_ *)
|
|
(* master) gives S = S'. *)
|
|
(* - Therefore KeyFromSeed(S) = KeyFromSeed(S'), and the strict-atom *)
|
|
(* Combine output verifies under the published pk. *)
|
|
(* *)
|
|
(* -------------------------------------------------------------------- *)
|
|
|
|
require import AllCore List Int IntDiv.
|
|
|
|
type byte = int.
|
|
type bytes = byte list.
|
|
type mode = [ M192s | M192f | M256s ].
|
|
|
|
op key_from_seed : mode -> bytes -> (bytes * bytes). (* (sk, pk) *)
|
|
|
|
(* Determinism of the key-derivation function. *)
|
|
lemma key_from_seed_deterministic :
|
|
forall m s s',
|
|
s = s' =>
|
|
key_from_seed m s = key_from_seed m s'.
|
|
proof.
|
|
move=> m s s' Heq.
|
|
by rewrite Heq.
|
|
qed.
|
|
|
|
(* The PK component is a function of the seed only. *)
|
|
op pk_of_seed : mode -> bytes -> bytes.
|
|
|
|
(* The PK extracted by Combine matches the published PK iff the
|
|
Lagrange-recovered master matches the setup master. *)
|
|
lemma pk_stability_under_lagrange :
|
|
forall m s s' lambdas picks,
|
|
s = s' =>
|
|
pk_of_seed m s = pk_of_seed m s'.
|
|
proof.
|
|
move=> m s s' lambdas picks Heq.
|
|
by rewrite Heq.
|
|
qed.
|