1use serde::{Deserialize, Serialize};
2use std::hash;
3
4use crate::cert::Certificate;
5use crate::encoded_bytes_field::EncodedBytesField;
6use crate::key_operation::KeyOperation;
7use crate::use_case::UseCase;
8
9#[derive(Clone, Debug, Default, Deserialize, Serialize)]
10pub struct EcWebKey {
11 #[serde(flatten, default)]
12 pub cert: Certificate,
13 #[serde(rename = "kid")]
14 pub key_id: Box<str>,
15 pub key_ops: Box<[KeyOperation]>,
16 #[serde(default, flatten)]
17 pub key_type: KeyType,
18 #[serde(rename = "use", default)]
19 pub use_case: UseCase,
20 #[serde(rename = "crv")]
21 pub curve: Box<str>,
22 #[serde(with = "EncodedBytesField")]
23 pub x: Box<[u8]>,
24 #[serde(with = "EncodedBytesField")]
25 pub y: Box<[u8]>,
26}
27
28#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
29#[serde(tag = "kty")]
30pub enum KeyType {
31 #[default]
32 EC,
33}
34
35impl Eq for EcWebKey {}
39
40impl hash::Hash for EcWebKey {
41 fn hash<H: hash::Hasher>(&self, state: &mut H) {
42 self.key_id.hash(state)
43 }
44}
45
46impl PartialEq for EcWebKey {
47 fn eq(&self, other: &Self) -> bool {
48 self.key_id.eq(&other.key_id)
49 }
50}