# Verify the FreeCORE 15.0-U1.3 validation bundle

This bundle authenticates the recorded validation evidence for one exact OS
image. It is separate from the installation image's own release signature.

## Required trust inputs

Obtain the verifier, trust policy, expected release identity and the following
public key pins through an independently trusted FreeCORE release channel.
Do not trust a public key or policy merely because it accompanies an archive.

- Primary fingerprint: `8D90EB4143D32348A521C1F33C331BC814BA9AE7`
- Signing subkey: `C1C2185247E1F5036F21277EE8DB645116ED3682`
- Public certificate SHA-256:
  `be8c364513b542263f6d9caf8e346f08933afb38015aa9943b1fa09c4de9d59a`
- Verifier SHA-256:
  `019238540b594a7c760820a82f0b5a3ec0bb73f192614444a1810d645a3995af`

These files are prepared for publication; their presence in this staging folder
does not mean the trust root or Tests page has been published.

## Verification

Python 3.11+ and compatible GnuPG are required. No signing access, QA repository,
network connection, or test target is needed. Run from this directory using
reviewed executables and independently trusted copies of the two JSON inputs:

```sh
python3 -I -B validation_signing.py verify \
  --archive validation.bundle.zip \
  --trust-policy trust-policy.json \
  --expected expected-identity.json \
  --gpg /absolute/path/to/gpg
```

Success returns JSON with `status: verified`, the validation role and the exact
image/checksum-inventory digests. Failure returns a nonzero exit code. The
`.zip.sha256` sidecar is a transport check, not a substitute for signature
verification. Compare its digest with a value obtained through a trusted channel.

The archive contains the six unchanged evidence files under `payload/`, plus
`validation.dsse.json`, `SHA256SUMS.gpg` and `validation-key.asc`. The DSSE
signature covers the exact attestation bytes with pre-authentication encoding;
the second signature covers the exact `payload/SHA256SUMS` bytes. Neither signs
the OS image directly: its SHA-256 is bound into the attestation and expected
identity. Hash the image separately before relying on that identity.

## Artifact and validity

- Image: `FreeCORE-15.0-U1.3.iso`, 1,388,097,536 bytes.
- Image SHA-256:
  `5e6f3a05b9525f2df8b275cace1b15ca1ee5ae106b989720f2bbd9a8429ef407`
- Evidence checksum-inventory SHA-256:
  `10baa189b16f58a91283dfe4da086e42e1240fe164946d0e2a9bc268ae8ef286`
- Current trust policy expires: **2027-09-05 22:49:07 UTC**.
- Signing subkey expires: **2028-09-04 22:49:00 UTC**.
- Certification primary expires: **2031-09-04 22:48:47 UTC**.

Verification checks current validity, not historical timestamp validity. Obtain
a reviewed current policy before its expiry; do not backdate the clock or bypass
expiry/revocation checks. Offline verification cannot discover a revocation that
has not been delivered in updated, independently trusted policy/key material.

A valid signature authenticates the recorded evidence and its scope. It does
not execute tests, prove every hardware configuration, or constitute a security
audit. Publication of these files is a separate release decision.
