Level 6 · The verification with a public key
§3 — Aitor verifies with a public key
Section titled “§3 — Aitor verifies with a public key”Aitor never holds a private key, never receives the source data, and never moves a model byte. He holds one thing per supplier: the public key, which each delivery repo commits as .froga/PUBKEY.txt. So he can run froga verify with no flag at all (it reads the committed pubkey) or, if he pins the key himself, --pubkey <hex>.
What froga verify does is local and cryptographic. For each present artefact it checks: the DSSE in-toto envelope (payloadType application/vnd.in-toto+json), that the keyid equals sha256(public key), that the ECDSA-P256 signature over the DSSE PAE is valid, and that the in-toto subject digest equals sha256(artifact bytes). It exits 0 iff every present artefact verifies — and a present artefact that is missing its .sig makes it fail. It makes no network calls and moves no data: purely the local filesystem over .froga/bundle.json(+.sig), reconstruct.json(+.sig), conformance/*.json(+.sig), and risk-projection/*.json(+.sig). The Rust CLI (crates/froga-cli/src/cmd/verify.rs) and the cloud TS (cloud/lib/froga/verify.ts) are designed mirrors of the same crypto contract.
Aitor clones each delivery and runs one command. Here is Supplier A — Ollomar Diagnóstica’s retina screener:
📍 reproducir retina-delivery-v1.0.0-blocked
Ollomar's retina screener — firma VÁLIDA, gate BLOCKED
git clone https://github.com/Venturalitica/vldemo-retina-delivery
cd vldemo-retina-delivery
git switch -c try retina-delivery-v1.0.0-blockedWith the repo already at the milestone (chip above), Aitor runs:
froga verify --repo . # public key only (committed at .froga/PUBKEY.txt) — no private key, no network, no datafroga verify — 7 artefacto(s) contra la clave pública 042b91f8…f57703f ✓ bundle.json ✓ reconstruct.json ✓ conformance/eu_mdr_2017.json ✓ conformance/eu_pren-18228_2026.json ✓ conformance/eu_pren-18282_2026.json ✓ conformance/eu_pren-18283_2026.json ✓ conformance/iso_23894_2023.jsonfirma VÁLIDA (7/7)# Gloss: "froga verify — 7 artefact(s) against public key 042b91f8…f57703f" / each ✓ = that# artefact's signature is authentic / "firma VÁLIDA (7/7)" = SIGNATURE VALID, all 7 verify → exit code 0.# Note the 7th-line MDR crosswalk (conformance/eu_mdr_2017.json): present and SIGNED — a cross-map, not a verdict.→ exit code 0 — every one of the 7 artefacts is authentic. And yet the tender acceptance gate for this delivery is BLOCKED: its blocking control model-dr-sensitivity is RED (passed=false — recall 0.414 < 0.80, an AI Act Art. 15 accuracy shortfall). Other controls are warn (non-blocking) and pass.
Now Supplier B — EduAtlante Analytics’ education model:
📍 reproducir quickstart-delivery-v1.0.0-accepted
EduAtlante's education model — firma VÁLIDA, gate ACCEPTED
git clone https://github.com/Venturalitica/vldemo-quickstart-delivery
cd vldemo-quickstart-delivery
git switch -c try quickstart-delivery-v1.0.0-acceptedWith the repo already at the milestone (chip above), Aitor runs:
froga verify --repo .froga verify — 6 artefacto(s) contra la clave pública 047751c9…930d4b1 ✓ bundle.json ✓ reconstruct.json ✓ conformance/eu_pren-18228_2026.json ✓ conformance/eu_pren-18282_2026.json ✓ conformance/eu_pren-18283_2026.json ✓ conformance/iso_23894_2023.jsonfirma VÁLIDA (6/6)# Gloss: "froga verify — 6 artefact(s) against public key 047751c9…930d4b1" / each ✓ authentic /# "firma VÁLIDA (6/6)" = SIGNATURE VALID, all 6 verify → exit code 0.# Note: 6 artefacts, NOT 7 — there is NO MDR crosswalk here (an education model, not a medical device).→ exit code 0 — every one of the 6 artefacts is authentic. The tender acceptance gate for this delivery is ACCEPTED: its blocking control fairness-parity is GREEN (passed=true), and no blocking control is RED.