#![allow(dead_code)]
use chrono::{DateTime, Utc};
use cortex_core::{AuthorityClass, ClaimCeiling, ClaimProofState, RuntimeMode};
use cortex_verifier::{
AuthorityDomain, EvidenceInput, EvidenceKind, IndependentWitness, WitnessClass, WitnessPayload,
WitnessSignature, WitnessTier,
};
use ed25519_dalek::{Signer, SigningKey};
pub fn signing_key(seed: u8) -> SigningKey {
let mut bytes = [0u8; 32];
bytes[0] = seed;
bytes[31] = seed.wrapping_add(0x5A);
SigningKey::from_bytes(&bytes)
}
pub fn sample_evidence_digest() -> String {
blake3::hash(b"release readiness evidence v1")
.to_hex()
.to_string()
}
pub fn authority_grade_input(kind: EvidenceKind) -> EvidenceInput {
EvidenceInput {
kind,
evidence_blake3: sample_evidence_digest(),
runtime_mode: RuntimeMode::AuthorityGrade,
authority_class: AuthorityClass::Operator,
proof_state: ClaimProofState::FullChainVerified,
requested_ceiling: ClaimCeiling::AuthorityGrade,
source_refs: vec!["signed://fixture/evidence".to_string()],
advisory_only: false,
}
}
pub fn advisory_only_input(kind: EvidenceKind) -> EvidenceInput {
EvidenceInput {
kind,
evidence_blake3: sample_evidence_digest(),
runtime_mode: RuntimeMode::Dev,
authority_class: AuthorityClass::Observed,
proof_state: ClaimProofState::Partial,
requested_ceiling: ClaimCeiling::AuthorityGrade,
source_refs: vec!["local://fixture/evidence".to_string()],
advisory_only: true,
}
}
pub fn signed_witness(
seed: u8,
class: WitnessClass,
tier: WitnessTier,
subject_digest: &str,
asserted_at: DateTime<Utc>,
) -> IndependentWitness {
let key = signing_key(seed);
let domain = class.required_authority_domain();
let payload = sample_payload(class);
let preimage = payload.canonical_preimage(domain, subject_digest, asserted_at);
let signature = key.sign(&preimage);
IndependentWitness {
class,
authority_domain: domain,
tier,
asserted_at,
asserted_subject_blake3: subject_digest.to_string(),
signature: WitnessSignature::Ed25519 {
public_key_bytes: key.verifying_key().to_bytes(),
signature_bytes: signature.to_bytes(),
signer_id: Some(format!("test-signer-{}", class.wire_str())),
},
payload,
}
}
pub fn sample_payload(class: WitnessClass) -> WitnessPayload {
let now =
DateTime::<Utc>::from_timestamp(1_715_500_000, 0).expect("constant fits in chrono range");
match class {
WitnessClass::SignedLedgerChainHead => WitnessPayload::SignedLedgerChainHead {
chain_head_hash: blake3::hash(b"chain-head").to_hex().to_string(),
event_count: 42,
},
WitnessClass::ExternalAnchorCrossing => WitnessPayload::ExternalAnchorCrossing {
chain_head_hash: blake3::hash(b"chain-head").to_hex().to_string(),
event_count: 42,
sink_kind: "branch_protection".to_string(),
},
WitnessClass::RemoteCiConclusion => WitnessPayload::RemoteCiConclusion {
workflow_run_id: "ci-run-2026-05-12".to_string(),
commit_sha: "0000000000000000000000000000000000000000".to_string(),
conclusion_timestamp: now,
},
WitnessClass::ReproducibleBuildProvenance => WitnessPayload::ReproducibleBuildProvenance {
builder_id: "https://slsa-builder.example/v1".to_string(),
source_digest: blake3::hash(b"source").to_hex().to_string(),
artifact_digest: blake3::hash(b"artifact").to_hex().to_string(),
},
}
}
pub fn force_authority_domain(witness: &mut IndependentWitness, seed: u8, domain: AuthorityDomain) {
witness.authority_domain = domain;
let key = signing_key(seed);
let preimage = witness.payload.canonical_preimage(
witness.authority_domain,
&witness.asserted_subject_blake3,
witness.asserted_at,
);
let signature = key.sign(&preimage);
match &mut witness.signature {
WitnessSignature::Ed25519 {
public_key_bytes,
signature_bytes,
..
} => {
*public_key_bytes = key.verifying_key().to_bytes();
*signature_bytes = signature.to_bytes();
}
other => panic!("force_authority_domain: expected Ed25519, got {other:?}"),
}
}
pub fn full_witness_set(
subject_digest: &str,
asserted_at: DateTime<Utc>,
) -> Vec<IndependentWitness> {
vec![
signed_witness(
1,
WitnessClass::SignedLedgerChainHead,
WitnessTier::OperatorOwned,
subject_digest,
asserted_at,
),
signed_witness(
2,
WitnessClass::ExternalAnchorCrossing,
WitnessTier::OperatorOwned,
subject_digest,
asserted_at,
),
signed_witness(
3,
WitnessClass::RemoteCiConclusion,
WitnessTier::ThirdParty,
subject_digest,
asserted_at,
),
signed_witness(
4,
WitnessClass::ReproducibleBuildProvenance,
WitnessTier::ThirdParty,
subject_digest,
asserted_at,
),
]
}
pub use cortex_verifier::EvidenceKind as Kind;