use serde::{Deserialize, Serialize};
use std::hash;
use crate::cert::Certificate;
use crate::encoded_bytes_field::EncodedBytesField;
use crate::key_operation::KeyOperation;
use crate::use_case::UseCase;
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct EcWebKey {
#[serde(flatten, default)]
pub cert: Certificate,
#[serde(rename = "kid")]
pub key_id: Box<str>,
pub key_ops: Box<[KeyOperation]>,
#[serde(default, flatten)]
pub key_type: KeyType,
#[serde(rename = "use", default)]
pub use_case: UseCase,
#[serde(rename = "crv")]
pub curve: Box<str>,
#[serde(with = "EncodedBytesField")]
pub x: Box<[u8]>,
#[serde(with = "EncodedBytesField")]
pub y: Box<[u8]>,
}
#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
#[serde(tag = "kty")]
pub enum KeyType {
#[default]
EC,
}
impl Eq for EcWebKey {}
impl hash::Hash for EcWebKey {
fn hash<H: hash::Hasher>(&self, state: &mut H) {
self.key_id.hash(state)
}
}
impl PartialEq for EcWebKey {
fn eq(&self, other: &Self) -> bool {
self.key_id.eq(&other.key_id)
}
}