Coverage Report

Created: 2026-02-14 07:12

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/der-0.7.10/src/reader.rs
Line
Count
Source
1
//! Reader trait.
2
3
pub(crate) mod nested;
4
#[cfg(feature = "pem")]
5
pub(crate) mod pem;
6
pub(crate) mod slice;
7
8
pub(crate) use nested::NestedReader;
9
10
use crate::{
11
    asn1::ContextSpecific, Decode, DecodeValue, Encode, Error, ErrorKind, FixedTag, Header, Length,
12
    Result, Tag, TagMode, TagNumber,
13
};
14
15
#[cfg(feature = "alloc")]
16
use alloc::vec::Vec;
17
18
/// Reader trait which reads DER-encoded input.
19
pub trait Reader<'r>: Sized {
20
    /// Get the length of the input.
21
    fn input_len(&self) -> Length;
22
23
    /// Peek at the next byte of input without modifying the cursor.
24
    fn peek_byte(&self) -> Option<u8>;
25
26
    /// Peek forward in the input data, attempting to decode a [`Header`] from
27
    /// the data at the current position in the decoder.
28
    ///
29
    /// Does not modify the decoder's state.
30
    fn peek_header(&self) -> Result<Header>;
31
32
    /// Get the position within the buffer.
33
    fn position(&self) -> Length;
34
35
    /// Attempt to read data borrowed directly from the input as a slice,
36
    /// updating the internal cursor position.
37
    ///
38
    /// # Returns
39
    /// - `Ok(slice)` on success
40
    /// - `Err(ErrorKind::Incomplete)` if there is not enough data
41
    /// - `Err(ErrorKind::Reader)` if the reader can't borrow from the input
42
    fn read_slice(&mut self, len: Length) -> Result<&'r [u8]>;
43
44
    /// Attempt to decode an ASN.1 `CONTEXT-SPECIFIC` field with the
45
    /// provided [`TagNumber`].
46
3.42k
    fn context_specific<T>(&mut self, tag_number: TagNumber, tag_mode: TagMode) -> Result<Option<T>>
47
3.42k
    where
48
3.42k
        T: DecodeValue<'r> + FixedTag,
49
    {
50
3.42k
        Ok(match tag_mode {
51
3.42k
            TagMode::Explicit => ContextSpecific::<T>::decode_explicit(self, tag_number)?,
52
0
            TagMode::Implicit => ContextSpecific::<T>::decode_implicit(self, tag_number)?,
53
        }
54
3.05k
        .map(|field| field.value))
55
3.42k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::context_specific::<alloc::vec::Vec<crypto::x509::Extension>>
Line
Count
Source
46
677
    fn context_specific<T>(&mut self, tag_number: TagNumber, tag_mode: TagMode) -> Result<Option<T>>
47
677
    where
48
677
        T: DecodeValue<'r> + FixedTag,
49
    {
50
677
        Ok(match tag_mode {
51
677
            TagMode::Explicit => ContextSpecific::<T>::decode_explicit(self, tag_number)?,
52
0
            TagMode::Implicit => ContextSpecific::<T>::decode_implicit(self, tag_number)?,
53
        }
54
422
        .map(|field| field.value))
55
677
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::context_specific::<der::asn1::bit_string::BitStringRef>
Line
Count
Source
46
218
    fn context_specific<T>(&mut self, tag_number: TagNumber, tag_mode: TagMode) -> Result<Option<T>>
47
218
    where
48
218
        T: DecodeValue<'r> + FixedTag,
49
    {
50
218
        Ok(match tag_mode {
51
218
            TagMode::Explicit => ContextSpecific::<T>::decode_explicit(self, tag_number)?,
52
0
            TagMode::Implicit => ContextSpecific::<T>::decode_implicit(self, tag_number)?,
53
        }
54
167
        .map(|field| field.value))
55
218
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::context_specific::<der::asn1::integer::uint::UintRef>
Line
Count
Source
46
2.52k
    fn context_specific<T>(&mut self, tag_number: TagNumber, tag_mode: TagMode) -> Result<Option<T>>
47
2.52k
    where
48
2.52k
        T: DecodeValue<'r> + FixedTag,
49
    {
50
2.52k
        Ok(match tag_mode {
51
2.52k
            TagMode::Explicit => ContextSpecific::<T>::decode_explicit(self, tag_number)?,
52
0
            TagMode::Implicit => ContextSpecific::<T>::decode_implicit(self, tag_number)?,
53
        }
54
2.46k
        .map(|field| field.value))
55
2.52k
    }
Unexecuted instantiation: <_ as der::reader::Reader>::context_specific::<_>
56
57
    /// Decode a value which impls the [`Decode`] trait.
58
106k
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
106k
        T::decode(self).map_err(|e| e.nested(self.position()))
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>> as der::reader::Reader>::decode::<core::option::Option<der::asn1::octet_string::OctetStringRef>>::{closure#0}
Line
Count
Source
59
8
        T::decode(self).map_err(|e| e.nested(self.position()))
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>> as der::reader::Reader>::decode::<core::option::Option<bool>>::{closure#0}
Line
Count
Source
59
47
        T::decode(self).map_err(|e| e.nested(self.position()))
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>> as der::reader::Reader>::decode::<const_oid::ObjectIdentifier>::{closure#0}
Line
Count
Source
59
76
        T::decode(self).map_err(|e| e.nested(self.position()))
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>> as der::reader::Reader>::decode::<der::asn1::any::AnyRef>::{closure#0}
Line
Count
Source
59
79
        T::decode(self).map_err(|e| e.nested(self.position()))
Unexecuted instantiation: <der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>> as der::reader::Reader>::decode::<core::option::Option<der::asn1::octet_string::OctetStringRef>>::{closure#0}
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>> as der::reader::Reader>::decode::<core::option::Option<der::asn1::any::AnyRef>>::{closure#0}
Line
Count
Source
59
70
        T::decode(self).map_err(|e| e.nested(self.position()))
Unexecuted instantiation: <der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>> as der::reader::Reader>::decode::<core::option::Option<bool>>::{closure#0}
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>> as der::reader::Reader>::decode::<const_oid::ObjectIdentifier>::{closure#0}
Line
Count
Source
59
55
        T::decode(self).map_err(|e| e.nested(self.position()))
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::decode::<core::option::Option<der::asn1::any::AnyRef>>::{closure#0}
Line
Count
Source
59
31
        T::decode(self).map_err(|e| e.nested(self.position()))
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::decode::<const_oid::ObjectIdentifier>::{closure#0}
Line
Count
Source
59
39
        T::decode(self).map_err(|e| e.nested(self.position()))
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::decode::<crypto::x509::AlgorithmIdentifier>::{closure#0}
Line
Count
Source
59
169
        T::decode(self).map_err(|e| e.nested(self.position()))
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::decode::<crypto::x509::Time>::{closure#0}
Line
Count
Source
59
427
        T::decode(self).map_err(|e| e.nested(self.position()))
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::decode::<der::asn1::bit_string::BitStringRef>::{closure#0}
Line
Count
Source
59
65
        T::decode(self).map_err(|e| e.nested(self.position()))
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::decode::<core::option::Option<crypto::x509::UniqueIdentifier<1>>>::{closure#0}
Line
Count
Source
59
38
        T::decode(self).map_err(|e| e.nested(self.position()))
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::decode::<core::option::Option<crypto::x509::UniqueIdentifier<2>>>::{closure#0}
Line
Count
Source
59
22
        T::decode(self).map_err(|e| e.nested(self.position()))
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::decode::<core::option::Option<crypto::x509::Extensions>>::{closure#0}
Line
Count
Source
59
256
        T::decode(self).map_err(|e| e.nested(self.position()))
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::decode::<core::option::Option<der::asn1::any::AnyRef>>::{closure#0}
Line
Count
Source
59
18
        T::decode(self).map_err(|e| e.nested(self.position()))
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::decode::<alloc::vec::Vec<der::asn1::set_of::SetOfVec<crypto::x509::DistinguishedName>>>::{closure#0}
Line
Count
Source
59
437
        T::decode(self).map_err(|e| e.nested(self.position()))
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::decode::<const_oid::ObjectIdentifier>::{closure#0}
Line
Count
Source
59
51
        T::decode(self).map_err(|e| e.nested(self.position()))
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::decode::<crypto::x509::AlgorithmIdentifier>::{closure#0}
Line
Count
Source
59
116
        T::decode(self).map_err(|e| e.nested(self.position()))
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::decode::<crypto::x509::SubjectPublicKeyInfo>::{closure#0}
Line
Count
Source
59
282
        T::decode(self).map_err(|e| e.nested(self.position()))
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::decode::<crypto::x509::Version>::{closure#0}
Line
Count
Source
59
84
        T::decode(self).map_err(|e| e.nested(self.position()))
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::decode::<crypto::x509::Validity>::{closure#0}
Line
Count
Source
59
500
        T::decode(self).map_err(|e| e.nested(self.position()))
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::decode::<der::asn1::integer::uint::UintRef>::{closure#0}
Line
Count
Source
59
30
        T::decode(self).map_err(|e| e.nested(self.position()))
<der::reader::nested::NestedReader<der::reader::slice::SliceReader> as der::reader::Reader>::decode::<crypto::x509::TBSCertificate>::{closure#0}
Line
Count
Source
59
1.90k
        T::decode(self).map_err(|e| e.nested(self.position()))
<der::reader::nested::NestedReader<der::reader::slice::SliceReader> as der::reader::Reader>::decode::<crypto::x509::AlgorithmIdentifier>::{closure#0}
Line
Count
Source
59
129
        T::decode(self).map_err(|e| e.nested(self.position()))
<der::reader::nested::NestedReader<der::reader::slice::SliceReader> as der::reader::Reader>::decode::<der::asn1::bit_string::BitStringRef>::{closure#0}
Line
Count
Source
59
118
        T::decode(self).map_err(|e| e.nested(self.position()))
Unexecuted instantiation: <_ as der::reader::Reader>::decode::<_>::{closure#0}
60
106k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>> as der::reader::Reader>::decode::<core::option::Option<der::asn1::octet_string::OctetStringRef>>
Line
Count
Source
58
18.1k
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
18.1k
        T::decode(self).map_err(|e| e.nested(self.position()))
60
18.1k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>> as der::reader::Reader>::decode::<core::option::Option<bool>>
Line
Count
Source
58
18.1k
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
18.1k
        T::decode(self).map_err(|e| e.nested(self.position()))
60
18.1k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>> as der::reader::Reader>::decode::<const_oid::ObjectIdentifier>
Line
Count
Source
58
26.4k
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
26.4k
        T::decode(self).map_err(|e| e.nested(self.position()))
60
26.4k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>> as der::reader::Reader>::decode::<der::asn1::any::AnyRef>
Line
Count
Source
58
8.19k
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
8.19k
        T::decode(self).map_err(|e| e.nested(self.position()))
60
8.19k
    }
Unexecuted instantiation: <der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>> as der::reader::Reader>::decode::<core::option::Option<der::asn1::octet_string::OctetStringRef>>
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>> as der::reader::Reader>::decode::<core::option::Option<der::asn1::any::AnyRef>>
Line
Count
Source
58
1.23k
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
1.23k
        T::decode(self).map_err(|e| e.nested(self.position()))
60
1.23k
    }
Unexecuted instantiation: <der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>> as der::reader::Reader>::decode::<core::option::Option<bool>>
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>> as der::reader::Reader>::decode::<const_oid::ObjectIdentifier>
Line
Count
Source
58
1.29k
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
1.29k
        T::decode(self).map_err(|e| e.nested(self.position()))
60
1.29k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::decode::<core::option::Option<der::asn1::any::AnyRef>>
Line
Count
Source
58
2.33k
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
2.33k
        T::decode(self).map_err(|e| e.nested(self.position()))
60
2.33k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::decode::<const_oid::ObjectIdentifier>
Line
Count
Source
58
2.37k
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
2.37k
        T::decode(self).map_err(|e| e.nested(self.position()))
60
2.37k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::decode::<crypto::x509::AlgorithmIdentifier>
Line
Count
Source
58
1.32k
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
1.32k
        T::decode(self).map_err(|e| e.nested(self.position()))
60
1.32k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::decode::<crypto::x509::Time>
Line
Count
Source
58
3.54k
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
3.54k
        T::decode(self).map_err(|e| e.nested(self.position()))
60
3.54k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::decode::<der::asn1::bit_string::BitStringRef>
Line
Count
Source
58
1.15k
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
1.15k
        T::decode(self).map_err(|e| e.nested(self.position()))
60
1.15k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::decode::<core::option::Option<crypto::x509::UniqueIdentifier<1>>>
Line
Count
Source
58
1.07k
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
1.07k
        T::decode(self).map_err(|e| e.nested(self.position()))
60
1.07k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::decode::<core::option::Option<crypto::x509::UniqueIdentifier<2>>>
Line
Count
Source
58
1.04k
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
1.04k
        T::decode(self).map_err(|e| e.nested(self.position()))
60
1.04k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::decode::<core::option::Option<crypto::x509::Extensions>>
Line
Count
Source
58
1.01k
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
1.01k
        T::decode(self).map_err(|e| e.nested(self.position()))
60
1.01k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::decode::<core::option::Option<der::asn1::any::AnyRef>>
Line
Count
Source
58
605
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
605
        T::decode(self).map_err(|e| e.nested(self.position()))
60
605
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::decode::<alloc::vec::Vec<der::asn1::set_of::SetOfVec<crypto::x509::DistinguishedName>>>
Line
Count
Source
58
3.74k
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
3.74k
        T::decode(self).map_err(|e| e.nested(self.position()))
60
3.74k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::decode::<const_oid::ObjectIdentifier>
Line
Count
Source
58
656
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
656
        T::decode(self).map_err(|e| e.nested(self.position()))
60
656
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::decode::<crypto::x509::AlgorithmIdentifier>
Line
Count
Source
58
2.41k
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
2.41k
        T::decode(self).map_err(|e| e.nested(self.position()))
60
2.41k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::decode::<crypto::x509::SubjectPublicKeyInfo>
Line
Count
Source
58
1.36k
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
1.36k
        T::decode(self).map_err(|e| e.nested(self.position()))
60
1.36k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::decode::<crypto::x509::Version>
Line
Count
Source
58
2.52k
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
2.52k
        T::decode(self).map_err(|e| e.nested(self.position()))
60
2.52k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::decode::<crypto::x509::Validity>
Line
Count
Source
58
1.94k
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
1.94k
        T::decode(self).map_err(|e| e.nested(self.position()))
60
1.94k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::decode::<der::asn1::integer::uint::UintRef>
Line
Count
Source
58
2.44k
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
2.44k
        T::decode(self).map_err(|e| e.nested(self.position()))
60
2.44k
    }
<der::reader::nested::NestedReader<der::reader::slice::SliceReader> as der::reader::Reader>::decode::<crypto::x509::TBSCertificate>
Line
Count
Source
58
2.59k
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
2.59k
        T::decode(self).map_err(|e| e.nested(self.position()))
60
2.59k
    }
<der::reader::nested::NestedReader<der::reader::slice::SliceReader> as der::reader::Reader>::decode::<crypto::x509::AlgorithmIdentifier>
Line
Count
Source
58
692
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
692
        T::decode(self).map_err(|e| e.nested(self.position()))
60
692
    }
<der::reader::nested::NestedReader<der::reader::slice::SliceReader> as der::reader::Reader>::decode::<der::asn1::bit_string::BitStringRef>
Line
Count
Source
58
563
    fn decode<T: Decode<'r>>(&mut self) -> Result<T> {
59
563
        T::decode(self).map_err(|e| e.nested(self.position()))
60
563
    }
Unexecuted instantiation: <_ as der::reader::Reader>::decode::<_>
61
62
    /// Return an error with the given [`ErrorKind`], annotating it with
63
    /// context about where the error occurred.
64
0
    fn error(&mut self, kind: ErrorKind) -> Error {
65
0
        kind.at(self.position())
66
0
    }
67
68
    /// Finish decoding, returning the given value if there is no
69
    /// remaining data, or an error otherwise
70
64.1k
    fn finish<T>(self, value: T) -> Result<T> {
71
64.1k
        if !self.is_finished() {
72
258
            Err(ErrorKind::TrailingData {
73
258
                decoded: self.position(),
74
258
                remaining: self.remaining_len(),
75
258
            }
76
258
            .at(self.position()))
77
        } else {
78
63.8k
            Ok(value)
79
        }
80
64.1k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>> as der::reader::Reader>::finish::<crypto::x509::DistinguishedName>
Line
Count
Source
70
8.11k
    fn finish<T>(self, value: T) -> Result<T> {
71
8.11k
        if !self.is_finished() {
72
5
            Err(ErrorKind::TrailingData {
73
5
                decoded: self.position(),
74
5
                remaining: self.remaining_len(),
75
5
            }
76
5
            .at(self.position()))
77
        } else {
78
8.10k
            Ok(value)
79
        }
80
8.11k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>> as der::reader::Reader>::finish::<crypto::x509::Extension>
Line
Count
Source
70
18.1k
    fn finish<T>(self, value: T) -> Result<T> {
71
18.1k
        if !self.is_finished() {
72
21
            Err(ErrorKind::TrailingData {
73
21
                decoded: self.position(),
74
21
                remaining: self.remaining_len(),
75
21
            }
76
21
            .at(self.position()))
77
        } else {
78
18.1k
            Ok(value)
79
        }
80
18.1k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>> as der::reader::Reader>::finish::<alloc::vec::Vec<crypto::x509::Extension>>
Line
Count
Source
70
471
    fn finish<T>(self, value: T) -> Result<T> {
71
471
        if !self.is_finished() {
72
0
            Err(ErrorKind::TrailingData {
73
0
                decoded: self.position(),
74
0
                remaining: self.remaining_len(),
75
0
            }
76
0
            .at(self.position()))
77
        } else {
78
471
            Ok(value)
79
        }
80
471
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>> as der::reader::Reader>::finish::<der::asn1::set_of::SetOfVec<crypto::x509::DistinguishedName>>
Line
Count
Source
70
22.6k
    fn finish<T>(self, value: T) -> Result<T> {
71
22.6k
        if !self.is_finished() {
72
0
            Err(ErrorKind::TrailingData {
73
0
                decoded: self.position(),
74
0
                remaining: self.remaining_len(),
75
0
            }
76
0
            .at(self.position()))
77
        } else {
78
22.6k
            Ok(value)
79
        }
80
22.6k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>> as der::reader::Reader>::finish::<crypto::x509::AlgorithmIdentifier>
Line
Count
Source
70
1.16k
    fn finish<T>(self, value: T) -> Result<T> {
71
1.16k
        if !self.is_finished() {
72
6
            Err(ErrorKind::TrailingData {
73
6
                decoded: self.position(),
74
6
                remaining: self.remaining_len(),
75
6
            }
76
6
            .at(self.position()))
77
        } else {
78
1.15k
            Ok(value)
79
        }
80
1.16k
    }
Unexecuted instantiation: <der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>> as der::reader::Reader>::finish::<crypto::x509::Extension>
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::finish::<alloc::vec::Vec<der::asn1::set_of::SetOfVec<crypto::x509::DistinguishedName>>>
Line
Count
Source
70
3.31k
    fn finish<T>(self, value: T) -> Result<T> {
71
3.31k
        if !self.is_finished() {
72
0
            Err(ErrorKind::TrailingData {
73
0
                decoded: self.position(),
74
0
                remaining: self.remaining_len(),
75
0
            }
76
0
            .at(self.position()))
77
        } else {
78
3.31k
            Ok(value)
79
        }
80
3.31k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::finish::<alloc::vec::Vec<crypto::x509::Extension>>
Line
Count
Source
70
471
    fn finish<T>(self, value: T) -> Result<T> {
71
471
        if !self.is_finished() {
72
49
            Err(ErrorKind::TrailingData {
73
49
                decoded: self.position(),
74
49
                remaining: self.remaining_len(),
75
49
            }
76
49
            .at(self.position()))
77
        } else {
78
422
            Ok(value)
79
        }
80
471
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::finish::<crypto::x509::AlgorithmIdentifier>
Line
Count
Source
70
2.30k
    fn finish<T>(self, value: T) -> Result<T> {
71
2.30k
        if !self.is_finished() {
72
10
            Err(ErrorKind::TrailingData {
73
10
                decoded: self.position(),
74
10
                remaining: self.remaining_len(),
75
10
            }
76
10
            .at(self.position()))
77
        } else {
78
2.29k
            Ok(value)
79
        }
80
2.30k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::finish::<crypto::x509::SubjectPublicKeyInfo>
Line
Count
Source
70
1.09k
    fn finish<T>(self, value: T) -> Result<T> {
71
1.09k
        if !self.is_finished() {
72
15
            Err(ErrorKind::TrailingData {
73
15
                decoded: self.position(),
74
15
                remaining: self.remaining_len(),
75
15
            }
76
15
            .at(self.position()))
77
        } else {
78
1.07k
            Ok(value)
79
        }
80
1.09k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::finish::<crypto::x509::Validity>
Line
Count
Source
70
1.45k
    fn finish<T>(self, value: T) -> Result<T> {
71
1.45k
        if !self.is_finished() {
72
6
            Err(ErrorKind::TrailingData {
73
6
                decoded: self.position(),
74
6
                remaining: self.remaining_len(),
75
6
            }
76
6
            .at(self.position()))
77
        } else {
78
1.44k
            Ok(value)
79
        }
80
1.45k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::finish::<der::asn1::bit_string::BitStringRef>
Line
Count
Source
70
178
    fn finish<T>(self, value: T) -> Result<T> {
71
178
        if !self.is_finished() {
72
11
            Err(ErrorKind::TrailingData {
73
11
                decoded: self.position(),
74
11
                remaining: self.remaining_len(),
75
11
            }
76
11
            .at(self.position()))
77
        } else {
78
167
            Ok(value)
79
        }
80
178
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::finish::<der::asn1::integer::uint::UintRef>
Line
Count
Source
70
2.45k
    fn finish<T>(self, value: T) -> Result<T> {
71
2.45k
        if !self.is_finished() {
72
9
            Err(ErrorKind::TrailingData {
73
9
                decoded: self.position(),
74
9
                remaining: self.remaining_len(),
75
9
            }
76
9
            .at(self.position()))
77
        } else {
78
2.44k
            Ok(value)
79
        }
80
2.45k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::finish::<crypto::x509::TBSCertificate>
Line
Count
Source
70
763
    fn finish<T>(self, value: T) -> Result<T> {
71
763
        if !self.is_finished() {
72
71
            Err(ErrorKind::TrailingData {
73
71
                decoded: self.position(),
74
71
                remaining: self.remaining_len(),
75
71
            }
76
71
            .at(self.position()))
77
        } else {
78
692
            Ok(value)
79
        }
80
763
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::finish::<crypto::x509::AlgorithmIdentifier>
Line
Count
Source
70
587
    fn finish<T>(self, value: T) -> Result<T> {
71
587
        if !self.is_finished() {
72
24
            Err(ErrorKind::TrailingData {
73
24
                decoded: self.position(),
74
24
                remaining: self.remaining_len(),
75
24
            }
76
24
            .at(self.position()))
77
        } else {
78
563
            Ok(value)
79
        }
80
587
    }
<der::reader::nested::NestedReader<der::reader::slice::SliceReader> as der::reader::Reader>::finish::<alloc::vec::Vec<const_oid::ObjectIdentifier>>
Line
Count
Source
70
512
    fn finish<T>(self, value: T) -> Result<T> {
71
512
        if !self.is_finished() {
72
0
            Err(ErrorKind::TrailingData {
73
0
                decoded: self.position(),
74
0
                remaining: self.remaining_len(),
75
0
            }
76
0
            .at(self.position()))
77
        } else {
78
512
            Ok(value)
79
        }
80
512
    }
<der::reader::nested::NestedReader<der::reader::slice::SliceReader> as der::reader::Reader>::finish::<crypto::x509::Certificate>
Line
Count
Source
70
445
    fn finish<T>(self, value: T) -> Result<T> {
71
445
        if !self.is_finished() {
72
31
            Err(ErrorKind::TrailingData {
73
31
                decoded: self.position(),
74
31
                remaining: self.remaining_len(),
75
31
            }
76
31
            .at(self.position()))
77
        } else {
78
414
            Ok(value)
79
        }
80
445
    }
Unexecuted instantiation: <_ as der::reader::Reader>::finish::<_>
81
82
    /// Have we read all of the input data?
83
245k
    fn is_finished(&self) -> bool {
84
245k
        self.remaining_len().is_zero()
85
245k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>> as der::reader::Reader>::is_finished
Line
Count
Source
83
62.6k
    fn is_finished(&self) -> bool {
84
62.6k
        self.remaining_len().is_zero()
85
62.6k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>> as der::reader::Reader>::is_finished
Line
Count
Source
83
83.3k
    fn is_finished(&self) -> bool {
84
83.3k
        self.remaining_len().is_zero()
85
83.3k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::is_finished
Line
Count
Source
83
52.5k
    fn is_finished(&self) -> bool {
84
52.5k
        self.remaining_len().is_zero()
85
52.5k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::is_finished
Line
Count
Source
83
22.4k
    fn is_finished(&self) -> bool {
84
22.4k
        self.remaining_len().is_zero()
85
22.4k
    }
<der::reader::nested::NestedReader<der::reader::slice::SliceReader> as der::reader::Reader>::is_finished
Line
Count
Source
83
23.8k
    fn is_finished(&self) -> bool {
84
23.8k
        self.remaining_len().is_zero()
85
23.8k
    }
<der::reader::slice::SliceReader as der::reader::Reader>::is_finished
Line
Count
Source
83
926
    fn is_finished(&self) -> bool {
84
926
        self.remaining_len().is_zero()
85
926
    }
86
87
    /// Offset within the original input stream.
88
    ///
89
    /// This is used for error reporting, and doesn't need to be overridden
90
    /// by any reader implementations (except for the built-in `NestedReader`,
91
    /// which consumes nested input messages)
92
2.09k
    fn offset(&self) -> Length {
93
2.09k
        self.position()
94
2.09k
    }
<der::reader::slice::SliceReader as der::reader::Reader>::offset
Line
Count
Source
92
2.09k
    fn offset(&self) -> Length {
93
2.09k
        self.position()
94
2.09k
    }
Unexecuted instantiation: <_ as der::reader::Reader>::offset
95
96
    /// Peek at the next byte in the decoder and attempt to decode it as a
97
    /// [`Tag`] value.
98
    ///
99
    /// Does not modify the decoder's state.
100
3.54k
    fn peek_tag(&self) -> Result<Tag> {
101
3.54k
        match self.peek_byte() {
102
3.53k
            Some(byte) => byte.try_into(),
103
4
            None => Err(Error::incomplete(self.input_len())),
104
        }
105
3.54k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::peek_tag
Line
Count
Source
100
3.54k
    fn peek_tag(&self) -> Result<Tag> {
101
3.54k
        match self.peek_byte() {
102
3.53k
            Some(byte) => byte.try_into(),
103
4
            None => Err(Error::incomplete(self.input_len())),
104
        }
105
3.54k
    }
Unexecuted instantiation: <_ as der::reader::Reader>::peek_tag
106
107
    /// Read a single byte.
108
279k
    fn read_byte(&mut self) -> Result<u8> {
109
279k
        let mut buf = [0];
110
279k
        self.read_into(&mut buf)?;
111
279k
        Ok(buf[0])
112
279k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>> as der::reader::Reader>::read_byte
Line
Count
Source
108
82.3k
    fn read_byte(&mut self) -> Result<u8> {
109
82.3k
        let mut buf = [0];
110
82.3k
        self.read_into(&mut buf)?;
111
82.3k
        Ok(buf[0])
112
82.3k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>> as der::reader::Reader>::read_byte
Line
Count
Source
108
58.6k
    fn read_byte(&mut self) -> Result<u8> {
109
58.6k
        let mut buf = [0];
110
58.6k
        self.read_into(&mut buf)?;
111
58.6k
        Ok(buf[0])
112
58.6k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::read_byte
Line
Count
Source
108
75.6k
    fn read_byte(&mut self) -> Result<u8> {
109
75.6k
        let mut buf = [0];
110
75.6k
        self.read_into(&mut buf)?;
111
75.6k
        Ok(buf[0])
112
75.6k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::read_byte
Line
Count
Source
108
34.2k
    fn read_byte(&mut self) -> Result<u8> {
109
34.2k
        let mut buf = [0];
110
34.2k
        self.read_into(&mut buf)?;
111
34.1k
        Ok(buf[0])
112
34.2k
    }
<der::reader::nested::NestedReader<der::reader::slice::SliceReader> as der::reader::Reader>::read_byte
Line
Count
Source
108
16.1k
    fn read_byte(&mut self) -> Result<u8> {
109
16.1k
        let mut buf = [0];
110
16.1k
        self.read_into(&mut buf)?;
111
16.1k
        Ok(buf[0])
112
16.1k
    }
<der::reader::slice::SliceReader as der::reader::Reader>::read_byte
Line
Count
Source
108
12.6k
    fn read_byte(&mut self) -> Result<u8> {
109
12.6k
        let mut buf = [0];
110
12.6k
        self.read_into(&mut buf)?;
111
12.6k
        Ok(buf[0])
112
12.6k
    }
113
114
    /// Attempt to read input data, writing it into the provided buffer, and
115
    /// returning a slice on success.
116
    ///
117
    /// # Returns
118
    /// - `Ok(slice)` if there is sufficient data
119
    /// - `Err(ErrorKind::Incomplete)` if there is not enough data
120
315k
    fn read_into<'o>(&mut self, buf: &'o mut [u8]) -> Result<&'o [u8]> {
121
315k
        let input = self.read_slice(buf.len().try_into()?)?;
122
315k
        buf.copy_from_slice(input);
123
315k
        Ok(buf)
124
315k
    }
125
126
    /// Read nested data of the given length.
127
70.6k
    fn read_nested<'n, T, F>(&'n mut self, len: Length, f: F) -> Result<T>
128
70.6k
    where
129
70.6k
        F: FnOnce(&mut NestedReader<'n, Self>) -> Result<T>,
130
    {
131
70.6k
        let mut reader = NestedReader::new(self, len)?;
132
70.3k
        let ret = f(&mut reader)?;
133
64.1k
        reader.finish(ret)
134
70.6k
    }
<der::reader::slice::SliceReader as der::reader::Reader>::read_nested::<alloc::vec::Vec<const_oid::ObjectIdentifier>, <alloc::vec::Vec<const_oid::ObjectIdentifier> as der::decode::DecodeValue>::decode_value<der::reader::slice::SliceReader>::{closure#0}>
Line
Count
Source
127
709
    fn read_nested<'n, T, F>(&'n mut self, len: Length, f: F) -> Result<T>
128
709
    where
129
709
        F: FnOnce(&mut NestedReader<'n, Self>) -> Result<T>,
130
    {
131
709
        let mut reader = NestedReader::new(self, len)?;
132
652
        let ret = f(&mut reader)?;
133
512
        reader.finish(ret)
134
709
    }
<der::reader::slice::SliceReader as der::reader::Reader>::read_nested::<crypto::x509::Certificate, <crypto::x509::Certificate as der::decode::DecodeValue>::decode_value<der::reader::slice::SliceReader>::{closure#0}>
Line
Count
Source
127
2.59k
    fn read_nested<'n, T, F>(&'n mut self, len: Length, f: F) -> Result<T>
128
2.59k
    where
129
2.59k
        F: FnOnce(&mut NestedReader<'n, Self>) -> Result<T>,
130
    {
131
2.59k
        let mut reader = NestedReader::new(self, len)?;
132
2.59k
        let ret = f(&mut reader)?;
133
445
        reader.finish(ret)
134
2.59k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>> as der::reader::Reader>::read_nested::<crypto::x509::DistinguishedName, <crypto::x509::DistinguishedName as der::decode::DecodeValue>::decode_value<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>>::{closure#0}>
Line
Count
Source
127
8.27k
    fn read_nested<'n, T, F>(&'n mut self, len: Length, f: F) -> Result<T>
128
8.27k
    where
129
8.27k
        F: FnOnce(&mut NestedReader<'n, Self>) -> Result<T>,
130
    {
131
8.27k
        let mut reader = NestedReader::new(self, len)?;
132
8.24k
        let ret = f(&mut reader)?;
133
8.11k
        reader.finish(ret)
134
8.27k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>> as der::reader::Reader>::read_nested::<crypto::x509::Extension, <crypto::x509::Extension as der::decode::DecodeValue>::decode_value<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>>::{closure#0}>
Line
Count
Source
127
18.2k
    fn read_nested<'n, T, F>(&'n mut self, len: Length, f: F) -> Result<T>
128
18.2k
    where
129
18.2k
        F: FnOnce(&mut NestedReader<'n, Self>) -> Result<T>,
130
    {
131
18.2k
        let mut reader = NestedReader::new(self, len)?;
132
18.2k
        let ret = f(&mut reader)?;
133
18.1k
        reader.finish(ret)
134
18.2k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::read_nested::<alloc::vec::Vec<crypto::x509::Extension>, <alloc::vec::Vec<crypto::x509::Extension> as der::decode::DecodeValue>::decode_value<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>::{closure#0}>
Line
Count
Source
127
651
    fn read_nested<'n, T, F>(&'n mut self, len: Length, f: F) -> Result<T>
128
651
    where
129
651
        F: FnOnce(&mut NestedReader<'n, Self>) -> Result<T>,
130
    {
131
651
        let mut reader = NestedReader::new(self, len)?;
132
626
        let ret = f(&mut reader)?;
133
471
        reader.finish(ret)
134
651
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::read_nested::<der::asn1::set_of::SetOfVec<crypto::x509::DistinguishedName>, <der::asn1::set_of::SetOfVec<crypto::x509::DistinguishedName> as der::decode::DecodeValue>::decode_value<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>::{closure#0}>
Line
Count
Source
127
22.9k
    fn read_nested<'n, T, F>(&'n mut self, len: Length, f: F) -> Result<T>
128
22.9k
    where
129
22.9k
        F: FnOnce(&mut NestedReader<'n, Self>) -> Result<T>,
130
    {
131
22.9k
        let mut reader = NestedReader::new(self, len)?;
132
22.8k
        let ret = f(&mut reader)?;
133
22.6k
        reader.finish(ret)
134
22.9k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::read_nested::<crypto::x509::AlgorithmIdentifier, <crypto::x509::AlgorithmIdentifier as der::decode::DecodeValue>::decode_value<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>::{closure#0}>
Line
Count
Source
127
1.31k
    fn read_nested<'n, T, F>(&'n mut self, len: Length, f: F) -> Result<T>
128
1.31k
    where
129
1.31k
        F: FnOnce(&mut NestedReader<'n, Self>) -> Result<T>,
130
    {
131
1.31k
        let mut reader = NestedReader::new(self, len)?;
132
1.29k
        let ret = f(&mut reader)?;
133
1.16k
        reader.finish(ret)
134
1.31k
    }
Unexecuted instantiation: <der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::read_nested::<crypto::x509::Extension, <crypto::x509::Extension as der::decode::DecodeValue>::decode_value<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>::{closure#0}>
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::read_nested::<alloc::vec::Vec<der::asn1::set_of::SetOfVec<crypto::x509::DistinguishedName>>, <alloc::vec::Vec<der::asn1::set_of::SetOfVec<crypto::x509::DistinguishedName>> as der::decode::DecodeValue>::decode_value<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>::{closure#0}>
Line
Count
Source
127
3.71k
    fn read_nested<'n, T, F>(&'n mut self, len: Length, f: F) -> Result<T>
128
3.71k
    where
129
3.71k
        F: FnOnce(&mut NestedReader<'n, Self>) -> Result<T>,
130
    {
131
3.71k
        let mut reader = NestedReader::new(self, len)?;
132
3.69k
        let ret = f(&mut reader)?;
133
3.31k
        reader.finish(ret)
134
3.71k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::read_nested::<alloc::vec::Vec<crypto::x509::Extension>, <der::asn1::context_specific::ContextSpecific<alloc::vec::Vec<crypto::x509::Extension>> as der::decode::Decode>::decode<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>::{closure#0}>
Line
Count
Source
127
667
    fn read_nested<'n, T, F>(&'n mut self, len: Length, f: F) -> Result<T>
128
667
    where
129
667
        F: FnOnce(&mut NestedReader<'n, Self>) -> Result<T>,
130
    {
131
667
        let mut reader = NestedReader::new(self, len)?;
132
658
        let ret = f(&mut reader)?;
133
471
        reader.finish(ret)
134
667
    }
Unexecuted instantiation: <der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::read_nested::<alloc::vec::Vec<crypto::x509::Extension>, <alloc::vec::Vec<crypto::x509::Extension> as der::decode::DecodeValue>::decode_value<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>::{closure#0}>
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::read_nested::<crypto::x509::AlgorithmIdentifier, <crypto::x509::AlgorithmIdentifier as der::decode::DecodeValue>::decode_value<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>::{closure#0}>
Line
Count
Source
127
2.38k
    fn read_nested<'n, T, F>(&'n mut self, len: Length, f: F) -> Result<T>
128
2.38k
    where
129
2.38k
        F: FnOnce(&mut NestedReader<'n, Self>) -> Result<T>,
130
    {
131
2.38k
        let mut reader = NestedReader::new(self, len)?;
132
2.37k
        let ret = f(&mut reader)?;
133
2.30k
        reader.finish(ret)
134
2.38k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::read_nested::<crypto::x509::SubjectPublicKeyInfo, <crypto::x509::SubjectPublicKeyInfo as der::decode::DecodeValue>::decode_value<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>::{closure#0}>
Line
Count
Source
127
1.33k
    fn read_nested<'n, T, F>(&'n mut self, len: Length, f: F) -> Result<T>
128
1.33k
    where
129
1.33k
        F: FnOnce(&mut NestedReader<'n, Self>) -> Result<T>,
130
    {
131
1.33k
        let mut reader = NestedReader::new(self, len)?;
132
1.32k
        let ret = f(&mut reader)?;
133
1.09k
        reader.finish(ret)
134
1.33k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::read_nested::<crypto::x509::Validity, <crypto::x509::Validity as der::decode::DecodeValue>::decode_value<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>::{closure#0}>
Line
Count
Source
127
1.89k
    fn read_nested<'n, T, F>(&'n mut self, len: Length, f: F) -> Result<T>
128
1.89k
    where
129
1.89k
        F: FnOnce(&mut NestedReader<'n, Self>) -> Result<T>,
130
    {
131
1.89k
        let mut reader = NestedReader::new(self, len)?;
132
1.88k
        let ret = f(&mut reader)?;
133
1.45k
        reader.finish(ret)
134
1.89k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::read_nested::<der::asn1::bit_string::BitStringRef, <der::asn1::context_specific::ContextSpecific<der::asn1::bit_string::BitStringRef> as der::decode::Decode>::decode<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>::{closure#0}>
Line
Count
Source
127
212
    fn read_nested<'n, T, F>(&'n mut self, len: Length, f: F) -> Result<T>
128
212
    where
129
212
        F: FnOnce(&mut NestedReader<'n, Self>) -> Result<T>,
130
    {
131
212
        let mut reader = NestedReader::new(self, len)?;
132
206
        let ret = f(&mut reader)?;
133
178
        reader.finish(ret)
134
212
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::read_nested::<der::asn1::integer::uint::UintRef, <der::asn1::context_specific::ContextSpecific<der::asn1::integer::uint::UintRef> as der::decode::Decode>::decode<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>::{closure#0}>
Line
Count
Source
127
2.49k
    fn read_nested<'n, T, F>(&'n mut self, len: Length, f: F) -> Result<T>
128
2.49k
    where
129
2.49k
        F: FnOnce(&mut NestedReader<'n, Self>) -> Result<T>,
130
    {
131
2.49k
        let mut reader = NestedReader::new(self, len)?;
132
2.47k
        let ret = f(&mut reader)?;
133
2.45k
        reader.finish(ret)
134
2.49k
    }
<der::reader::nested::NestedReader<der::reader::slice::SliceReader> as der::reader::Reader>::read_nested::<crypto::x509::TBSCertificate, <crypto::x509::TBSCertificate as der::decode::DecodeValue>::decode_value<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>::{closure#0}>
Line
Count
Source
127
2.55k
    fn read_nested<'n, T, F>(&'n mut self, len: Length, f: F) -> Result<T>
128
2.55k
    where
129
2.55k
        F: FnOnce(&mut NestedReader<'n, Self>) -> Result<T>,
130
    {
131
2.55k
        let mut reader = NestedReader::new(self, len)?;
132
2.52k
        let ret = f(&mut reader)?;
133
763
        reader.finish(ret)
134
2.55k
    }
<der::reader::nested::NestedReader<der::reader::slice::SliceReader> as der::reader::Reader>::read_nested::<crypto::x509::AlgorithmIdentifier, <crypto::x509::AlgorithmIdentifier as der::decode::DecodeValue>::decode_value<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>::{closure#0}>
Line
Count
Source
127
681
    fn read_nested<'n, T, F>(&'n mut self, len: Length, f: F) -> Result<T>
128
681
    where
129
681
        F: FnOnce(&mut NestedReader<'n, Self>) -> Result<T>,
130
    {
131
681
        let mut reader = NestedReader::new(self, len)?;
132
656
        let ret = f(&mut reader)?;
133
587
        reader.finish(ret)
134
681
    }
Unexecuted instantiation: <_ as der::reader::Reader>::read_nested::<_, _>
135
136
    /// Read a byte vector of the given length.
137
    #[cfg(feature = "alloc")]
138
0
    fn read_vec(&mut self, len: Length) -> Result<Vec<u8>> {
139
0
        let mut bytes = vec![0u8; usize::try_from(len)?];
140
0
        self.read_into(&mut bytes)?;
141
0
        Ok(bytes)
142
0
    }
143
144
    /// Get the number of bytes still remaining in the buffer.
145
312k
    fn remaining_len(&self) -> Length {
146
312k
        debug_assert!(self.position() <= self.input_len());
147
312k
        self.input_len().saturating_sub(self.position())
148
312k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>> as der::reader::Reader>::remaining_len
Line
Count
Source
145
62.6k
    fn remaining_len(&self) -> Length {
146
62.6k
        debug_assert!(self.position() <= self.input_len());
147
62.6k
        self.input_len().saturating_sub(self.position())
148
62.6k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>> as der::reader::Reader>::remaining_len
Line
Count
Source
145
109k
    fn remaining_len(&self) -> Length {
146
109k
        debug_assert!(self.position() <= self.input_len());
147
109k
        self.input_len().saturating_sub(self.position())
148
109k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::remaining_len
Line
Count
Source
145
77.6k
    fn remaining_len(&self) -> Length {
146
77.6k
        debug_assert!(self.position() <= self.input_len());
147
77.6k
        self.input_len().saturating_sub(self.position())
148
77.6k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::remaining_len
Line
Count
Source
145
35.3k
    fn remaining_len(&self) -> Length {
146
35.3k
        debug_assert!(self.position() <= self.input_len());
147
35.3k
        self.input_len().saturating_sub(self.position())
148
35.3k
    }
<der::reader::nested::NestedReader<der::reader::slice::SliceReader> as der::reader::Reader>::remaining_len
Line
Count
Source
145
27.2k
    fn remaining_len(&self) -> Length {
146
27.2k
        debug_assert!(self.position() <= self.input_len());
147
27.2k
        self.input_len().saturating_sub(self.position())
148
27.2k
    }
Unexecuted instantiation: <_ as der::reader::Reader>::remaining_len
149
150
    /// Read an ASN.1 `SEQUENCE`, creating a nested [`Reader`] for the body and
151
    /// calling the provided closure with it.
152
0
    fn sequence<'n, F, T>(&'n mut self, f: F) -> Result<T>
153
0
    where
154
0
        F: FnOnce(&mut NestedReader<'n, Self>) -> Result<T>,
155
    {
156
0
        let header = Header::decode(self)?;
157
0
        header.tag.assert_eq(Tag::Sequence)?;
158
0
        self.read_nested(header.length, f)
159
0
    }
160
161
    /// Obtain a slice of bytes contain a complete TLV production suitable for parsing later.
162
0
    fn tlv_bytes(&mut self) -> Result<&'r [u8]> {
163
0
        let header = self.peek_header()?;
164
0
        let header_len = header.encoded_len()?;
165
0
        self.read_slice((header_len + header.length)?)
166
0
    }
167
}