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