1use serde::{Deserialize, Serialize};
2use std::hash::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 RsaWebKey {
11 #[serde(default, flatten)]
13 pub cert: Certificate,
14 #[serde(rename = "kid")]
15 pub key_id: Box<str>,
16 #[serde(default)]
18 pub key_ops: Box<[KeyOperation]>,
19 #[serde(default, flatten)]
20 pub key_type: KeyType,
21 #[serde(rename = "use", default)]
23 pub use_case: UseCase,
24 #[serde(rename = "e", with = "EncodedBytesField")]
27 pub exponent: Box<[u8]>,
28 #[serde(rename = "n", with = "EncodedBytesField")]
31 pub modulus: Box<[u8]>,
32}
33
34#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
35#[serde(tag = "kty")]
36pub enum KeyType {
37 #[default]
38 RSA,
39}
40
41impl Eq for RsaWebKey {}
45
46impl Hash for RsaWebKey {
47 fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
48 self.key_id.hash(state)
49 }
50}
51
52impl PartialEq for RsaWebKey {
53 fn eq(&self, other: &Self) -> bool {
54 self.key_id.eq(&other.key_id)
55 }
56}