1 use super::*;
2
vec_from_base64<'de, D: Deserializer<'de>>(deserializer: D) -> Result<Vec<u8>, D::Error>3 fn vec_from_base64<'de, D: Deserializer<'de>>(deserializer: D) -> Result<Vec<u8>, D::Error> {
4 let s: &str = Deserialize::deserialize(deserializer)?;
5 base64::decode_config(s, base64::URL_SAFE).map_err(D::Error::custom)
6 }
7
8 #[derive(Debug, Clone, Hash, Eq, PartialEq, Deserialize)]
9 #[serde(deny_unknown_fields)]
10 pub struct EcdsaPublicJwk {
11 #[serde(rename = "crv")]
12 pub curve: EllipticCurve,
13 pub kid: String,
14 pub kty: String,
15 #[serde(deserialize_with = "vec_from_base64", rename = "x")]
16 pub affine_x: Vec<u8>,
17 #[serde(deserialize_with = "vec_from_base64", rename = "y")]
18 pub affine_y: Vec<u8>,
19 }
20
21 #[derive(Debug, Clone, Hash, Eq, PartialEq, Deserialize)]
22 #[serde(deny_unknown_fields)]
23 pub struct RsaPublicJwk {
24 pub alg: String,
25 #[serde(deserialize_with = "vec_from_base64")]
26 pub e: Vec<u8>,
27 pub kid: String,
28 pub kty: String,
29 #[serde(deserialize_with = "vec_from_base64")]
30 pub n: Vec<u8>,
31 }
32
33 #[derive(Debug, Clone, Hash, Eq, PartialEq, Deserialize)]
34 #[serde(deny_unknown_fields)]
35 pub struct RsaPrivateJwk {
36 pub alg: String,
37 #[serde(deserialize_with = "vec_from_base64")]
38 pub d: Vec<u8>,
39 #[serde(deserialize_with = "vec_from_base64")]
40 pub dp: Vec<u8>,
41 #[serde(deserialize_with = "vec_from_base64")]
42 pub dq: Vec<u8>,
43 #[serde(deserialize_with = "vec_from_base64")]
44 pub e: Vec<u8>,
45 pub kid: String,
46 pub kty: String,
47 #[serde(deserialize_with = "vec_from_base64")]
48 pub n: Vec<u8>,
49 #[serde(deserialize_with = "vec_from_base64")]
50 pub p: Vec<u8>,
51 #[serde(deserialize_with = "vec_from_base64")]
52 pub q: Vec<u8>,
53 #[serde(deserialize_with = "vec_from_base64")]
54 pub qi: Vec<u8>,
55 }
56
57 #[derive(Debug, Clone, Hash, Eq, PartialEq, Deserialize)]
58 #[serde(deny_unknown_fields)]
59 pub struct EddsaJwk {
60 #[serde(rename = "crv")]
61 pub curve: EdwardsCurve,
62 #[serde(deserialize_with = "vec_from_base64")]
63 pub d: Vec<u8>,
64 pub kid: String,
65 pub kty: String,
66 #[serde(deserialize_with = "vec_from_base64")]
67 pub x: Vec<u8>,
68 }
69