use ockam_core::compat::vec::Vec;
use crate::models::{ChangeHash, Identifier, TimestampInSeconds};
use minicbor::{CborLen, Decode, Encode};
use ockam_vault::{
ECDSASHA256CurveP256PublicKey, ECDSASHA256CurveP256Signature, EdDSACurve25519PublicKey,
EdDSACurve25519Signature, X25519PublicKey,
};
pub const PURPOSE_KEY_ATTESTATION_DATA_TYPE: u8 = 2;
#[derive(Clone, Debug, PartialEq, Eq, Encode, Decode, CborLen)]
#[rustfmt::skip]
pub struct PurposeKeyAttestation {
#[cbor(with = "minicbor::bytes")]
#[n(0)] pub data: Vec<u8>,
#[n(1)] pub signature: PurposeKeyAttestationSignature,
}
#[derive(Clone, Debug, PartialEq, Eq, Encode, Decode, CborLen)]
#[rustfmt::skip]
pub enum PurposeKeyAttestationSignature {
#[n(0)] EdDSACurve25519(#[n(0)] EdDSACurve25519Signature),
#[n(1)] ECDSASHA256CurveP256(#[n(0)] ECDSASHA256CurveP256Signature),
}
#[derive(Clone, Debug, PartialEq, Eq, Encode, Decode, CborLen)]
#[rustfmt::skip]
pub struct PurposeKeyAttestationData {
#[n(0)] pub subject: Identifier,
#[n(1)] pub subject_latest_change_hash: ChangeHash,
#[n(2)] pub public_key: PurposePublicKey,
#[n(3)] pub created_at: TimestampInSeconds,
#[n(4)] pub expires_at: TimestampInSeconds,
}
#[derive(Clone, Debug, PartialEq, Eq, Encode, Decode, CborLen)]
#[rustfmt::skip]
pub enum PurposePublicKey {
#[n(0)] SecureChannelStatic(#[n(0)] X25519PublicKey),
#[n(1)] CredentialSigning(#[n(0)] CredentialVerifyingKey),
}
#[derive(Clone, Debug, PartialEq, Eq, Encode, Decode, CborLen)]
#[rustfmt::skip]
pub enum CredentialVerifyingKey {
#[n(0)] EdDSACurve25519(#[n(0)] EdDSACurve25519PublicKey),
#[n(1)] ECDSASHA256CurveP256(#[n(0)] ECDSASHA256CurveP256PublicKey),
}