Layer 1 · BLS signatures & domain separation
Canonical reference:
digstore-crypto::bls(host/producer, Chia AugScheme viachia-bls→blst) anddigstore-guest::attestation(verifier, pure-Rustbls12_381, wasm/zk-clean). The two are parity-locked by host-signed fixtures the guest must accept (tests/bls_fixtures.rs).
Scheme
Chia AugScheme over BLS12-381: G1 public key = 48 bytes, G2 signature = 96 bytes (bls.rs:14-29). aug_sign prepends the signer's public key + the Chia DST and hashes to G2. AugScheme's pubkey-binding is the base defense; the role DSTs below are defense-in-depth on top of it.
validate_public_key rejects the canonical G1 identity / point-at-infinity (0xc0 || 0…, 48 bytes) and non-canonical bytes — the rogue-key defense (bls.rs:117-138).