ssh_encoding/base64/reader.rs
1//! Base64 reader support (constant-time).
2
3use crate::{Decode, Error, Reader, Result};
4
5/// Inner constant-time Base64 reader type from the `base64ct` crate.
6type Inner<'i> = base64ct::Decoder<'i, base64ct::Base64>;
7
8/// Constant-time Base64 reader implementation.
9pub struct Base64Reader<'i> {
10 /// Inner Base64 reader.
11 inner: Inner<'i>,
12
13 /// Custom length of remaining data, used for nested length-prefixed reading.
14 remaining_len: usize,
15}
16
17impl<'i> Base64Reader<'i> {
18 /// Create a new Base64 reader for a byte slice containing contiguous (non-newline-delimited)
19 /// Base64-encoded data.
20 ///
21 /// # Returns
22 /// - `Ok(reader)` on success.
23 /// - `Err(Error::Base64)` if the input buffer is empty.
24 pub fn new(input: &'i [u8]) -> Result<Self> {
25 let inner = Inner::new(input)?;
26 let remaining_len = inner.remaining_len();
27
28 Ok(Self {
29 inner,
30 remaining_len,
31 })
32 }
33}
34
35impl_reader_for_newtype!(Base64Reader<'_>);