crypto_glue/x509/
serialise.rs1pub mod pkeyb64 {
2 use crate::der::SecretDocument;
3 use base64::{engine::general_purpose, Engine as _};
4 use serde::{de::Error as DeError, Deserialize, Deserializer, Serializer};
5 use tracing::error;
6
7 pub fn serialize<S>(key: &SecretDocument, ser: S) -> Result<S::Ok, S::Error>
8 where
9 S: Serializer,
10 {
11 let s = general_purpose::URL_SAFE_NO_PAD.encode(key.as_bytes());
12
13 ser.serialize_str(&s)
14 }
15
16 pub fn deserialize<'de, D>(des: D) -> Result<SecretDocument, D::Error>
17 where
18 D: Deserializer<'de>,
19 {
20 let raw = <&str>::deserialize(des)?;
21 let s = general_purpose::URL_SAFE_NO_PAD
22 .decode(raw)
23 .or_else(|_| general_purpose::URL_SAFE.decode(raw))
24 .map_err(|err| {
25 error!(?err, "base64 url-safe invalid");
26 D::Error::custom("base64 url-safe invalid")
27 })?;
28
29 SecretDocument::try_from(s.as_slice()).map_err(|err| {
30 error!(?err, "pkey invalid der");
31 D::Error::custom("pkey invalid der")
32 })
33 }
34}
35
36pub mod x509b64 {
37 use crate::{
38 traits::{DecodeDer, EncodeDer},
39 x509::Certificate,
40 };
41 use base64::{engine::general_purpose, Engine as _};
42 use serde::{
43 de::Error as DeError, ser::Error as SerError, Deserialize, Deserializer, Serializer,
44 };
45 use tracing::error;
46
47 pub fn cert_to_string(cert: &Certificate) -> Result<String, crate::der::Error> {
48 cert.to_der()
49 .inspect_err(|err| {
50 error!(?err, "cert to_der");
51 })
52 .map(|der| general_purpose::URL_SAFE_NO_PAD.encode(der))
53 }
54
55 pub fn serialize<S>(cert: &Certificate, ser: S) -> Result<S::Ok, S::Error>
56 where
57 S: Serializer,
58 {
59 let der = cert.to_der().map_err(|err| {
60 error!(?err, "cert to_der");
61 S::Error::custom("cert to_der")
62 })?;
63 let s = general_purpose::URL_SAFE_NO_PAD.encode(der);
64
65 ser.serialize_str(&s)
66 }
67
68 pub fn deserialize<'de, D>(des: D) -> Result<Certificate, D::Error>
69 where
70 D: Deserializer<'de>,
71 {
72 let raw = <String>::deserialize(des)?;
73 let s = general_purpose::URL_SAFE_NO_PAD
74 .decode(&raw)
75 .or_else(|_| general_purpose::URL_SAFE.decode(&raw))
76 .map_err(|err| {
77 error!(?err, "base64 url-safe invalid");
78 D::Error::custom("base64 url-safe invalid")
79 })?;
80
81 Certificate::from_der(&s).map_err(|err| {
82 error!(?err, "x509 invalid der");
83 D::Error::custom("x509 invalid der")
84 })
85 }
86}