#[derive(Encode, Decode)]
#[cbor(transparent)]
pub struct Identifier(#[cbor(n(0), with = "minicbor::bytes")] pub [u8; 20]);
/// SHA256 hash of a Change, truncated to its first 20 bytes.
#[derive(Encode, Decode)]
#[cbor(transparent)]
pub struct ChangeHash(#[cbor(n(0), with = "minicbor::bytes")] pub [u8; 20]);
#[derive(Encode, Decode)]
#[cbor(transparent)]
pub struct ChangeHistory(#[n(0)] pub Vec<Change>);
#[derive(Encode, Decode)]
pub struct Change {
#[cbor(with = "minicbor::bytes")]
#[n(0)]
pub data: Vec<u8>,
#[n(1)]
pub signature: ChangeSignature,
#[n(2)]
pub previous_signature: Option<ChangeSignature>,
}
#[derive(Encode, Decode)]
pub enum ChangeSignature {
#[n(0)]
EdDSACurve25519(#[n(0)] EdDSACurve25519Signature),
#[n(1)]
ECDSASHA256CurveP256(#[n(0)] ECDSASHA256CurveP256Signature),
}
#[derive(Encode, Decode)]
pub struct ChangeData {
#[n(0)]
pub previous_change: Option<ChangeHash>,
#[n(1)]
pub primary_public_key: PrimaryPublicKey,
#[n(2)]
pub revoke_all_purpose_keys: bool,
#[n(3)]
pub created_at: TimestampInSeconds,
#[n(4)]
pub expires_at: TimestampInSeconds,
}
#[derive(Encode, Decode)]
pub enum PrimaryPublicKey {
#[n(0)]
EdDSACurve25519(#[n(0)] EdDSACurve25519PublicKey),
#[n(1)]
ECDSASHA256CurveP256(#[n(0)] ECDSASHA256CurveP256PublicKey),
}
#[derive(Encode, Decode)]
pub struct VersionedData {
#[n(0)]
pub version: u8,
#[cbor(with = "minicbor::bytes")]
#[n(1)]
pub data: Vec<u8>,
}
#[derive(Encode, Decode)]
#[cbor(transparent)]
pub struct TimestampInSeconds(#[n(0)] pub u64);