/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 | | } |