use crate::models::{ChangeHash, TimestampInSeconds};
use minicbor::{CborLen, Decode, Encode};
use ockam_core::compat::vec::Vec;
use ockam_vault::{
ECDSASHA256CurveP256PublicKey, ECDSASHA256CurveP256Signature, EdDSACurve25519PublicKey,
EdDSACurve25519Signature,
};
#[derive(Clone, Debug, PartialEq, Eq, Encode, Decode, CborLen)]
#[rustfmt::skip]
#[cbor(transparent)]
pub struct ChangeHistory(#[n(0)] pub Vec<Change>);
pub const CHANGE_DATA_TYPE: u8 = 1;
#[derive(Clone, Debug, PartialEq, Eq, Encode, Decode, CborLen)]
#[rustfmt::skip]
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(Clone, Debug, PartialEq, Eq, Encode, Decode, CborLen)]
#[rustfmt::skip]
pub enum ChangeSignature {
#[n(0)] EdDSACurve25519(#[n(0)] EdDSACurve25519Signature),
#[n(1)] ECDSASHA256CurveP256(#[n(0)] ECDSASHA256CurveP256Signature),
}
#[derive(Clone, Debug, PartialEq, Eq, Encode, Decode, CborLen)]
#[rustfmt::skip]
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 attestations_valid_from: TimestampInSeconds,
#[n(4)] pub attestations_valid_until: TimestampInSeconds,
}
#[derive(Clone, Debug, PartialEq, Eq, Encode, Decode, CborLen)]
#[rustfmt::skip]
pub enum PrimaryPublicKey {
#[n(0)] EdDSACurve25519(#[n(0)] EdDSACurve25519PublicKey),
#[n(1)] ECDSASHA256CurveP256(#[n(0)] ECDSASHA256CurveP256PublicKey),
}