#![cfg(test)]
use super::*;
use crate::delegation::artifact::DelegationSubjectKind;
use crate::delegation::encoding::{CONTENT_TYPE, MAX_SEQUENCE, PROTECTED_LEN};
#[path = "artifact_tests/refusals.rs"]
mod refusals;
#[path = "artifact_tests/round_trip.rs"]
mod round_trip;
const ROOT_KEY: [u8; KEY_LEN] = [0xa1; KEY_LEN];
const SIGNATURE: [u8; 64] = [0x5e; 64];
const PROTECTED_AT: usize = 4;
const UNPROTECTED_AT: usize = PROTECTED_AT + PROTECTED_LEN;
fn delegated_key() -> [u8; KEY_LEN] {
let dir = tempfile::tempdir().unwrap();
let path = dir.path().join("delegated.key");
std::fs::write(&path, [0x42u8; 32]).unwrap();
crate::Ed25519Identity::load(&path)
.unwrap()
.public_key_bytes()
}
fn claim_for(subject_value: &str, not_before_unix_ms: u64, sequence: u64) -> DelegationClaim {
DelegationClaim {
subject_kind: DelegationSubjectKind::Domain,
subject_value: subject_value.to_string(),
delegated_public_key: delegated_key(),
role: DelegationRole::Operational,
not_before_unix_ms,
sequence,
}
}
fn seat_sample() -> Delegation {
Delegation {
root_public_key: ROOT_KEY,
claim: DelegationClaim {
subject_kind: DelegationSubjectKind::Seat,
subject_value: "a-seat-identifier".to_string(),
delegated_public_key: delegated_key(),
role: DelegationRole::SpeaksFor,
not_before_unix_ms: 1_700_000_000_000,
sequence: 300,
},
signature: SIGNATURE,
}
}
fn sample() -> Delegation {
Delegation {
root_public_key: ROOT_KEY,
claim: claim_for("example.test", 1_700_000_000_000, 300),
signature: SIGNATURE,
}
}
fn artifact_with_payload(payload: &[u8]) -> Vec<u8> {
encoding::envelope_bytes(
&encoding::protected_bytes(CONTENT_TYPE, &ROOT_KEY),
payload,
&SIGNATURE,
)
}