passkey_types/utils/
encoding.rs1use data_encoding::{BASE64, BASE64_NOPAD, BASE64URL, BASE64URL_NOPAD, Specification};
5
6pub fn base64(data: &[u8]) -> String {
8 BASE64_NOPAD.encode(data)
9}
10
11pub fn base64url(data: &[u8]) -> String {
13 BASE64URL_NOPAD.encode(data)
14}
15
16pub(crate) fn try_from_base64(input: &str) -> Option<Vec<u8>> {
18 let padding = BASE64.specification().padding.unwrap();
19 let sane_string = input.trim_end_matches(padding);
20 BASE64_NOPAD.decode(sane_string.as_bytes()).ok()
21}
22
23pub fn try_from_base64url(input: &str) -> Option<Vec<u8>> {
25 let specs = BASE64URL.specification();
26 let padding = specs.padding.unwrap();
27 let specs = Specification {
28 check_trailing_bits: false,
29 padding: None,
30 ..specs
31 };
32 let encoding = specs.encoding().unwrap();
33 let sane_string = input.trim_end_matches(padding);
34 encoding.decode(sane_string.as_bytes()).ok()
35}