/rust/registry/src/index.crates.io-1949cf8c6b5b557f/kerberos-parser-0.8.0/src/krb5_parser.rs
Line | Count | Source |
1 | | //! Kerberos 5 parsing functions |
2 | | |
3 | | use der_parser::asn1_rs::{ |
4 | | BitString, Class, Error, FromDer, GeneralString, GeneralizedTime, OptTaggedParser, ParseResult, |
5 | | Sequence, TaggedExplicit, TaggedParser, |
6 | | }; |
7 | | use der_parser::ber::*; |
8 | | use nom::combinator::{map, verify}; |
9 | | use nom::{Err, IResult}; |
10 | | |
11 | | use crate::krb5::*; |
12 | | use Class::ContextSpecific as CS; |
13 | | |
14 | | /// Parse a signed 32 bits integer |
15 | | /// |
16 | | /// <pre> |
17 | | /// Int32 ::= INTEGER (-2147483648..2147483647) |
18 | | /// -- signed values representable in 32 bits |
19 | | /// </pre> |
20 | | #[inline] |
21 | 0 | pub fn parse_der_int32(i: &[u8]) -> IResult<&[u8], i32, Error> { |
22 | 0 | i32::from_der(i) |
23 | 0 | } Unexecuted instantiation: kerberos_parser::krb5_parser::parse_der_int32 Unexecuted instantiation: kerberos_parser::krb5_parser::parse_der_int32 |
24 | | |
25 | | // Microseconds ::= INTEGER (0..999999) |
26 | | // -- microseconds |
27 | 2.68k | fn parse_der_microseconds(i: &[u8]) -> IResult<&[u8], u32, Error> { |
28 | 2.68k | verify(u32::from_der, |x: &u32| *x <= 999_999)(i) kerberos_parser::krb5_parser::parse_der_microseconds::{closure#0}Line | Count | Source | 28 | 1 | verify(u32::from_der, |x: &u32| *x <= 999_999)(i) |
kerberos_parser::krb5_parser::parse_der_microseconds::{closure#0}Line | Count | Source | 28 | 2.68k | verify(u32::from_der, |x: &u32| *x <= 999_999)(i) |
|
29 | 2.68k | } kerberos_parser::krb5_parser::parse_der_microseconds Line | Count | Source | 27 | 1 | fn parse_der_microseconds(i: &[u8]) -> IResult<&[u8], u32, Error> { | 28 | 1 | verify(u32::from_der, |x: &u32| *x <= 999_999)(i) | 29 | 1 | } |
kerberos_parser::krb5_parser::parse_der_microseconds Line | Count | Source | 27 | 2.68k | fn parse_der_microseconds(i: &[u8]) -> IResult<&[u8], u32, Error> { | 28 | 2.68k | verify(u32::from_der, |x: &u32| *x <= 999_999)(i) | 29 | 2.68k | } |
|
30 | | |
31 | | /// Parse a Kerberos string object |
32 | | /// |
33 | | /// <pre> |
34 | | /// KerberosString ::= GeneralString (IA5String) |
35 | | /// </pre> |
36 | 26.6k | pub fn parse_kerberos_string(i: &[u8]) -> IResult<&[u8], String, Error> { |
37 | 26.6k | map(GeneralString::from_der, |s| s.string())(i) kerberos_parser::krb5_parser::parse_kerberos_string::{closure#0}Line | Count | Source | 37 | 26 | map(GeneralString::from_der, |s| s.string())(i) |
kerberos_parser::krb5_parser::parse_kerberos_string::{closure#0}Line | Count | Source | 37 | 18.8k | map(GeneralString::from_der, |s| s.string())(i) |
|
38 | 26.6k | } kerberos_parser::krb5_parser::parse_kerberos_string Line | Count | Source | 36 | 37 | pub fn parse_kerberos_string(i: &[u8]) -> IResult<&[u8], String, Error> { | 37 | 37 | map(GeneralString::from_der, |s| s.string())(i) | 38 | 37 | } |
kerberos_parser::krb5_parser::parse_kerberos_string Line | Count | Source | 36 | 26.6k | pub fn parse_kerberos_string(i: &[u8]) -> IResult<&[u8], String, Error> { | 37 | 26.6k | map(GeneralString::from_der, |s| s.string())(i) | 38 | 26.6k | } |
|
39 | | |
40 | 7.94k | fn parse_kerberos_string_sequence(i: &[u8]) -> IResult<&[u8], Vec<String>, Error> { |
41 | 7.94k | parse_ber_sequence_of_v(parse_kerberos_string)(i) |
42 | 7.94k | } kerberos_parser::krb5_parser::parse_kerberos_string_sequence Line | Count | Source | 40 | 11 | fn parse_kerberos_string_sequence(i: &[u8]) -> IResult<&[u8], Vec<String>, Error> { | 41 | 11 | parse_ber_sequence_of_v(parse_kerberos_string)(i) | 42 | 11 | } |
kerberos_parser::krb5_parser::parse_kerberos_string_sequence Line | Count | Source | 40 | 7.93k | fn parse_kerberos_string_sequence(i: &[u8]) -> IResult<&[u8], Vec<String>, Error> { | 41 | 7.93k | parse_ber_sequence_of_v(parse_kerberos_string)(i) | 42 | 7.93k | } |
|
43 | | |
44 | | /// Parse Kerberos flags |
45 | | /// |
46 | | /// <pre> |
47 | | /// KerberosFlags ::= BIT STRING (SIZE (32..MAX)) |
48 | | /// -- minimum number of bits shall be sent, |
49 | | /// -- but no fewer than 32 |
50 | | /// </pre> |
51 | | #[inline] |
52 | 3.18k | pub fn parse_kerberos_flags(i: &[u8]) -> IResult<&[u8], BitString, Error> { |
53 | 3.18k | BitString::from_der(i) |
54 | 3.18k | } kerberos_parser::krb5_parser::parse_kerberos_flags Line | Count | Source | 52 | 8 | pub fn parse_kerberos_flags(i: &[u8]) -> IResult<&[u8], BitString, Error> { | 53 | 8 | BitString::from_der(i) | 54 | 8 | } |
kerberos_parser::krb5_parser::parse_kerberos_flags Line | Count | Source | 52 | 3.17k | pub fn parse_kerberos_flags(i: &[u8]) -> IResult<&[u8], BitString, Error> { | 53 | 3.17k | BitString::from_der(i) | 54 | 3.17k | } |
|
55 | | |
56 | | /// Parse a Kerberos Realm |
57 | | /// |
58 | | /// <pre> |
59 | | /// Realm ::= KerberosString |
60 | | /// </pre> |
61 | | impl<'a> FromDer<'a> for Realm { |
62 | 5.83k | fn from_der(bytes: &'a [u8]) -> ParseResult<'a, Self> { |
63 | 5.83k | map(parse_kerberos_string, Realm)(bytes) |
64 | 5.83k | } <kerberos_parser::krb5::Realm as asn1_rs::traits::FromDer>::from_der Line | Count | Source | 62 | 9 | fn from_der(bytes: &'a [u8]) -> ParseResult<'a, Self> { | 63 | 9 | map(parse_kerberos_string, Realm)(bytes) | 64 | 9 | } |
<kerberos_parser::krb5::Realm as asn1_rs::traits::FromDer>::from_der Line | Count | Source | 62 | 5.83k | fn from_der(bytes: &'a [u8]) -> ParseResult<'a, Self> { | 63 | 5.83k | map(parse_kerberos_string, Realm)(bytes) | 64 | 5.83k | } |
|
65 | | } |
66 | | |
67 | | #[inline] |
68 | 0 | pub fn parse_krb5_realm(i: &[u8]) -> IResult<&[u8], Realm, Error> { |
69 | 0 | Realm::from_der(i) |
70 | 0 | } Unexecuted instantiation: kerberos_parser::krb5_parser::parse_krb5_realm Unexecuted instantiation: kerberos_parser::krb5_parser::parse_krb5_realm |
71 | | |
72 | | /// Parse Kerberos PrincipalName |
73 | | /// |
74 | | /// <pre> |
75 | | /// PrincipalName ::= SEQUENCE { |
76 | | /// name-type [0] Int32, |
77 | | /// name-string [1] SEQUENCE OF KerberosString |
78 | | /// } |
79 | | /// </pre> |
80 | | #[deprecated( |
81 | | since = "0.8.0", |
82 | | note = "Parsing functions are deprecated. Users should instead use the FromDer trait" |
83 | | )] |
84 | | #[inline] |
85 | 0 | pub fn parse_krb5_principalname(i: &[u8]) -> IResult<&[u8], PrincipalName, Error> { |
86 | 0 | PrincipalName::from_der(i) |
87 | 0 | } Unexecuted instantiation: kerberos_parser::krb5_parser::parse_krb5_principalname Unexecuted instantiation: kerberos_parser::krb5_parser::parse_krb5_principalname |
88 | | |
89 | | /// Parse Kerberos PrincipalName |
90 | | /// |
91 | | /// <pre> |
92 | | /// PrincipalName ::= SEQUENCE { |
93 | | /// name-type [0] Int32, |
94 | | /// name-string [1] SEQUENCE OF KerberosString |
95 | | /// } |
96 | | /// </pre> |
97 | | impl<'a> FromDer<'a> for PrincipalName { |
98 | 7.97k | fn from_der(bytes: &'a [u8]) -> ParseResult<'a, Self> { |
99 | 7.97k | Sequence::from_der_and_then(bytes, |i| { |
100 | 7.95k | let (i, name_type) = TaggedParser::from_der_and_then(CS, 0, i, i32::from_der)?; |
101 | 7.95k | let name_type = NameType(name_type); |
102 | 7.68k | let (i, name_string) = |
103 | 7.95k | TaggedParser::from_der_and_then(CS, 1, i, parse_kerberos_string_sequence)?; |
104 | 7.68k | Ok(( |
105 | 7.68k | i, |
106 | 7.68k | PrincipalName { |
107 | 7.68k | name_type, |
108 | 7.68k | name_string, |
109 | 7.68k | }, |
110 | 7.68k | )) |
111 | 7.95k | }) <kerberos_parser::krb5::PrincipalName as asn1_rs::traits::FromDer>::from_der::{closure#0}Line | Count | Source | 99 | 12 | Sequence::from_der_and_then(bytes, |i| { | 100 | 12 | let (i, name_type) = TaggedParser::from_der_and_then(CS, 0, i, i32::from_der)?; | 101 | 12 | let name_type = NameType(name_type); | 102 | 10 | let (i, name_string) = | 103 | 12 | TaggedParser::from_der_and_then(CS, 1, i, parse_kerberos_string_sequence)?; | 104 | 10 | Ok(( | 105 | 10 | i, | 106 | 10 | PrincipalName { | 107 | 10 | name_type, | 108 | 10 | name_string, | 109 | 10 | }, | 110 | 10 | )) | 111 | 12 | }) |
<kerberos_parser::krb5::PrincipalName as asn1_rs::traits::FromDer>::from_der::{closure#0}Line | Count | Source | 99 | 7.94k | Sequence::from_der_and_then(bytes, |i| { | 100 | 7.94k | let (i, name_type) = TaggedParser::from_der_and_then(CS, 0, i, i32::from_der)?; | 101 | 7.93k | let name_type = NameType(name_type); | 102 | 7.67k | let (i, name_string) = | 103 | 7.93k | TaggedParser::from_der_and_then(CS, 1, i, parse_kerberos_string_sequence)?; | 104 | 7.67k | Ok(( | 105 | 7.67k | i, | 106 | 7.67k | PrincipalName { | 107 | 7.67k | name_type, | 108 | 7.67k | name_string, | 109 | 7.67k | }, | 110 | 7.67k | )) | 111 | 7.94k | }) |
|
112 | 7.97k | } <kerberos_parser::krb5::PrincipalName as asn1_rs::traits::FromDer>::from_der Line | Count | Source | 98 | 12 | fn from_der(bytes: &'a [u8]) -> ParseResult<'a, Self> { | 99 | 12 | Sequence::from_der_and_then(bytes, |i| { | 100 | | let (i, name_type) = TaggedParser::from_der_and_then(CS, 0, i, i32::from_der)?; | 101 | | let name_type = NameType(name_type); | 102 | | let (i, name_string) = | 103 | | TaggedParser::from_der_and_then(CS, 1, i, parse_kerberos_string_sequence)?; | 104 | | Ok(( | 105 | | i, | 106 | | PrincipalName { | 107 | | name_type, | 108 | | name_string, | 109 | | }, | 110 | | )) | 111 | | }) | 112 | 12 | } |
<kerberos_parser::krb5::PrincipalName as asn1_rs::traits::FromDer>::from_der Line | Count | Source | 98 | 7.95k | fn from_der(bytes: &'a [u8]) -> ParseResult<'a, Self> { | 99 | 7.95k | Sequence::from_der_and_then(bytes, |i| { | 100 | | let (i, name_type) = TaggedParser::from_der_and_then(CS, 0, i, i32::from_der)?; | 101 | | let name_type = NameType(name_type); | 102 | | let (i, name_string) = | 103 | | TaggedParser::from_der_and_then(CS, 1, i, parse_kerberos_string_sequence)?; | 104 | | Ok(( | 105 | | i, | 106 | | PrincipalName { | 107 | | name_type, | 108 | | name_string, | 109 | | }, | 110 | | )) | 111 | | }) | 112 | 7.95k | } |
|
113 | | } |
114 | | |
115 | | /// Parse a Kerberos Time |
116 | | /// |
117 | | /// <pre> |
118 | | /// KerberosTime ::= GeneralizedTime -- with no fractional seconds |
119 | | /// </pre> |
120 | | #[inline] |
121 | 7.00k | pub fn parse_kerberos_time(i: &[u8]) -> IResult<&[u8], GeneralizedTime, Error> { |
122 | 7.00k | GeneralizedTime::from_der(i) |
123 | 7.00k | } kerberos_parser::krb5_parser::parse_kerberos_time Line | Count | Source | 121 | 5 | pub fn parse_kerberos_time(i: &[u8]) -> IResult<&[u8], GeneralizedTime, Error> { | 122 | 5 | GeneralizedTime::from_der(i) | 123 | 5 | } |
kerberos_parser::krb5_parser::parse_kerberos_time Line | Count | Source | 121 | 7.00k | pub fn parse_kerberos_time(i: &[u8]) -> IResult<&[u8], GeneralizedTime, Error> { | 122 | 7.00k | GeneralizedTime::from_der(i) | 123 | 7.00k | } |
|
124 | | |
125 | | /// Parse Kerberos HostAddress |
126 | | /// |
127 | | /// <pre> |
128 | | /// HostAddress ::= SEQUENCE { |
129 | | /// addr-type [0] Int32, |
130 | | /// address [1] OCTET STRING |
131 | | /// } |
132 | | /// </pre> |
133 | | #[deprecated( |
134 | | since = "0.8.0", |
135 | | note = "Parsing functions are deprecated. Users should instead use the FromDer trait" |
136 | | )] |
137 | | #[inline] |
138 | 0 | pub fn parse_krb5_hostaddress(i: &[u8]) -> IResult<&[u8], HostAddress, Error> { |
139 | 0 | HostAddress::from_der(i) |
140 | 0 | } Unexecuted instantiation: kerberos_parser::krb5_parser::parse_krb5_hostaddress Unexecuted instantiation: kerberos_parser::krb5_parser::parse_krb5_hostaddress |
141 | | |
142 | | impl<'a> FromDer<'a> for HostAddress<'a> { |
143 | 187 | fn from_der(bytes: &'a [u8]) -> ParseResult<'a, Self> { |
144 | 187 | Sequence::from_der_and_then(bytes, |i| { |
145 | 97 | let (i, addr_type) = TaggedParser::from_der_and_then(CS, 0, i, i32::from_der)?; |
146 | 93 | let addr_type = AddressType(addr_type); |
147 | 93 | let (i, address) = TaggedParser::from_der_and_then(CS, 1, i, <&[u8]>::from_der)?; |
148 | 89 | Ok((i, HostAddress { addr_type, address })) |
149 | 97 | }) Unexecuted instantiation: <kerberos_parser::krb5::HostAddress as asn1_rs::traits::FromDer>::from_der::{closure#0}<kerberos_parser::krb5::HostAddress as asn1_rs::traits::FromDer>::from_der::{closure#0}Line | Count | Source | 144 | 97 | Sequence::from_der_and_then(bytes, |i| { | 145 | 97 | let (i, addr_type) = TaggedParser::from_der_and_then(CS, 0, i, i32::from_der)?; | 146 | 93 | let addr_type = AddressType(addr_type); | 147 | 93 | let (i, address) = TaggedParser::from_der_and_then(CS, 1, i, <&[u8]>::from_der)?; | 148 | 89 | Ok((i, HostAddress { addr_type, address })) | 149 | 97 | }) |
|
150 | 187 | } Unexecuted instantiation: <kerberos_parser::krb5::HostAddress as asn1_rs::traits::FromDer>::from_der <kerberos_parser::krb5::HostAddress as asn1_rs::traits::FromDer>::from_der Line | Count | Source | 143 | 187 | fn from_der(bytes: &'a [u8]) -> ParseResult<'a, Self> { | 144 | 187 | Sequence::from_der_and_then(bytes, |i| { | 145 | | let (i, addr_type) = TaggedParser::from_der_and_then(CS, 0, i, i32::from_der)?; | 146 | | let addr_type = AddressType(addr_type); | 147 | | let (i, address) = TaggedParser::from_der_and_then(CS, 1, i, <&[u8]>::from_der)?; | 148 | | Ok((i, HostAddress { addr_type, address })) | 149 | | }) | 150 | 187 | } |
|
151 | | } |
152 | | |
153 | | /// Parse Kerberos HostAddresses |
154 | | /// |
155 | | /// <pre> |
156 | | /// -- NOTE: HostAddresses is always used as an OPTIONAL field and |
157 | | /// -- should not be empty. |
158 | | /// HostAddresses -- NOTE: subtly different from rfc1510, |
159 | | /// -- but has a value mapping and encodes the same |
160 | | /// ::= SEQUENCE OF HostAddress |
161 | | /// </pre> |
162 | 100 | pub fn parse_krb5_hostaddresses(i: &[u8]) -> IResult<&[u8], Vec<HostAddress>, Error> { |
163 | 100 | parse_ber_sequence_of_v(HostAddress::from_der)(i) |
164 | 100 | } Unexecuted instantiation: kerberos_parser::krb5_parser::parse_krb5_hostaddresses kerberos_parser::krb5_parser::parse_krb5_hostaddresses Line | Count | Source | 162 | 100 | pub fn parse_krb5_hostaddresses(i: &[u8]) -> IResult<&[u8], Vec<HostAddress>, Error> { | 163 | 100 | parse_ber_sequence_of_v(HostAddress::from_der)(i) | 164 | 100 | } |
|
165 | | |
166 | | /// Parse Kerberos Ticket |
167 | | /// |
168 | | /// <pre> |
169 | | /// Ticket ::= [APPLICATION 1] SEQUENCE { |
170 | | /// tkt-vno [0] INTEGER (5), |
171 | | /// realm [1] Realm, |
172 | | /// sname [2] PrincipalName, |
173 | | /// enc-part [3] EncryptedData -- EncTicketPart |
174 | | /// } |
175 | | /// </pre> |
176 | | #[deprecated( |
177 | | since = "0.8.0", |
178 | | note = "Parsing functions are deprecated. Users should instead use the FromDer trait" |
179 | | )] |
180 | | #[inline] |
181 | 0 | pub fn parse_krb5_ticket(i: &[u8]) -> IResult<&[u8], Ticket, Error> { |
182 | 0 | Ticket::from_der(i) |
183 | 0 | } Unexecuted instantiation: kerberos_parser::krb5_parser::parse_krb5_ticket Unexecuted instantiation: kerberos_parser::krb5_parser::parse_krb5_ticket |
184 | | |
185 | | impl<'a> FromDer<'a> for Ticket<'a> { |
186 | 819 | fn from_der(bytes: &'a [u8]) -> ParseResult<Self, Error> { |
187 | 819 | TaggedParser::from_der_and_then(Class::Application, 1, bytes, |inner| { |
188 | 816 | Sequence::from_der_and_then(inner, |i| { |
189 | 811 | let (i, tkt_vno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; |
190 | 806 | if tkt_vno != 5 { |
191 | 6 | return Err(Err::Error(Error::invalid_value( |
192 | 6 | Tag::Sequence, |
193 | 6 | "Invalid Kerberos version (not 5)".to_string(), |
194 | 6 | ))); |
195 | 800 | } |
196 | 800 | let (i, realm) = TaggedParser::from_der_and_then(CS, 1, i, Realm::from_der)?; |
197 | 786 | let (i, sname) = |
198 | 797 | TaggedParser::from_der_and_then(CS, 2, i, PrincipalName::from_der)?; |
199 | 766 | let (i, enc_part) = |
200 | 786 | TaggedParser::from_der_and_then(CS, 3, i, EncryptedData::from_der)?; |
201 | 766 | let tkt = Ticket { |
202 | 766 | tkt_vno, |
203 | 766 | realm, |
204 | 766 | sname, |
205 | 766 | enc_part, |
206 | 766 | }; |
207 | 766 | Ok((i, tkt)) |
208 | 811 | }) <kerberos_parser::krb5::Ticket as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}Line | Count | Source | 188 | 5 | Sequence::from_der_and_then(inner, |i| { | 189 | 5 | let (i, tkt_vno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; | 190 | 5 | if tkt_vno != 5 { | 191 | 0 | return Err(Err::Error(Error::invalid_value( | 192 | 0 | Tag::Sequence, | 193 | 0 | "Invalid Kerberos version (not 5)".to_string(), | 194 | 0 | ))); | 195 | 5 | } | 196 | 5 | let (i, realm) = TaggedParser::from_der_and_then(CS, 1, i, Realm::from_der)?; | 197 | 5 | let (i, sname) = | 198 | 5 | TaggedParser::from_der_and_then(CS, 2, i, PrincipalName::from_der)?; | 199 | 5 | let (i, enc_part) = | 200 | 5 | TaggedParser::from_der_and_then(CS, 3, i, EncryptedData::from_der)?; | 201 | 5 | let tkt = Ticket { | 202 | 5 | tkt_vno, | 203 | 5 | realm, | 204 | 5 | sname, | 205 | 5 | enc_part, | 206 | 5 | }; | 207 | 5 | Ok((i, tkt)) | 208 | 5 | }) |
<kerberos_parser::krb5::Ticket as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}Line | Count | Source | 188 | 806 | Sequence::from_der_and_then(inner, |i| { | 189 | 806 | let (i, tkt_vno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; | 190 | 801 | if tkt_vno != 5 { | 191 | 6 | return Err(Err::Error(Error::invalid_value( | 192 | 6 | Tag::Sequence, | 193 | 6 | "Invalid Kerberos version (not 5)".to_string(), | 194 | 6 | ))); | 195 | 795 | } | 196 | 795 | let (i, realm) = TaggedParser::from_der_and_then(CS, 1, i, Realm::from_der)?; | 197 | 781 | let (i, sname) = | 198 | 792 | TaggedParser::from_der_and_then(CS, 2, i, PrincipalName::from_der)?; | 199 | 761 | let (i, enc_part) = | 200 | 781 | TaggedParser::from_der_and_then(CS, 3, i, EncryptedData::from_der)?; | 201 | 761 | let tkt = Ticket { | 202 | 761 | tkt_vno, | 203 | 761 | realm, | 204 | 761 | sname, | 205 | 761 | enc_part, | 206 | 761 | }; | 207 | 761 | Ok((i, tkt)) | 208 | 806 | }) |
|
209 | 816 | }) <kerberos_parser::krb5::Ticket as asn1_rs::traits::FromDer>::from_der::{closure#0}Line | Count | Source | 187 | 5 | TaggedParser::from_der_and_then(Class::Application, 1, bytes, |inner| { | 188 | 5 | Sequence::from_der_and_then(inner, |i| { | 189 | | let (i, tkt_vno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; | 190 | | if tkt_vno != 5 { | 191 | | return Err(Err::Error(Error::invalid_value( | 192 | | Tag::Sequence, | 193 | | "Invalid Kerberos version (not 5)".to_string(), | 194 | | ))); | 195 | | } | 196 | | let (i, realm) = TaggedParser::from_der_and_then(CS, 1, i, Realm::from_der)?; | 197 | | let (i, sname) = | 198 | | TaggedParser::from_der_and_then(CS, 2, i, PrincipalName::from_der)?; | 199 | | let (i, enc_part) = | 200 | | TaggedParser::from_der_and_then(CS, 3, i, EncryptedData::from_der)?; | 201 | | let tkt = Ticket { | 202 | | tkt_vno, | 203 | | realm, | 204 | | sname, | 205 | | enc_part, | 206 | | }; | 207 | | Ok((i, tkt)) | 208 | | }) | 209 | 5 | }) |
<kerberos_parser::krb5::Ticket as asn1_rs::traits::FromDer>::from_der::{closure#0}Line | Count | Source | 187 | 811 | TaggedParser::from_der_and_then(Class::Application, 1, bytes, |inner| { | 188 | 811 | Sequence::from_der_and_then(inner, |i| { | 189 | | let (i, tkt_vno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; | 190 | | if tkt_vno != 5 { | 191 | | return Err(Err::Error(Error::invalid_value( | 192 | | Tag::Sequence, | 193 | | "Invalid Kerberos version (not 5)".to_string(), | 194 | | ))); | 195 | | } | 196 | | let (i, realm) = TaggedParser::from_der_and_then(CS, 1, i, Realm::from_der)?; | 197 | | let (i, sname) = | 198 | | TaggedParser::from_der_and_then(CS, 2, i, PrincipalName::from_der)?; | 199 | | let (i, enc_part) = | 200 | | TaggedParser::from_der_and_then(CS, 3, i, EncryptedData::from_der)?; | 201 | | let tkt = Ticket { | 202 | | tkt_vno, | 203 | | realm, | 204 | | sname, | 205 | | enc_part, | 206 | | }; | 207 | | Ok((i, tkt)) | 208 | | }) | 209 | 811 | }) |
|
210 | 819 | } <kerberos_parser::krb5::Ticket as asn1_rs::traits::FromDer>::from_der Line | Count | Source | 186 | 5 | fn from_der(bytes: &'a [u8]) -> ParseResult<Self, Error> { | 187 | 5 | TaggedParser::from_der_and_then(Class::Application, 1, bytes, |inner| { | 188 | | Sequence::from_der_and_then(inner, |i| { | 189 | | let (i, tkt_vno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; | 190 | | if tkt_vno != 5 { | 191 | | return Err(Err::Error(Error::invalid_value( | 192 | | Tag::Sequence, | 193 | | "Invalid Kerberos version (not 5)".to_string(), | 194 | | ))); | 195 | | } | 196 | | let (i, realm) = TaggedParser::from_der_and_then(CS, 1, i, Realm::from_der)?; | 197 | | let (i, sname) = | 198 | | TaggedParser::from_der_and_then(CS, 2, i, PrincipalName::from_der)?; | 199 | | let (i, enc_part) = | 200 | | TaggedParser::from_der_and_then(CS, 3, i, EncryptedData::from_der)?; | 201 | | let tkt = Ticket { | 202 | | tkt_vno, | 203 | | realm, | 204 | | sname, | 205 | | enc_part, | 206 | | }; | 207 | | Ok((i, tkt)) | 208 | | }) | 209 | | }) | 210 | 5 | } |
<kerberos_parser::krb5::Ticket as asn1_rs::traits::FromDer>::from_der Line | Count | Source | 186 | 814 | fn from_der(bytes: &'a [u8]) -> ParseResult<Self, Error> { | 187 | 814 | TaggedParser::from_der_and_then(Class::Application, 1, bytes, |inner| { | 188 | | Sequence::from_der_and_then(inner, |i| { | 189 | | let (i, tkt_vno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; | 190 | | if tkt_vno != 5 { | 191 | | return Err(Err::Error(Error::invalid_value( | 192 | | Tag::Sequence, | 193 | | "Invalid Kerberos version (not 5)".to_string(), | 194 | | ))); | 195 | | } | 196 | | let (i, realm) = TaggedParser::from_der_and_then(CS, 1, i, Realm::from_der)?; | 197 | | let (i, sname) = | 198 | | TaggedParser::from_der_and_then(CS, 2, i, PrincipalName::from_der)?; | 199 | | let (i, enc_part) = | 200 | | TaggedParser::from_der_and_then(CS, 3, i, EncryptedData::from_der)?; | 201 | | let tkt = Ticket { | 202 | | tkt_vno, | 203 | | realm, | 204 | | sname, | 205 | | enc_part, | 206 | | }; | 207 | | Ok((i, tkt)) | 208 | | }) | 209 | | }) | 210 | 814 | } |
|
211 | | } |
212 | | |
213 | | /// Parse Kerberos EncryptedData |
214 | | /// |
215 | | /// <pre> |
216 | | /// EncryptedData ::= SEQUENCE { |
217 | | /// etype [0] Int32 -- EncryptionType --, |
218 | | /// kvno [1] UInt32 OPTIONAL, |
219 | | /// cipher [2] OCTET STRING -- ciphertext |
220 | | /// } |
221 | | /// </pre> |
222 | | #[deprecated( |
223 | | since = "0.8.0", |
224 | | note = "Parsing functions are deprecated. Users should instead use the FromDer trait" |
225 | | )] |
226 | | #[inline] |
227 | 0 | pub fn parse_encrypted(i: &[u8]) -> IResult<&[u8], EncryptedData, Error> { |
228 | 0 | EncryptedData::from_der(i) |
229 | 0 | } Unexecuted instantiation: kerberos_parser::krb5_parser::parse_encrypted Unexecuted instantiation: kerberos_parser::krb5_parser::parse_encrypted |
230 | | |
231 | | impl<'a> FromDer<'a> for EncryptedData<'a> { |
232 | 1.57k | fn from_der(bytes: &'a [u8]) -> ParseResult<Self, Error> { |
233 | 1.57k | Sequence::from_der_and_then(bytes, |i| { |
234 | 1.56k | let (i, etype) = TaggedParser::from_der_and_then(CS, 0, i, i32::from_der)?; |
235 | 1.55k | let etype = EncryptionType(etype); |
236 | 1.55k | let (i, kvno) = |
237 | 1.55k | OptTaggedParser::new(CS, Tag(1)).parse_der(i, |_, data| u32::from_der(data))?; <kerberos_parser::krb5::EncryptedData as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}Line | Count | Source | 237 | 5 | OptTaggedParser::new(CS, Tag(1)).parse_der(i, |_, data| u32::from_der(data))?; |
<kerberos_parser::krb5::EncryptedData as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}Line | Count | Source | 237 | 819 | OptTaggedParser::new(CS, Tag(1)).parse_der(i, |_, data| u32::from_der(data))?; |
|
238 | 1.55k | let (i, cipher) = TaggedParser::from_der_and_then(CS, 2, i, <&[u8]>::from_der)?; |
239 | 1.55k | let enc = EncryptedData { |
240 | 1.55k | etype, |
241 | 1.55k | kvno, |
242 | 1.55k | cipher, |
243 | 1.55k | }; |
244 | 1.55k | Ok((i, enc)) |
245 | 1.56k | }) <kerberos_parser::krb5::EncryptedData as asn1_rs::traits::FromDer>::from_der::{closure#0}Line | Count | Source | 233 | 10 | Sequence::from_der_and_then(bytes, |i| { | 234 | 10 | let (i, etype) = TaggedParser::from_der_and_then(CS, 0, i, i32::from_der)?; | 235 | 10 | let etype = EncryptionType(etype); | 236 | 10 | let (i, kvno) = | 237 | 10 | OptTaggedParser::new(CS, Tag(1)).parse_der(i, |_, data| u32::from_der(data))?; | 238 | 10 | let (i, cipher) = TaggedParser::from_der_and_then(CS, 2, i, <&[u8]>::from_der)?; | 239 | 10 | let enc = EncryptedData { | 240 | 10 | etype, | 241 | 10 | kvno, | 242 | 10 | cipher, | 243 | 10 | }; | 244 | 10 | Ok((i, enc)) | 245 | 10 | }) |
<kerberos_parser::krb5::EncryptedData as asn1_rs::traits::FromDer>::from_der::{closure#0}Line | Count | Source | 233 | 1.55k | Sequence::from_der_and_then(bytes, |i| { | 234 | 1.55k | let (i, etype) = TaggedParser::from_der_and_then(CS, 0, i, i32::from_der)?; | 235 | 1.54k | let etype = EncryptionType(etype); | 236 | 1.54k | let (i, kvno) = | 237 | 1.54k | OptTaggedParser::new(CS, Tag(1)).parse_der(i, |_, data| u32::from_der(data))?; | 238 | 1.54k | let (i, cipher) = TaggedParser::from_der_and_then(CS, 2, i, <&[u8]>::from_der)?; | 239 | 1.54k | let enc = EncryptedData { | 240 | 1.54k | etype, | 241 | 1.54k | kvno, | 242 | 1.54k | cipher, | 243 | 1.54k | }; | 244 | 1.54k | Ok((i, enc)) | 245 | 1.55k | }) |
|
246 | 1.57k | } <kerberos_parser::krb5::EncryptedData as asn1_rs::traits::FromDer>::from_der Line | Count | Source | 232 | 10 | fn from_der(bytes: &'a [u8]) -> ParseResult<Self, Error> { | 233 | 10 | Sequence::from_der_and_then(bytes, |i| { | 234 | | let (i, etype) = TaggedParser::from_der_and_then(CS, 0, i, i32::from_der)?; | 235 | | let etype = EncryptionType(etype); | 236 | | let (i, kvno) = | 237 | | OptTaggedParser::new(CS, Tag(1)).parse_der(i, |_, data| u32::from_der(data))?; | 238 | | let (i, cipher) = TaggedParser::from_der_and_then(CS, 2, i, <&[u8]>::from_der)?; | 239 | | let enc = EncryptedData { | 240 | | etype, | 241 | | kvno, | 242 | | cipher, | 243 | | }; | 244 | | Ok((i, enc)) | 245 | | }) | 246 | 10 | } |
<kerberos_parser::krb5::EncryptedData as asn1_rs::traits::FromDer>::from_der Line | Count | Source | 232 | 1.56k | fn from_der(bytes: &'a [u8]) -> ParseResult<Self, Error> { | 233 | 1.56k | Sequence::from_der_and_then(bytes, |i| { | 234 | | let (i, etype) = TaggedParser::from_der_and_then(CS, 0, i, i32::from_der)?; | 235 | | let etype = EncryptionType(etype); | 236 | | let (i, kvno) = | 237 | | OptTaggedParser::new(CS, Tag(1)).parse_der(i, |_, data| u32::from_der(data))?; | 238 | | let (i, cipher) = TaggedParser::from_der_and_then(CS, 2, i, <&[u8]>::from_der)?; | 239 | | let enc = EncryptedData { | 240 | | etype, | 241 | | kvno, | 242 | | cipher, | 243 | | }; | 244 | | Ok((i, enc)) | 245 | | }) | 246 | 1.56k | } |
|
247 | | } |
248 | | |
249 | | /// Parse a Kerberos KDC Request |
250 | | /// |
251 | | /// <pre> |
252 | | /// KDC-REQ ::= SEQUENCE { |
253 | | /// -- NOTE: first tag is [1], not [0] |
254 | | /// pvno [1] INTEGER (5) , |
255 | | /// msg-type [2] INTEGER (10 -- AS -- | 12 -- TGS --), |
256 | | /// padata [3] SEQUENCE OF PA-DATA OPTIONAL |
257 | | /// -- NOTE: not empty --, |
258 | | /// req-body [4] KDC-REQ-BODY |
259 | | /// } |
260 | | /// </pre> |
261 | | #[deprecated( |
262 | | since = "0.8.0", |
263 | | note = "Parsing functions are deprecated. Users should instead use the FromDer trait" |
264 | | )] |
265 | | #[inline] |
266 | 0 | pub fn parse_kdc_req(i: &[u8]) -> IResult<&[u8], KdcReq, Error> { |
267 | 0 | KdcReq::from_der(i) |
268 | 0 | } Unexecuted instantiation: kerberos_parser::krb5_parser::parse_kdc_req Unexecuted instantiation: kerberos_parser::krb5_parser::parse_kdc_req |
269 | | |
270 | | /// Parse a Kerberos KDC Request |
271 | | /// |
272 | | /// <pre> |
273 | | /// KDC-REQ ::= SEQUENCE { |
274 | | /// -- NOTE: first tag is [1], not [0] |
275 | | /// pvno [1] INTEGER (5) , |
276 | | /// msg-type [2] INTEGER (10 -- AS -- | 12 -- TGS --), |
277 | | /// padata [3] SEQUENCE OF PA-DATA OPTIONAL |
278 | | /// -- NOTE: not empty --, |
279 | | /// req-body [4] KDC-REQ-BODY |
280 | | /// } |
281 | | /// </pre> |
282 | | impl<'a> FromDer<'a> for KdcReq<'a> { |
283 | 19.6k | fn from_der(bytes: &'a [u8]) -> ParseResult<Self, Error> { |
284 | 19.6k | Sequence::from_der_and_then(bytes, |i| { |
285 | 4.60k | let (i, pvno) = TaggedParser::from_der_and_then(CS, 1, i, u32::from_der)?; |
286 | 2.74k | let (i, msg_type) = TaggedParser::from_der_and_then(CS, 2, i, u32::from_der)?; |
287 | 2.73k | let msg_type = MessageType(msg_type); |
288 | 2.73k | let (i, padata) = OptTaggedParser::new(CS, Tag(3)) |
289 | 2.73k | .parse_der(i, |_, data| parse_krb5_padata_sequence(data))?; <kerberos_parser::krb5::KdcReq as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}Line | Count | Source | 289 | 1 | .parse_der(i, |_, data| parse_krb5_padata_sequence(data))?; |
<kerberos_parser::krb5::KdcReq as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}Line | Count | Source | 289 | 2.71k | .parse_der(i, |_, data| parse_krb5_padata_sequence(data))?; |
|
290 | 2.68k | let padata = padata.unwrap_or_default(); |
291 | 2.68k | let (i, req_body) = TaggedParser::from_der_and_then(CS, 4, i, KdcReqBody::from_der)?; |
292 | 2.05k | let req = KdcReq { |
293 | 2.05k | pvno, |
294 | 2.05k | msg_type, |
295 | 2.05k | padata, |
296 | 2.05k | req_body, |
297 | 2.05k | }; |
298 | 2.05k | Ok((i, req)) |
299 | 4.60k | }) <kerberos_parser::krb5::KdcReq as asn1_rs::traits::FromDer>::from_der::{closure#0}Line | Count | Source | 284 | 4 | Sequence::from_der_and_then(bytes, |i| { | 285 | 4 | let (i, pvno) = TaggedParser::from_der_and_then(CS, 1, i, u32::from_der)?; | 286 | 3 | let (i, msg_type) = TaggedParser::from_der_and_then(CS, 2, i, u32::from_der)?; | 287 | 3 | let msg_type = MessageType(msg_type); | 288 | 3 | let (i, padata) = OptTaggedParser::new(CS, Tag(3)) | 289 | 3 | .parse_der(i, |_, data| parse_krb5_padata_sequence(data))?; | 290 | 3 | let padata = padata.unwrap_or_default(); | 291 | 3 | let (i, req_body) = TaggedParser::from_der_and_then(CS, 4, i, KdcReqBody::from_der)?; | 292 | 2 | let req = KdcReq { | 293 | 2 | pvno, | 294 | 2 | msg_type, | 295 | 2 | padata, | 296 | 2 | req_body, | 297 | 2 | }; | 298 | 2 | Ok((i, req)) | 299 | 4 | }) |
<kerberos_parser::krb5::KdcReq as asn1_rs::traits::FromDer>::from_der::{closure#0}Line | Count | Source | 284 | 4.60k | Sequence::from_der_and_then(bytes, |i| { | 285 | 4.60k | let (i, pvno) = TaggedParser::from_der_and_then(CS, 1, i, u32::from_der)?; | 286 | 2.74k | let (i, msg_type) = TaggedParser::from_der_and_then(CS, 2, i, u32::from_der)?; | 287 | 2.73k | let msg_type = MessageType(msg_type); | 288 | 2.73k | let (i, padata) = OptTaggedParser::new(CS, Tag(3)) | 289 | 2.73k | .parse_der(i, |_, data| parse_krb5_padata_sequence(data))?; | 290 | 2.67k | let padata = padata.unwrap_or_default(); | 291 | 2.67k | let (i, req_body) = TaggedParser::from_der_and_then(CS, 4, i, KdcReqBody::from_der)?; | 292 | 2.05k | let req = KdcReq { | 293 | 2.05k | pvno, | 294 | 2.05k | msg_type, | 295 | 2.05k | padata, | 296 | 2.05k | req_body, | 297 | 2.05k | }; | 298 | 2.05k | Ok((i, req)) | 299 | 4.60k | }) |
|
300 | 19.6k | } <kerberos_parser::krb5::KdcReq as asn1_rs::traits::FromDer>::from_der Line | Count | Source | 283 | 13.7k | fn from_der(bytes: &'a [u8]) -> ParseResult<Self, Error> { | 284 | 13.7k | Sequence::from_der_and_then(bytes, |i| { | 285 | | let (i, pvno) = TaggedParser::from_der_and_then(CS, 1, i, u32::from_der)?; | 286 | | let (i, msg_type) = TaggedParser::from_der_and_then(CS, 2, i, u32::from_der)?; | 287 | | let msg_type = MessageType(msg_type); | 288 | | let (i, padata) = OptTaggedParser::new(CS, Tag(3)) | 289 | | .parse_der(i, |_, data| parse_krb5_padata_sequence(data))?; | 290 | | let padata = padata.unwrap_or_default(); | 291 | | let (i, req_body) = TaggedParser::from_der_and_then(CS, 4, i, KdcReqBody::from_der)?; | 292 | | let req = KdcReq { | 293 | | pvno, | 294 | | msg_type, | 295 | | padata, | 296 | | req_body, | 297 | | }; | 298 | | Ok((i, req)) | 299 | | }) | 300 | 13.7k | } |
<kerberos_parser::krb5::KdcReq as asn1_rs::traits::FromDer>::from_der Line | Count | Source | 283 | 5.92k | fn from_der(bytes: &'a [u8]) -> ParseResult<Self, Error> { | 284 | 5.92k | Sequence::from_der_and_then(bytes, |i| { | 285 | | let (i, pvno) = TaggedParser::from_der_and_then(CS, 1, i, u32::from_der)?; | 286 | | let (i, msg_type) = TaggedParser::from_der_and_then(CS, 2, i, u32::from_der)?; | 287 | | let msg_type = MessageType(msg_type); | 288 | | let (i, padata) = OptTaggedParser::new(CS, Tag(3)) | 289 | | .parse_der(i, |_, data| parse_krb5_padata_sequence(data))?; | 290 | | let padata = padata.unwrap_or_default(); | 291 | | let (i, req_body) = TaggedParser::from_der_and_then(CS, 4, i, KdcReqBody::from_der)?; | 292 | | let req = KdcReq { | 293 | | pvno, | 294 | | msg_type, | 295 | | padata, | 296 | | req_body, | 297 | | }; | 298 | | Ok((i, req)) | 299 | | }) | 300 | 5.92k | } |
|
301 | | } |
302 | | |
303 | | #[deprecated( |
304 | | since = "0.8.0", |
305 | | note = "Parsing functions are deprecated. Users should instead use the FromDer trait" |
306 | | )] |
307 | | #[inline] |
308 | 0 | pub fn parse_kdc_req_body(i: &[u8]) -> IResult<&[u8], KdcReqBody, Error> { |
309 | 0 | KdcReqBody::from_der(i) |
310 | 0 | } Unexecuted instantiation: kerberos_parser::krb5_parser::parse_kdc_req_body Unexecuted instantiation: kerberos_parser::krb5_parser::parse_kdc_req_body |
311 | | |
312 | | /// Parse the body of a Kerberos KDC Request |
313 | | /// |
314 | | /// <pre> |
315 | | /// KDC-REQ-BODY ::= SEQUENCE { |
316 | | /// kdc-options [0] KDCOptions, |
317 | | /// cname [1] PrincipalName OPTIONAL |
318 | | /// -- Used only in AS-REQ --, |
319 | | /// realm [2] Realm |
320 | | /// -- Server's realm |
321 | | /// -- Also client's in AS-REQ --, |
322 | | /// sname [3] PrincipalName OPTIONAL, |
323 | | /// from [4] KerberosTime OPTIONAL, |
324 | | /// till [5] KerberosTime, |
325 | | /// rtime [6] KerberosTime OPTIONAL, |
326 | | /// nonce [7] UInt32, |
327 | | /// etype [8] SEQUENCE OF Int32 -- EncryptionType |
328 | | /// -- in preference order --, |
329 | | /// addresses [9] HostAddresses OPTIONAL, |
330 | | /// enc-authorization-data [10] EncryptedData OPTIONAL |
331 | | /// -- AuthorizationData --, |
332 | | /// additional-tickets [11] SEQUENCE OF Ticket OPTIONAL |
333 | | /// -- NOTE: not empty |
334 | | /// } |
335 | | /// </pre> |
336 | | impl<'a> FromDer<'a> for KdcReqBody<'a> { |
337 | 2.58k | fn from_der(bytes: &'a [u8]) -> ParseResult<Self, Error> { |
338 | 2.58k | Sequence::from_der_and_then(bytes, |i| { |
339 | 2.49k | let (i, kdc_options) = TaggedParser::from_der_and_then(CS, 0, i, parse_kerberos_flags)?; |
340 | 2.48k | let (i, cname) = OptTaggedParser::new(CS, Tag(1)) |
341 | 2.48k | .parse_der(i, |_, data| PrincipalName::from_der(data))?; <kerberos_parser::krb5::KdcReqBody as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}Line | Count | Source | 341 | 3 | .parse_der(i, |_, data| PrincipalName::from_der(data))?; |
<kerberos_parser::krb5::KdcReqBody as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}Line | Count | Source | 341 | 2.36k | .parse_der(i, |_, data| PrincipalName::from_der(data))?; |
|
342 | 2.23k | let (i, realm) = TaggedParser::from_der_and_then(CS, 2, i, Realm::from_der)?; |
343 | 2.21k | let (i, sname) = OptTaggedParser::new(CS, Tag(3)) |
344 | 2.21k | .parse_der(i, |_, data| PrincipalName::from_der(data))?; <kerberos_parser::krb5::KdcReqBody as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#1}Line | Count | Source | 344 | 3 | .parse_der(i, |_, data| PrincipalName::from_der(data))?; |
<kerberos_parser::krb5::KdcReqBody as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#1}Line | Count | Source | 344 | 2.20k | .parse_der(i, |_, data| PrincipalName::from_der(data))?; |
|
345 | 2.19k | let (i, from) = OptTaggedParser::new(CS, Tag(4)) |
346 | 2.19k | .parse_der(i, |_, data| parse_kerberos_time(data))?; Unexecuted instantiation: <kerberos_parser::krb5::KdcReqBody as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#2}Unexecuted instantiation: <kerberos_parser::krb5::KdcReqBody as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#2} |
347 | 2.18k | let (i, till) = TaggedParser::from_der_and_then(CS, 5, i, parse_kerberos_time)?; |
348 | 2.17k | let (i, rtime) = OptTaggedParser::new(CS, Tag(6)) |
349 | 2.17k | .parse_der(i, |_, data| parse_kerberos_time(data))?; <kerberos_parser::krb5::KdcReqBody as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#3}Line | Count | Source | 349 | 2 | .parse_der(i, |_, data| parse_kerberos_time(data))?; |
<kerberos_parser::krb5::KdcReqBody as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#3}Line | Count | Source | 349 | 2.08k | .parse_der(i, |_, data| parse_kerberos_time(data))?; |
|
350 | 2.12k | let (i, nonce) = TaggedParser::from_der_and_then(CS, 7, i, u32::from_der)?; |
351 | 2.12k | let (i, etype) = TaggedParser::from_der_and_then(CS, 8, i, |data| { |
352 | 2.10k | let (rem, v) = <Vec<i32>>::from_der(data)?; |
353 | 2.98k | let v = v.iter().map(|&e| EncryptionType(e)).collect(); <kerberos_parser::krb5::KdcReqBody as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#4}::{closure#0}Line | Count | Source | 353 | 4 | let v = v.iter().map(|&e| EncryptionType(e)).collect(); |
<kerberos_parser::krb5::KdcReqBody as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#4}::{closure#0}Line | Count | Source | 353 | 2.97k | let v = v.iter().map(|&e| EncryptionType(e)).collect(); |
|
354 | 2.07k | Ok((rem, v)) |
355 | 2.10k | })?; <kerberos_parser::krb5::KdcReqBody as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#4}Line | Count | Source | 351 | 2 | let (i, etype) = TaggedParser::from_der_and_then(CS, 8, i, |data| { | 352 | 2 | let (rem, v) = <Vec<i32>>::from_der(data)?; | 353 | 2 | let v = v.iter().map(|&e| EncryptionType(e)).collect(); | 354 | 2 | Ok((rem, v)) | 355 | 2 | })?; |
<kerberos_parser::krb5::KdcReqBody as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#4}Line | Count | Source | 351 | 2.10k | let (i, etype) = TaggedParser::from_der_and_then(CS, 8, i, |data| { | 352 | 2.10k | let (rem, v) = <Vec<i32>>::from_der(data)?; | 353 | 2.06k | let v = v.iter().map(|&e| EncryptionType(e)).collect(); | 354 | 2.06k | Ok((rem, v)) | 355 | 2.10k | })?; |
|
356 | 2.07k | let (i, addresses) = OptTaggedParser::new(CS, Tag(9)) |
357 | 2.07k | .parse_der(i, |_, data| parse_krb5_hostaddresses(data))?; Unexecuted instantiation: <kerberos_parser::krb5::KdcReqBody as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#5}<kerberos_parser::krb5::KdcReqBody as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#5}Line | Count | Source | 357 | 100 | .parse_der(i, |_, data| parse_krb5_hostaddresses(data))?; |
|
358 | 2.05k | let addresses = addresses.unwrap_or_default(); |
359 | 2.05k | let (i, enc_authorization_data) = OptTaggedParser::new(CS, Tag(10)) |
360 | 2.05k | .parse_der(i, |_, data| EncryptedData::from_der(data))?; Unexecuted instantiation: <kerberos_parser::krb5::KdcReqBody as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#6}<kerberos_parser::krb5::KdcReqBody as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#6}Line | Count | Source | 360 | 53 | .parse_der(i, |_, data| EncryptedData::from_der(data))?; |
|
361 | 2.05k | let (i, additional_tickets) = OptTaggedParser::new(CS, Tag(11)) |
362 | 2.05k | .parse_der(i, |_, data| <Vec<Ticket>>::from_der(data))?; Unexecuted instantiation: <kerberos_parser::krb5::KdcReqBody as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#7}Unexecuted instantiation: <kerberos_parser::krb5::KdcReqBody as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#7} |
363 | 2.05k | let additional_tickets = additional_tickets.unwrap_or_default(); |
364 | 2.05k | let body = KdcReqBody { |
365 | 2.05k | kdc_options, |
366 | 2.05k | cname, |
367 | 2.05k | realm, |
368 | 2.05k | sname, |
369 | 2.05k | from, |
370 | 2.05k | till, |
371 | 2.05k | rtime, |
372 | 2.05k | nonce, |
373 | 2.05k | etype, |
374 | 2.05k | addresses, |
375 | 2.05k | enc_authorization_data, |
376 | 2.05k | additional_tickets, |
377 | 2.05k | }; |
378 | 2.05k | Ok((i, body)) |
379 | 2.49k | }) <kerberos_parser::krb5::KdcReqBody as asn1_rs::traits::FromDer>::from_der::{closure#0}Line | Count | Source | 338 | 3 | Sequence::from_der_and_then(bytes, |i| { | 339 | 3 | let (i, kdc_options) = TaggedParser::from_der_and_then(CS, 0, i, parse_kerberos_flags)?; | 340 | 3 | let (i, cname) = OptTaggedParser::new(CS, Tag(1)) | 341 | 3 | .parse_der(i, |_, data| PrincipalName::from_der(data))?; | 342 | 3 | let (i, realm) = TaggedParser::from_der_and_then(CS, 2, i, Realm::from_der)?; | 343 | 3 | let (i, sname) = OptTaggedParser::new(CS, Tag(3)) | 344 | 3 | .parse_der(i, |_, data| PrincipalName::from_der(data))?; | 345 | 2 | let (i, from) = OptTaggedParser::new(CS, Tag(4)) | 346 | 2 | .parse_der(i, |_, data| parse_kerberos_time(data))?; | 347 | 2 | let (i, till) = TaggedParser::from_der_and_then(CS, 5, i, parse_kerberos_time)?; | 348 | 2 | let (i, rtime) = OptTaggedParser::new(CS, Tag(6)) | 349 | 2 | .parse_der(i, |_, data| parse_kerberos_time(data))?; | 350 | 2 | let (i, nonce) = TaggedParser::from_der_and_then(CS, 7, i, u32::from_der)?; | 351 | 2 | let (i, etype) = TaggedParser::from_der_and_then(CS, 8, i, |data| { | 352 | | let (rem, v) = <Vec<i32>>::from_der(data)?; | 353 | | let v = v.iter().map(|&e| EncryptionType(e)).collect(); | 354 | | Ok((rem, v)) | 355 | 0 | })?; | 356 | 2 | let (i, addresses) = OptTaggedParser::new(CS, Tag(9)) | 357 | 2 | .parse_der(i, |_, data| parse_krb5_hostaddresses(data))?; | 358 | 2 | let addresses = addresses.unwrap_or_default(); | 359 | 2 | let (i, enc_authorization_data) = OptTaggedParser::new(CS, Tag(10)) | 360 | 2 | .parse_der(i, |_, data| EncryptedData::from_der(data))?; | 361 | 2 | let (i, additional_tickets) = OptTaggedParser::new(CS, Tag(11)) | 362 | 2 | .parse_der(i, |_, data| <Vec<Ticket>>::from_der(data))?; | 363 | 2 | let additional_tickets = additional_tickets.unwrap_or_default(); | 364 | 2 | let body = KdcReqBody { | 365 | 2 | kdc_options, | 366 | 2 | cname, | 367 | 2 | realm, | 368 | 2 | sname, | 369 | 2 | from, | 370 | 2 | till, | 371 | 2 | rtime, | 372 | 2 | nonce, | 373 | 2 | etype, | 374 | 2 | addresses, | 375 | 2 | enc_authorization_data, | 376 | 2 | additional_tickets, | 377 | 2 | }; | 378 | 2 | Ok((i, body)) | 379 | 3 | }) |
<kerberos_parser::krb5::KdcReqBody as asn1_rs::traits::FromDer>::from_der::{closure#0}Line | Count | Source | 338 | 2.49k | Sequence::from_der_and_then(bytes, |i| { | 339 | 2.49k | let (i, kdc_options) = TaggedParser::from_der_and_then(CS, 0, i, parse_kerberos_flags)?; | 340 | 2.47k | let (i, cname) = OptTaggedParser::new(CS, Tag(1)) | 341 | 2.47k | .parse_der(i, |_, data| PrincipalName::from_der(data))?; | 342 | 2.23k | let (i, realm) = TaggedParser::from_der_and_then(CS, 2, i, Realm::from_der)?; | 343 | 2.21k | let (i, sname) = OptTaggedParser::new(CS, Tag(3)) | 344 | 2.21k | .parse_der(i, |_, data| PrincipalName::from_der(data))?; | 345 | 2.18k | let (i, from) = OptTaggedParser::new(CS, Tag(4)) | 346 | 2.18k | .parse_der(i, |_, data| parse_kerberos_time(data))?; | 347 | 2.18k | let (i, till) = TaggedParser::from_der_and_then(CS, 5, i, parse_kerberos_time)?; | 348 | 2.17k | let (i, rtime) = OptTaggedParser::new(CS, Tag(6)) | 349 | 2.17k | .parse_der(i, |_, data| parse_kerberos_time(data))?; | 350 | 2.12k | let (i, nonce) = TaggedParser::from_der_and_then(CS, 7, i, u32::from_der)?; | 351 | 2.11k | let (i, etype) = TaggedParser::from_der_and_then(CS, 8, i, |data| { | 352 | | let (rem, v) = <Vec<i32>>::from_der(data)?; | 353 | | let v = v.iter().map(|&e| EncryptionType(e)).collect(); | 354 | | Ok((rem, v)) | 355 | 51 | })?; | 356 | 2.06k | let (i, addresses) = OptTaggedParser::new(CS, Tag(9)) | 357 | 2.06k | .parse_der(i, |_, data| parse_krb5_hostaddresses(data))?; | 358 | 2.05k | let addresses = addresses.unwrap_or_default(); | 359 | 2.05k | let (i, enc_authorization_data) = OptTaggedParser::new(CS, Tag(10)) | 360 | 2.05k | .parse_der(i, |_, data| EncryptedData::from_der(data))?; | 361 | 2.05k | let (i, additional_tickets) = OptTaggedParser::new(CS, Tag(11)) | 362 | 2.05k | .parse_der(i, |_, data| <Vec<Ticket>>::from_der(data))?; | 363 | 2.05k | let additional_tickets = additional_tickets.unwrap_or_default(); | 364 | 2.05k | let body = KdcReqBody { | 365 | 2.05k | kdc_options, | 366 | 2.05k | cname, | 367 | 2.05k | realm, | 368 | 2.05k | sname, | 369 | 2.05k | from, | 370 | 2.05k | till, | 371 | 2.05k | rtime, | 372 | 2.05k | nonce, | 373 | 2.05k | etype, | 374 | 2.05k | addresses, | 375 | 2.05k | enc_authorization_data, | 376 | 2.05k | additional_tickets, | 377 | 2.05k | }; | 378 | 2.05k | Ok((i, body)) | 379 | 2.49k | }) |
|
380 | 2.58k | } <kerberos_parser::krb5::KdcReqBody as asn1_rs::traits::FromDer>::from_der Line | Count | Source | 337 | 3 | fn from_der(bytes: &'a [u8]) -> ParseResult<Self, Error> { | 338 | 3 | Sequence::from_der_and_then(bytes, |i| { | 339 | | let (i, kdc_options) = TaggedParser::from_der_and_then(CS, 0, i, parse_kerberos_flags)?; | 340 | | let (i, cname) = OptTaggedParser::new(CS, Tag(1)) | 341 | | .parse_der(i, |_, data| PrincipalName::from_der(data))?; | 342 | | let (i, realm) = TaggedParser::from_der_and_then(CS, 2, i, Realm::from_der)?; | 343 | | let (i, sname) = OptTaggedParser::new(CS, Tag(3)) | 344 | | .parse_der(i, |_, data| PrincipalName::from_der(data))?; | 345 | | let (i, from) = OptTaggedParser::new(CS, Tag(4)) | 346 | | .parse_der(i, |_, data| parse_kerberos_time(data))?; | 347 | | let (i, till) = TaggedParser::from_der_and_then(CS, 5, i, parse_kerberos_time)?; | 348 | | let (i, rtime) = OptTaggedParser::new(CS, Tag(6)) | 349 | | .parse_der(i, |_, data| parse_kerberos_time(data))?; | 350 | | let (i, nonce) = TaggedParser::from_der_and_then(CS, 7, i, u32::from_der)?; | 351 | | let (i, etype) = TaggedParser::from_der_and_then(CS, 8, i, |data| { | 352 | | let (rem, v) = <Vec<i32>>::from_der(data)?; | 353 | | let v = v.iter().map(|&e| EncryptionType(e)).collect(); | 354 | | Ok((rem, v)) | 355 | | })?; | 356 | | let (i, addresses) = OptTaggedParser::new(CS, Tag(9)) | 357 | | .parse_der(i, |_, data| parse_krb5_hostaddresses(data))?; | 358 | | let addresses = addresses.unwrap_or_default(); | 359 | | let (i, enc_authorization_data) = OptTaggedParser::new(CS, Tag(10)) | 360 | | .parse_der(i, |_, data| EncryptedData::from_der(data))?; | 361 | | let (i, additional_tickets) = OptTaggedParser::new(CS, Tag(11)) | 362 | | .parse_der(i, |_, data| <Vec<Ticket>>::from_der(data))?; | 363 | | let additional_tickets = additional_tickets.unwrap_or_default(); | 364 | | let body = KdcReqBody { | 365 | | kdc_options, | 366 | | cname, | 367 | | realm, | 368 | | sname, | 369 | | from, | 370 | | till, | 371 | | rtime, | 372 | | nonce, | 373 | | etype, | 374 | | addresses, | 375 | | enc_authorization_data, | 376 | | additional_tickets, | 377 | | }; | 378 | | Ok((i, body)) | 379 | | }) | 380 | 3 | } |
<kerberos_parser::krb5::KdcReqBody as asn1_rs::traits::FromDer>::from_der Line | Count | Source | 337 | 2.58k | fn from_der(bytes: &'a [u8]) -> ParseResult<Self, Error> { | 338 | 2.58k | Sequence::from_der_and_then(bytes, |i| { | 339 | | let (i, kdc_options) = TaggedParser::from_der_and_then(CS, 0, i, parse_kerberos_flags)?; | 340 | | let (i, cname) = OptTaggedParser::new(CS, Tag(1)) | 341 | | .parse_der(i, |_, data| PrincipalName::from_der(data))?; | 342 | | let (i, realm) = TaggedParser::from_der_and_then(CS, 2, i, Realm::from_der)?; | 343 | | let (i, sname) = OptTaggedParser::new(CS, Tag(3)) | 344 | | .parse_der(i, |_, data| PrincipalName::from_der(data))?; | 345 | | let (i, from) = OptTaggedParser::new(CS, Tag(4)) | 346 | | .parse_der(i, |_, data| parse_kerberos_time(data))?; | 347 | | let (i, till) = TaggedParser::from_der_and_then(CS, 5, i, parse_kerberos_time)?; | 348 | | let (i, rtime) = OptTaggedParser::new(CS, Tag(6)) | 349 | | .parse_der(i, |_, data| parse_kerberos_time(data))?; | 350 | | let (i, nonce) = TaggedParser::from_der_and_then(CS, 7, i, u32::from_der)?; | 351 | | let (i, etype) = TaggedParser::from_der_and_then(CS, 8, i, |data| { | 352 | | let (rem, v) = <Vec<i32>>::from_der(data)?; | 353 | | let v = v.iter().map(|&e| EncryptionType(e)).collect(); | 354 | | Ok((rem, v)) | 355 | | })?; | 356 | | let (i, addresses) = OptTaggedParser::new(CS, Tag(9)) | 357 | | .parse_der(i, |_, data| parse_krb5_hostaddresses(data))?; | 358 | | let addresses = addresses.unwrap_or_default(); | 359 | | let (i, enc_authorization_data) = OptTaggedParser::new(CS, Tag(10)) | 360 | | .parse_der(i, |_, data| EncryptedData::from_der(data))?; | 361 | | let (i, additional_tickets) = OptTaggedParser::new(CS, Tag(11)) | 362 | | .parse_der(i, |_, data| <Vec<Ticket>>::from_der(data))?; | 363 | | let additional_tickets = additional_tickets.unwrap_or_default(); | 364 | | let body = KdcReqBody { | 365 | | kdc_options, | 366 | | cname, | 367 | | realm, | 368 | | sname, | 369 | | from, | 370 | | till, | 371 | | rtime, | 372 | | nonce, | 373 | | etype, | 374 | | addresses, | 375 | | enc_authorization_data, | 376 | | additional_tickets, | 377 | | }; | 378 | | Ok((i, body)) | 379 | | }) | 380 | 2.58k | } |
|
381 | | } |
382 | | |
383 | | /// Parse a Kerberos AS Request |
384 | | /// |
385 | | /// <pre> |
386 | | /// AS-REQ ::= [APPLICATION 10] KDC-REQ |
387 | | /// </pre> |
388 | 4.23k | pub fn parse_as_req(i: &[u8]) -> IResult<&[u8], KdcReq, Error> { |
389 | 4.23k | TaggedParser::from_der_and_then(Class::Application, 10, i, KdcReq::from_der) |
390 | 4.23k | } kerberos_parser::krb5_parser::parse_as_req Line | Count | Source | 388 | 566 | pub fn parse_as_req(i: &[u8]) -> IResult<&[u8], KdcReq, Error> { | 389 | 566 | TaggedParser::from_der_and_then(Class::Application, 10, i, KdcReq::from_der) | 390 | 566 | } |
kerberos_parser::krb5_parser::parse_as_req Line | Count | Source | 388 | 3.67k | pub fn parse_as_req(i: &[u8]) -> IResult<&[u8], KdcReq, Error> { | 389 | 3.67k | TaggedParser::from_der_and_then(Class::Application, 10, i, KdcReq::from_der) | 390 | 3.67k | } |
|
391 | | |
392 | | /// Parse a Kerberos TGS Request |
393 | | /// |
394 | | /// <pre> |
395 | | /// TGS-REQ ::= [APPLICATION 12] KDC-REQ |
396 | | /// </pre> |
397 | 17.5k | pub fn parse_tgs_req(i: &[u8]) -> IResult<&[u8], KdcReq, Error> { |
398 | 17.5k | TaggedParser::from_der_and_then(Class::Application, 12, i, KdcReq::from_der) |
399 | 17.5k | } kerberos_parser::krb5_parser::parse_tgs_req Line | Count | Source | 397 | 14.6k | pub fn parse_tgs_req(i: &[u8]) -> IResult<&[u8], KdcReq, Error> { | 398 | 14.6k | TaggedParser::from_der_and_then(Class::Application, 12, i, KdcReq::from_der) | 399 | 14.6k | } |
kerberos_parser::krb5_parser::parse_tgs_req Line | Count | Source | 397 | 2.85k | pub fn parse_tgs_req(i: &[u8]) -> IResult<&[u8], KdcReq, Error> { | 398 | 2.85k | TaggedParser::from_der_and_then(Class::Application, 12, i, KdcReq::from_der) | 399 | 2.85k | } |
|
400 | | |
401 | | /// Parse a Kerberos KDC Reply |
402 | | /// |
403 | | /// <pre> |
404 | | /// KDC-REP ::= SEQUENCE { |
405 | | /// pvno [0] INTEGER (5), |
406 | | /// msg-type [1] INTEGER (11 -- AS -- | 13 -- TGS --), |
407 | | /// padata [2] SEQUENCE OF PA-DATA OPTIONAL |
408 | | /// -- NOTE: not empty --, |
409 | | /// crealm [3] Realm, |
410 | | /// cname [4] PrincipalName, |
411 | | /// ticket [5] Ticket, |
412 | | /// enc-part [6] EncryptedData |
413 | | /// -- EncASRepPart or EncTGSRepPart, |
414 | | /// -- as appropriate |
415 | | /// } |
416 | | /// </pre> |
417 | | #[deprecated( |
418 | | since = "0.8.0", |
419 | | note = "Parsing functions are deprecated. Users should instead use the FromDer trait" |
420 | | )] |
421 | | #[inline] |
422 | 0 | pub fn parse_kdc_rep(i: &[u8]) -> IResult<&[u8], KdcRep, Error> { |
423 | 0 | KdcRep::from_der(i) |
424 | 0 | } Unexecuted instantiation: kerberos_parser::krb5_parser::parse_kdc_rep Unexecuted instantiation: kerberos_parser::krb5_parser::parse_kdc_rep |
425 | | |
426 | | /// Parse a Kerberos KDC Reply |
427 | | /// |
428 | | /// <pre> |
429 | | /// KDC-REP ::= SEQUENCE { |
430 | | /// pvno [0] INTEGER (5), |
431 | | /// msg-type [1] INTEGER (11 -- AS -- | 13 -- TGS --), |
432 | | /// padata [2] SEQUENCE OF PA-DATA OPTIONAL |
433 | | /// -- NOTE: not empty --, |
434 | | /// crealm [3] Realm, |
435 | | /// cname [4] PrincipalName, |
436 | | /// ticket [5] Ticket, |
437 | | /// enc-part [6] EncryptedData |
438 | | /// -- EncASRepPart or EncTGSRepPart, |
439 | | /// -- as appropriate |
440 | | /// } |
441 | | /// </pre> |
442 | | impl<'a> FromDer<'a> for KdcRep<'a> { |
443 | 14.8k | fn from_der(bytes: &'a [u8]) -> ParseResult<Self, Error> { |
444 | 14.8k | Sequence::from_der_and_then(bytes, |i| { |
445 | 5.78k | let (i, pvno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; |
446 | 1.09k | let (i, msg_type) = TaggedParser::from_der_and_then(CS, 1, i, u32::from_der)?; |
447 | 139 | let msg_type = MessageType(msg_type); |
448 | 139 | let (i, padata) = OptTaggedParser::new(CS, Tag(2)) |
449 | 139 | .parse_der(i, |_, data| parse_krb5_padata_sequence(data))?; Unexecuted instantiation: <kerberos_parser::krb5::KdcRep as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}<kerberos_parser::krb5::KdcRep as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}Line | Count | Source | 449 | 36 | .parse_der(i, |_, data| parse_krb5_padata_sequence(data))?; |
|
450 | 136 | let padata = padata.unwrap_or_default(); |
451 | 136 | let (i, crealm) = TaggedParser::from_der_and_then(CS, 3, i, Realm::from_der)?; |
452 | 134 | let (i, cname) = TaggedParser::from_der_and_then(CS, 4, i, PrincipalName::from_der)?; |
453 | 131 | let (i, ticket) = TaggedParser::from_der_and_then(CS, 5, i, Ticket::from_der)?; |
454 | 109 | let (i, enc_part) = TaggedParser::from_der_and_then(CS, 6, i, EncryptedData::from_der)?; |
455 | 99 | let rep = KdcRep { |
456 | 99 | pvno, |
457 | 99 | msg_type, |
458 | 99 | padata, |
459 | 99 | crealm, |
460 | 99 | cname, |
461 | 99 | ticket, |
462 | 99 | enc_part, |
463 | 99 | }; |
464 | 99 | Ok((i, rep)) |
465 | 5.78k | }) <kerberos_parser::krb5::KdcRep as asn1_rs::traits::FromDer>::from_der::{closure#0}Line | Count | Source | 444 | 6 | Sequence::from_der_and_then(bytes, |i| { | 445 | 6 | let (i, pvno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; | 446 | 0 | let (i, msg_type) = TaggedParser::from_der_and_then(CS, 1, i, u32::from_der)?; | 447 | 0 | let msg_type = MessageType(msg_type); | 448 | 0 | let (i, padata) = OptTaggedParser::new(CS, Tag(2)) | 449 | 0 | .parse_der(i, |_, data| parse_krb5_padata_sequence(data))?; | 450 | 0 | let padata = padata.unwrap_or_default(); | 451 | 0 | let (i, crealm) = TaggedParser::from_der_and_then(CS, 3, i, Realm::from_der)?; | 452 | 0 | let (i, cname) = TaggedParser::from_der_and_then(CS, 4, i, PrincipalName::from_der)?; | 453 | 0 | let (i, ticket) = TaggedParser::from_der_and_then(CS, 5, i, Ticket::from_der)?; | 454 | 0 | let (i, enc_part) = TaggedParser::from_der_and_then(CS, 6, i, EncryptedData::from_der)?; | 455 | 0 | let rep = KdcRep { | 456 | 0 | pvno, | 457 | 0 | msg_type, | 458 | 0 | padata, | 459 | 0 | crealm, | 460 | 0 | cname, | 461 | 0 | ticket, | 462 | 0 | enc_part, | 463 | 0 | }; | 464 | 0 | Ok((i, rep)) | 465 | 6 | }) |
<kerberos_parser::krb5::KdcRep as asn1_rs::traits::FromDer>::from_der::{closure#0}Line | Count | Source | 444 | 5.78k | Sequence::from_der_and_then(bytes, |i| { | 445 | 5.78k | let (i, pvno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; | 446 | 1.09k | let (i, msg_type) = TaggedParser::from_der_and_then(CS, 1, i, u32::from_der)?; | 447 | 139 | let msg_type = MessageType(msg_type); | 448 | 139 | let (i, padata) = OptTaggedParser::new(CS, Tag(2)) | 449 | 139 | .parse_der(i, |_, data| parse_krb5_padata_sequence(data))?; | 450 | 136 | let padata = padata.unwrap_or_default(); | 451 | 136 | let (i, crealm) = TaggedParser::from_der_and_then(CS, 3, i, Realm::from_der)?; | 452 | 134 | let (i, cname) = TaggedParser::from_der_and_then(CS, 4, i, PrincipalName::from_der)?; | 453 | 131 | let (i, ticket) = TaggedParser::from_der_and_then(CS, 5, i, Ticket::from_der)?; | 454 | 109 | let (i, enc_part) = TaggedParser::from_der_and_then(CS, 6, i, EncryptedData::from_der)?; | 455 | 99 | let rep = KdcRep { | 456 | 99 | pvno, | 457 | 99 | msg_type, | 458 | 99 | padata, | 459 | 99 | crealm, | 460 | 99 | cname, | 461 | 99 | ticket, | 462 | 99 | enc_part, | 463 | 99 | }; | 464 | 99 | Ok((i, rep)) | 465 | 5.78k | }) |
|
466 | 14.8k | } <kerberos_parser::krb5::KdcRep as asn1_rs::traits::FromDer>::from_der Line | Count | Source | 443 | 474 | fn from_der(bytes: &'a [u8]) -> ParseResult<Self, Error> { | 444 | 474 | Sequence::from_der_and_then(bytes, |i| { | 445 | | let (i, pvno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; | 446 | | let (i, msg_type) = TaggedParser::from_der_and_then(CS, 1, i, u32::from_der)?; | 447 | | let msg_type = MessageType(msg_type); | 448 | | let (i, padata) = OptTaggedParser::new(CS, Tag(2)) | 449 | | .parse_der(i, |_, data| parse_krb5_padata_sequence(data))?; | 450 | | let padata = padata.unwrap_or_default(); | 451 | | let (i, crealm) = TaggedParser::from_der_and_then(CS, 3, i, Realm::from_der)?; | 452 | | let (i, cname) = TaggedParser::from_der_and_then(CS, 4, i, PrincipalName::from_der)?; | 453 | | let (i, ticket) = TaggedParser::from_der_and_then(CS, 5, i, Ticket::from_der)?; | 454 | | let (i, enc_part) = TaggedParser::from_der_and_then(CS, 6, i, EncryptedData::from_der)?; | 455 | | let rep = KdcRep { | 456 | | pvno, | 457 | | msg_type, | 458 | | padata, | 459 | | crealm, | 460 | | cname, | 461 | | ticket, | 462 | | enc_part, | 463 | | }; | 464 | | Ok((i, rep)) | 465 | | }) | 466 | 474 | } |
<kerberos_parser::krb5::KdcRep as asn1_rs::traits::FromDer>::from_der Line | Count | Source | 443 | 14.3k | fn from_der(bytes: &'a [u8]) -> ParseResult<Self, Error> { | 444 | 14.3k | Sequence::from_der_and_then(bytes, |i| { | 445 | | let (i, pvno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; | 446 | | let (i, msg_type) = TaggedParser::from_der_and_then(CS, 1, i, u32::from_der)?; | 447 | | let msg_type = MessageType(msg_type); | 448 | | let (i, padata) = OptTaggedParser::new(CS, Tag(2)) | 449 | | .parse_der(i, |_, data| parse_krb5_padata_sequence(data))?; | 450 | | let padata = padata.unwrap_or_default(); | 451 | | let (i, crealm) = TaggedParser::from_der_and_then(CS, 3, i, Realm::from_der)?; | 452 | | let (i, cname) = TaggedParser::from_der_and_then(CS, 4, i, PrincipalName::from_der)?; | 453 | | let (i, ticket) = TaggedParser::from_der_and_then(CS, 5, i, Ticket::from_der)?; | 454 | | let (i, enc_part) = TaggedParser::from_der_and_then(CS, 6, i, EncryptedData::from_der)?; | 455 | | let rep = KdcRep { | 456 | | pvno, | 457 | | msg_type, | 458 | | padata, | 459 | | crealm, | 460 | | cname, | 461 | | ticket, | 462 | | enc_part, | 463 | | }; | 464 | | Ok((i, rep)) | 465 | | }) | 466 | 14.3k | } |
|
467 | | } |
468 | | |
469 | | /// Parse a Kerberos AS Reply |
470 | | /// |
471 | | /// <pre> |
472 | | /// AS-REP ::= [APPLICATION 11] KDC-REP |
473 | | /// </pre> |
474 | 8.09k | pub fn parse_as_rep(i: &[u8]) -> IResult<&[u8], KdcRep, Error> { |
475 | 8.09k | TaggedParser::from_der_and_then(Class::Application, 11, i, KdcRep::from_der) |
476 | 8.09k | } kerberos_parser::krb5_parser::parse_as_rep Line | Count | Source | 474 | 653 | pub fn parse_as_rep(i: &[u8]) -> IResult<&[u8], KdcRep, Error> { | 475 | 653 | TaggedParser::from_der_and_then(Class::Application, 11, i, KdcRep::from_der) | 476 | 653 | } |
kerberos_parser::krb5_parser::parse_as_rep Line | Count | Source | 474 | 7.44k | pub fn parse_as_rep(i: &[u8]) -> IResult<&[u8], KdcRep, Error> { | 475 | 7.44k | TaggedParser::from_der_and_then(Class::Application, 11, i, KdcRep::from_der) | 476 | 7.44k | } |
|
477 | | |
478 | | /// Parse a Kerberos TGS Reply |
479 | | /// |
480 | | /// <pre> |
481 | | /// TGS-REP ::= [APPLICATION 13] KDC-REP |
482 | | /// </pre> |
483 | 54.0k | pub fn parse_tgs_rep(i: &[u8]) -> IResult<&[u8], KdcRep, Error> { |
484 | 54.0k | TaggedParser::from_der_and_then(Class::Application, 13, i, KdcRep::from_der) |
485 | 54.0k | } kerberos_parser::krb5_parser::parse_tgs_rep Line | Count | Source | 483 | 601 | pub fn parse_tgs_rep(i: &[u8]) -> IResult<&[u8], KdcRep, Error> { | 484 | 601 | TaggedParser::from_der_and_then(Class::Application, 13, i, KdcRep::from_der) | 485 | 601 | } |
kerberos_parser::krb5_parser::parse_tgs_rep Line | Count | Source | 483 | 53.4k | pub fn parse_tgs_rep(i: &[u8]) -> IResult<&[u8], KdcRep, Error> { | 484 | 53.4k | TaggedParser::from_der_and_then(Class::Application, 13, i, KdcRep::from_der) | 485 | 53.4k | } |
|
486 | | |
487 | | /// Parse a Kerberos Error |
488 | | /// |
489 | | /// <pre> |
490 | | /// KRB-ERROR ::= [APPLICATION 30] SEQUENCE { |
491 | | /// pvno [0] INTEGER (5), |
492 | | /// msg-type [1] INTEGER (30), |
493 | | /// ctime [2] KerberosTime OPTIONAL, |
494 | | /// cusec [3] Microseconds OPTIONAL, |
495 | | /// stime [4] KerberosTime, |
496 | | /// susec [5] Microseconds, |
497 | | /// error-code [6] Int32, |
498 | | /// crealm [7] Realm OPTIONAL, |
499 | | /// cname [8] PrincipalName OPTIONAL, |
500 | | /// realm [9] Realm -- service realm --, |
501 | | /// sname [10] PrincipalName -- service name --, |
502 | | /// e-text [11] KerberosString OPTIONAL, |
503 | | /// e-data [12] OCTET STRING OPTIONAL |
504 | | /// } |
505 | | /// </pre> |
506 | | #[deprecated( |
507 | | since = "0.8.0", |
508 | | note = "Parsing functions are deprecated. Users should instead use the FromDer trait" |
509 | | )] |
510 | | #[inline] |
511 | 0 | pub fn parse_krb_error(i: &[u8]) -> IResult<&[u8], KrbError, Error> { |
512 | 0 | KrbError::from_der(i) |
513 | 0 | } Unexecuted instantiation: kerberos_parser::krb5_parser::parse_krb_error Unexecuted instantiation: kerberos_parser::krb5_parser::parse_krb_error |
514 | | |
515 | | /// Parse a Kerberos Error |
516 | | /// |
517 | | /// <pre> |
518 | | /// KRB-ERROR ::= [APPLICATION 30] SEQUENCE { |
519 | | /// pvno [0] INTEGER (5), |
520 | | /// msg-type [1] INTEGER (30), |
521 | | /// ctime [2] KerberosTime OPTIONAL, |
522 | | /// cusec [3] Microseconds OPTIONAL, |
523 | | /// stime [4] KerberosTime, |
524 | | /// susec [5] Microseconds, |
525 | | /// error-code [6] Int32, |
526 | | /// crealm [7] Realm OPTIONAL, |
527 | | /// cname [8] PrincipalName OPTIONAL, |
528 | | /// realm [9] Realm -- service realm --, |
529 | | /// sname [10] PrincipalName -- service name --, |
530 | | /// e-text [11] KerberosString OPTIONAL, |
531 | | /// e-data [12] OCTET STRING OPTIONAL |
532 | | /// } |
533 | | /// </pre> |
534 | | impl<'a> FromDer<'a> for KrbError<'a> { |
535 | 25.1k | fn from_der(bytes: &'a [u8]) -> ParseResult<Self, Error> { |
536 | 25.1k | TaggedParser::from_der_and_then(Class::Application, 30, bytes, |inner| { |
537 | 7.64k | Sequence::from_der_and_then(inner, |i| { |
538 | 4.05k | let (i, pvno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; |
539 | 2.94k | let (i, msg_type) = TaggedParser::from_der_and_then(CS, 1, i, u32::from_der)?; |
540 | 2.93k | let msg_type = MessageType(msg_type); |
541 | 2.93k | let (i, ctime) = OptTaggedParser::new(CS, Tag(2)) |
542 | 2.93k | .parse_der(i, |_, data| parse_kerberos_time(data))?; Unexecuted instantiation: <kerberos_parser::krb5::KrbError as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}::{closure#0}Unexecuted instantiation: <kerberos_parser::krb5::KrbError as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}::{closure#0} |
543 | 2.93k | let (i, cusec) = OptTaggedParser::new(CS, Tag(3)) |
544 | 2.93k | .parse_der(i, |_, data| parse_der_microseconds(data))?; Unexecuted instantiation: <kerberos_parser::krb5::KrbError as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}::{closure#1}Unexecuted instantiation: <kerberos_parser::krb5::KrbError as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}::{closure#1} |
545 | 2.93k | let (i, stime) = TaggedParser::from_der_and_then(CS, 4, i, parse_kerberos_time)?; |
546 | 2.71k | let (i, susec) = TaggedParser::from_der_and_then(CS, 5, i, parse_der_microseconds)?; |
547 | 2.68k | let (i, error_code) = TaggedParser::from_der_and_then(CS, 6, i, i32::from_der)?; |
548 | 2.68k | let error_code = ErrorCode(error_code); |
549 | 2.68k | let (i, crealm) = OptTaggedParser::new(CS, Tag(7)) |
550 | 2.68k | .parse_der(i, |_, data| Realm::from_der(data))?; Unexecuted instantiation: <kerberos_parser::krb5::KrbError as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}::{closure#2}Unexecuted instantiation: <kerberos_parser::krb5::KrbError as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}::{closure#2} |
551 | 2.67k | let (i, cname) = OptTaggedParser::new(CS, Tag(8)) |
552 | 2.67k | .parse_der(i, |_, data| PrincipalName::from_der(data))?; Unexecuted instantiation: <kerberos_parser::krb5::KrbError as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}::{closure#3}Unexecuted instantiation: <kerberos_parser::krb5::KrbError as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}::{closure#3} |
553 | 2.67k | let (i, realm) = TaggedParser::from_der_and_then(CS, 9, i, Realm::from_der)?; |
554 | 2.44k | let (i, sname) = |
555 | 2.65k | TaggedParser::from_der_and_then(CS, 10, i, PrincipalName::from_der)?; |
556 | 2.44k | let (i, etext) = OptTaggedParser::new(CS, Tag(11)) |
557 | 2.44k | .parse_der(i, |_, data| parse_kerberos_string(data))?; Unexecuted instantiation: <kerberos_parser::krb5::KrbError as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}::{closure#4}Unexecuted instantiation: <kerberos_parser::krb5::KrbError as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}::{closure#4} |
558 | 2.43k | let (i, edata) = OptTaggedParser::new(CS, Tag(12)) |
559 | 2.43k | .parse_der(i, |_, data| <&[u8]>::from_der(data))?; Unexecuted instantiation: <kerberos_parser::krb5::KrbError as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}::{closure#5}<kerberos_parser::krb5::KrbError as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}::{closure#5}Line | Count | Source | 559 | 2.43k | .parse_der(i, |_, data| <&[u8]>::from_der(data))?; |
|
560 | 2.43k | let err = KrbError { |
561 | 2.43k | pvno, |
562 | 2.43k | msg_type, |
563 | 2.43k | ctime, |
564 | 2.43k | cusec, |
565 | 2.43k | stime, |
566 | 2.43k | susec, |
567 | 2.43k | error_code, |
568 | 2.43k | crealm, |
569 | 2.43k | cname, |
570 | 2.43k | realm, |
571 | 2.43k | sname, |
572 | 2.43k | etext, |
573 | 2.43k | edata, |
574 | 2.43k | }; |
575 | 2.43k | Ok((i, err)) |
576 | 4.05k | }) <kerberos_parser::krb5::KrbError as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}Line | Count | Source | 537 | 75 | Sequence::from_der_and_then(inner, |i| { | 538 | 75 | let (i, pvno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; | 539 | 1 | let (i, msg_type) = TaggedParser::from_der_and_then(CS, 1, i, u32::from_der)?; | 540 | 1 | let msg_type = MessageType(msg_type); | 541 | 1 | let (i, ctime) = OptTaggedParser::new(CS, Tag(2)) | 542 | 1 | .parse_der(i, |_, data| parse_kerberos_time(data))?; | 543 | 1 | let (i, cusec) = OptTaggedParser::new(CS, Tag(3)) | 544 | 1 | .parse_der(i, |_, data| parse_der_microseconds(data))?; | 545 | 1 | let (i, stime) = TaggedParser::from_der_and_then(CS, 4, i, parse_kerberos_time)?; | 546 | 1 | let (i, susec) = TaggedParser::from_der_and_then(CS, 5, i, parse_der_microseconds)?; | 547 | 1 | let (i, error_code) = TaggedParser::from_der_and_then(CS, 6, i, i32::from_der)?; | 548 | 1 | let error_code = ErrorCode(error_code); | 549 | 1 | let (i, crealm) = OptTaggedParser::new(CS, Tag(7)) | 550 | 1 | .parse_der(i, |_, data| Realm::from_der(data))?; | 551 | 1 | let (i, cname) = OptTaggedParser::new(CS, Tag(8)) | 552 | 1 | .parse_der(i, |_, data| PrincipalName::from_der(data))?; | 553 | 1 | let (i, realm) = TaggedParser::from_der_and_then(CS, 9, i, Realm::from_der)?; | 554 | 0 | let (i, sname) = | 555 | 1 | TaggedParser::from_der_and_then(CS, 10, i, PrincipalName::from_der)?; | 556 | 0 | let (i, etext) = OptTaggedParser::new(CS, Tag(11)) | 557 | 0 | .parse_der(i, |_, data| parse_kerberos_string(data))?; | 558 | 0 | let (i, edata) = OptTaggedParser::new(CS, Tag(12)) | 559 | 0 | .parse_der(i, |_, data| <&[u8]>::from_der(data))?; | 560 | 0 | let err = KrbError { | 561 | 0 | pvno, | 562 | 0 | msg_type, | 563 | 0 | ctime, | 564 | 0 | cusec, | 565 | 0 | stime, | 566 | 0 | susec, | 567 | 0 | error_code, | 568 | 0 | crealm, | 569 | 0 | cname, | 570 | 0 | realm, | 571 | 0 | sname, | 572 | 0 | etext, | 573 | 0 | edata, | 574 | 0 | }; | 575 | 0 | Ok((i, err)) | 576 | 75 | }) |
<kerberos_parser::krb5::KrbError as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}Line | Count | Source | 537 | 3.98k | Sequence::from_der_and_then(inner, |i| { | 538 | 3.98k | let (i, pvno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; | 539 | 2.94k | let (i, msg_type) = TaggedParser::from_der_and_then(CS, 1, i, u32::from_der)?; | 540 | 2.93k | let msg_type = MessageType(msg_type); | 541 | 2.93k | let (i, ctime) = OptTaggedParser::new(CS, Tag(2)) | 542 | 2.93k | .parse_der(i, |_, data| parse_kerberos_time(data))?; | 543 | 2.93k | let (i, cusec) = OptTaggedParser::new(CS, Tag(3)) | 544 | 2.93k | .parse_der(i, |_, data| parse_der_microseconds(data))?; | 545 | 2.93k | let (i, stime) = TaggedParser::from_der_and_then(CS, 4, i, parse_kerberos_time)?; | 546 | 2.70k | let (i, susec) = TaggedParser::from_der_and_then(CS, 5, i, parse_der_microseconds)?; | 547 | 2.68k | let (i, error_code) = TaggedParser::from_der_and_then(CS, 6, i, i32::from_der)?; | 548 | 2.68k | let error_code = ErrorCode(error_code); | 549 | 2.68k | let (i, crealm) = OptTaggedParser::new(CS, Tag(7)) | 550 | 2.68k | .parse_der(i, |_, data| Realm::from_der(data))?; | 551 | 2.67k | let (i, cname) = OptTaggedParser::new(CS, Tag(8)) | 552 | 2.67k | .parse_der(i, |_, data| PrincipalName::from_der(data))?; | 553 | 2.67k | let (i, realm) = TaggedParser::from_der_and_then(CS, 9, i, Realm::from_der)?; | 554 | 2.44k | let (i, sname) = | 555 | 2.64k | TaggedParser::from_der_and_then(CS, 10, i, PrincipalName::from_der)?; | 556 | 2.44k | let (i, etext) = OptTaggedParser::new(CS, Tag(11)) | 557 | 2.44k | .parse_der(i, |_, data| parse_kerberos_string(data))?; | 558 | 2.43k | let (i, edata) = OptTaggedParser::new(CS, Tag(12)) | 559 | 2.43k | .parse_der(i, |_, data| <&[u8]>::from_der(data))?; | 560 | 2.43k | let err = KrbError { | 561 | 2.43k | pvno, | 562 | 2.43k | msg_type, | 563 | 2.43k | ctime, | 564 | 2.43k | cusec, | 565 | 2.43k | stime, | 566 | 2.43k | susec, | 567 | 2.43k | error_code, | 568 | 2.43k | crealm, | 569 | 2.43k | cname, | 570 | 2.43k | realm, | 571 | 2.43k | sname, | 572 | 2.43k | etext, | 573 | 2.43k | edata, | 574 | 2.43k | }; | 575 | 2.43k | Ok((i, err)) | 576 | 3.98k | }) |
|
577 | 7.64k | }) <kerberos_parser::krb5::KrbError as asn1_rs::traits::FromDer>::from_der::{closure#0}Line | Count | Source | 536 | 2.99k | TaggedParser::from_der_and_then(Class::Application, 30, bytes, |inner| { | 537 | 2.99k | Sequence::from_der_and_then(inner, |i| { | 538 | | let (i, pvno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; | 539 | | let (i, msg_type) = TaggedParser::from_der_and_then(CS, 1, i, u32::from_der)?; | 540 | | let msg_type = MessageType(msg_type); | 541 | | let (i, ctime) = OptTaggedParser::new(CS, Tag(2)) | 542 | | .parse_der(i, |_, data| parse_kerberos_time(data))?; | 543 | | let (i, cusec) = OptTaggedParser::new(CS, Tag(3)) | 544 | | .parse_der(i, |_, data| parse_der_microseconds(data))?; | 545 | | let (i, stime) = TaggedParser::from_der_and_then(CS, 4, i, parse_kerberos_time)?; | 546 | | let (i, susec) = TaggedParser::from_der_and_then(CS, 5, i, parse_der_microseconds)?; | 547 | | let (i, error_code) = TaggedParser::from_der_and_then(CS, 6, i, i32::from_der)?; | 548 | | let error_code = ErrorCode(error_code); | 549 | | let (i, crealm) = OptTaggedParser::new(CS, Tag(7)) | 550 | | .parse_der(i, |_, data| Realm::from_der(data))?; | 551 | | let (i, cname) = OptTaggedParser::new(CS, Tag(8)) | 552 | | .parse_der(i, |_, data| PrincipalName::from_der(data))?; | 553 | | let (i, realm) = TaggedParser::from_der_and_then(CS, 9, i, Realm::from_der)?; | 554 | | let (i, sname) = | 555 | | TaggedParser::from_der_and_then(CS, 10, i, PrincipalName::from_der)?; | 556 | | let (i, etext) = OptTaggedParser::new(CS, Tag(11)) | 557 | | .parse_der(i, |_, data| parse_kerberos_string(data))?; | 558 | | let (i, edata) = OptTaggedParser::new(CS, Tag(12)) | 559 | | .parse_der(i, |_, data| <&[u8]>::from_der(data))?; | 560 | | let err = KrbError { | 561 | | pvno, | 562 | | msg_type, | 563 | | ctime, | 564 | | cusec, | 565 | | stime, | 566 | | susec, | 567 | | error_code, | 568 | | crealm, | 569 | | cname, | 570 | | realm, | 571 | | sname, | 572 | | etext, | 573 | | edata, | 574 | | }; | 575 | | Ok((i, err)) | 576 | | }) | 577 | 2.99k | }) |
<kerberos_parser::krb5::KrbError as asn1_rs::traits::FromDer>::from_der::{closure#0}Line | Count | Source | 536 | 4.65k | TaggedParser::from_der_and_then(Class::Application, 30, bytes, |inner| { | 537 | 4.65k | Sequence::from_der_and_then(inner, |i| { | 538 | | let (i, pvno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; | 539 | | let (i, msg_type) = TaggedParser::from_der_and_then(CS, 1, i, u32::from_der)?; | 540 | | let msg_type = MessageType(msg_type); | 541 | | let (i, ctime) = OptTaggedParser::new(CS, Tag(2)) | 542 | | .parse_der(i, |_, data| parse_kerberos_time(data))?; | 543 | | let (i, cusec) = OptTaggedParser::new(CS, Tag(3)) | 544 | | .parse_der(i, |_, data| parse_der_microseconds(data))?; | 545 | | let (i, stime) = TaggedParser::from_der_and_then(CS, 4, i, parse_kerberos_time)?; | 546 | | let (i, susec) = TaggedParser::from_der_and_then(CS, 5, i, parse_der_microseconds)?; | 547 | | let (i, error_code) = TaggedParser::from_der_and_then(CS, 6, i, i32::from_der)?; | 548 | | let error_code = ErrorCode(error_code); | 549 | | let (i, crealm) = OptTaggedParser::new(CS, Tag(7)) | 550 | | .parse_der(i, |_, data| Realm::from_der(data))?; | 551 | | let (i, cname) = OptTaggedParser::new(CS, Tag(8)) | 552 | | .parse_der(i, |_, data| PrincipalName::from_der(data))?; | 553 | | let (i, realm) = TaggedParser::from_der_and_then(CS, 9, i, Realm::from_der)?; | 554 | | let (i, sname) = | 555 | | TaggedParser::from_der_and_then(CS, 10, i, PrincipalName::from_der)?; | 556 | | let (i, etext) = OptTaggedParser::new(CS, Tag(11)) | 557 | | .parse_der(i, |_, data| parse_kerberos_string(data))?; | 558 | | let (i, edata) = OptTaggedParser::new(CS, Tag(12)) | 559 | | .parse_der(i, |_, data| <&[u8]>::from_der(data))?; | 560 | | let err = KrbError { | 561 | | pvno, | 562 | | msg_type, | 563 | | ctime, | 564 | | cusec, | 565 | | stime, | 566 | | susec, | 567 | | error_code, | 568 | | crealm, | 569 | | cname, | 570 | | realm, | 571 | | sname, | 572 | | etext, | 573 | | edata, | 574 | | }; | 575 | | Ok((i, err)) | 576 | | }) | 577 | 4.65k | }) |
|
578 | 25.1k | } <kerberos_parser::krb5::KrbError as asn1_rs::traits::FromDer>::from_der Line | Count | Source | 535 | 19.7k | fn from_der(bytes: &'a [u8]) -> ParseResult<Self, Error> { | 536 | 19.7k | TaggedParser::from_der_and_then(Class::Application, 30, bytes, |inner| { | 537 | | Sequence::from_der_and_then(inner, |i| { | 538 | | let (i, pvno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; | 539 | | let (i, msg_type) = TaggedParser::from_der_and_then(CS, 1, i, u32::from_der)?; | 540 | | let msg_type = MessageType(msg_type); | 541 | | let (i, ctime) = OptTaggedParser::new(CS, Tag(2)) | 542 | | .parse_der(i, |_, data| parse_kerberos_time(data))?; | 543 | | let (i, cusec) = OptTaggedParser::new(CS, Tag(3)) | 544 | | .parse_der(i, |_, data| parse_der_microseconds(data))?; | 545 | | let (i, stime) = TaggedParser::from_der_and_then(CS, 4, i, parse_kerberos_time)?; | 546 | | let (i, susec) = TaggedParser::from_der_and_then(CS, 5, i, parse_der_microseconds)?; | 547 | | let (i, error_code) = TaggedParser::from_der_and_then(CS, 6, i, i32::from_der)?; | 548 | | let error_code = ErrorCode(error_code); | 549 | | let (i, crealm) = OptTaggedParser::new(CS, Tag(7)) | 550 | | .parse_der(i, |_, data| Realm::from_der(data))?; | 551 | | let (i, cname) = OptTaggedParser::new(CS, Tag(8)) | 552 | | .parse_der(i, |_, data| PrincipalName::from_der(data))?; | 553 | | let (i, realm) = TaggedParser::from_der_and_then(CS, 9, i, Realm::from_der)?; | 554 | | let (i, sname) = | 555 | | TaggedParser::from_der_and_then(CS, 10, i, PrincipalName::from_der)?; | 556 | | let (i, etext) = OptTaggedParser::new(CS, Tag(11)) | 557 | | .parse_der(i, |_, data| parse_kerberos_string(data))?; | 558 | | let (i, edata) = OptTaggedParser::new(CS, Tag(12)) | 559 | | .parse_der(i, |_, data| <&[u8]>::from_der(data))?; | 560 | | let err = KrbError { | 561 | | pvno, | 562 | | msg_type, | 563 | | ctime, | 564 | | cusec, | 565 | | stime, | 566 | | susec, | 567 | | error_code, | 568 | | crealm, | 569 | | cname, | 570 | | realm, | 571 | | sname, | 572 | | etext, | 573 | | edata, | 574 | | }; | 575 | | Ok((i, err)) | 576 | | }) | 577 | | }) | 578 | 19.7k | } |
<kerberos_parser::krb5::KrbError as asn1_rs::traits::FromDer>::from_der Line | Count | Source | 535 | 5.38k | fn from_der(bytes: &'a [u8]) -> ParseResult<Self, Error> { | 536 | 5.38k | TaggedParser::from_der_and_then(Class::Application, 30, bytes, |inner| { | 537 | | Sequence::from_der_and_then(inner, |i| { | 538 | | let (i, pvno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; | 539 | | let (i, msg_type) = TaggedParser::from_der_and_then(CS, 1, i, u32::from_der)?; | 540 | | let msg_type = MessageType(msg_type); | 541 | | let (i, ctime) = OptTaggedParser::new(CS, Tag(2)) | 542 | | .parse_der(i, |_, data| parse_kerberos_time(data))?; | 543 | | let (i, cusec) = OptTaggedParser::new(CS, Tag(3)) | 544 | | .parse_der(i, |_, data| parse_der_microseconds(data))?; | 545 | | let (i, stime) = TaggedParser::from_der_and_then(CS, 4, i, parse_kerberos_time)?; | 546 | | let (i, susec) = TaggedParser::from_der_and_then(CS, 5, i, parse_der_microseconds)?; | 547 | | let (i, error_code) = TaggedParser::from_der_and_then(CS, 6, i, i32::from_der)?; | 548 | | let error_code = ErrorCode(error_code); | 549 | | let (i, crealm) = OptTaggedParser::new(CS, Tag(7)) | 550 | | .parse_der(i, |_, data| Realm::from_der(data))?; | 551 | | let (i, cname) = OptTaggedParser::new(CS, Tag(8)) | 552 | | .parse_der(i, |_, data| PrincipalName::from_der(data))?; | 553 | | let (i, realm) = TaggedParser::from_der_and_then(CS, 9, i, Realm::from_der)?; | 554 | | let (i, sname) = | 555 | | TaggedParser::from_der_and_then(CS, 10, i, PrincipalName::from_der)?; | 556 | | let (i, etext) = OptTaggedParser::new(CS, Tag(11)) | 557 | | .parse_der(i, |_, data| parse_kerberos_string(data))?; | 558 | | let (i, edata) = OptTaggedParser::new(CS, Tag(12)) | 559 | | .parse_der(i, |_, data| <&[u8]>::from_der(data))?; | 560 | | let err = KrbError { | 561 | | pvno, | 562 | | msg_type, | 563 | | ctime, | 564 | | cusec, | 565 | | stime, | 566 | | susec, | 567 | | error_code, | 568 | | crealm, | 569 | | cname, | 570 | | realm, | 571 | | sname, | 572 | | etext, | 573 | | edata, | 574 | | }; | 575 | | Ok((i, err)) | 576 | | }) | 577 | | }) | 578 | 5.38k | } |
|
579 | | } |
580 | | |
581 | | /// Parse Kerberos PA-Data |
582 | | /// |
583 | | /// <pre> |
584 | | /// PA-DATA ::= SEQUENCE { |
585 | | /// -- NOTE: first tag is [1], not [0] |
586 | | /// padata-type [1] Int32, |
587 | | /// padata-value [2] OCTET STRING -- might be encoded AP-REQ |
588 | | /// } |
589 | | /// </pre> |
590 | | #[deprecated( |
591 | | since = "0.8.0", |
592 | | note = "Parsing functions are deprecated. Users should instead use the FromDer trait" |
593 | | )] |
594 | | #[inline] |
595 | 0 | pub fn parse_krb5_padata(i: &[u8]) -> IResult<&[u8], PAData, Error> { |
596 | 0 | PAData::from_der(i) |
597 | 0 | } Unexecuted instantiation: kerberos_parser::krb5_parser::parse_krb5_padata Unexecuted instantiation: kerberos_parser::krb5_parser::parse_krb5_padata |
598 | | |
599 | | /// Parse Kerberos PA-Data |
600 | | /// |
601 | | /// <pre> |
602 | | /// PA-DATA ::= SEQUENCE { |
603 | | /// -- NOTE: first tag is [1], not [0] |
604 | | /// padata-type [1] Int32, |
605 | | /// padata-value [2] OCTET STRING -- might be encoded AP-REQ |
606 | | /// } |
607 | | /// </pre> |
608 | | impl<'a> FromDer<'a> for PAData<'a> { |
609 | 5.57k | fn from_der(bytes: &'a [u8]) -> ParseResult<Self, Error> { |
610 | 5.57k | Sequence::from_der_and_then(bytes, |i| { |
611 | 2.86k | let (i, padata_type) = TaggedParser::from_der_and_then(CS, 1, i, i32::from_der)?; |
612 | 2.85k | let padata_type = PAType(padata_type); |
613 | 2.85k | let (i, padata_value) = TaggedParser::from_der_and_then(CS, 2, i, <&[u8]>::from_der)?; |
614 | 2.84k | let padata = PAData { |
615 | 2.84k | padata_type, |
616 | 2.84k | padata_value, |
617 | 2.84k | }; |
618 | 2.84k | Ok((i, padata)) |
619 | 2.86k | }) <kerberos_parser::krb5::PAData as asn1_rs::traits::FromDer>::from_der::{closure#0}Line | Count | Source | 610 | 1 | Sequence::from_der_and_then(bytes, |i| { | 611 | 1 | let (i, padata_type) = TaggedParser::from_der_and_then(CS, 1, i, i32::from_der)?; | 612 | 1 | let padata_type = PAType(padata_type); | 613 | 1 | let (i, padata_value) = TaggedParser::from_der_and_then(CS, 2, i, <&[u8]>::from_der)?; | 614 | 1 | let padata = PAData { | 615 | 1 | padata_type, | 616 | 1 | padata_value, | 617 | 1 | }; | 618 | 1 | Ok((i, padata)) | 619 | 1 | }) |
<kerberos_parser::krb5::PAData as asn1_rs::traits::FromDer>::from_der::{closure#0}Line | Count | Source | 610 | 2.86k | Sequence::from_der_and_then(bytes, |i| { | 611 | 2.86k | let (i, padata_type) = TaggedParser::from_der_and_then(CS, 1, i, i32::from_der)?; | 612 | 2.85k | let padata_type = PAType(padata_type); | 613 | 2.85k | let (i, padata_value) = TaggedParser::from_der_and_then(CS, 2, i, <&[u8]>::from_der)?; | 614 | 2.84k | let padata = PAData { | 615 | 2.84k | padata_type, | 616 | 2.84k | padata_value, | 617 | 2.84k | }; | 618 | 2.84k | Ok((i, padata)) | 619 | 2.86k | }) |
|
620 | 5.57k | } <kerberos_parser::krb5::PAData as asn1_rs::traits::FromDer>::from_der Line | Count | Source | 609 | 2 | fn from_der(bytes: &'a [u8]) -> ParseResult<Self, Error> { | 610 | 2 | Sequence::from_der_and_then(bytes, |i| { | 611 | | let (i, padata_type) = TaggedParser::from_der_and_then(CS, 1, i, i32::from_der)?; | 612 | | let padata_type = PAType(padata_type); | 613 | | let (i, padata_value) = TaggedParser::from_der_and_then(CS, 2, i, <&[u8]>::from_der)?; | 614 | | let padata = PAData { | 615 | | padata_type, | 616 | | padata_value, | 617 | | }; | 618 | | Ok((i, padata)) | 619 | | }) | 620 | 2 | } |
<kerberos_parser::krb5::PAData as asn1_rs::traits::FromDer>::from_der Line | Count | Source | 609 | 5.57k | fn from_der(bytes: &'a [u8]) -> ParseResult<Self, Error> { | 610 | 5.57k | Sequence::from_der_and_then(bytes, |i| { | 611 | | let (i, padata_type) = TaggedParser::from_der_and_then(CS, 1, i, i32::from_der)?; | 612 | | let padata_type = PAType(padata_type); | 613 | | let (i, padata_value) = TaggedParser::from_der_and_then(CS, 2, i, <&[u8]>::from_der)?; | 614 | | let padata = PAData { | 615 | | padata_type, | 616 | | padata_value, | 617 | | }; | 618 | | Ok((i, padata)) | 619 | | }) | 620 | 5.57k | } |
|
621 | | } |
622 | | |
623 | 2.75k | fn parse_krb5_padata_sequence(i: &[u8]) -> IResult<&[u8], Vec<PAData>, Error> { |
624 | 2.75k | parse_ber_sequence_of_v(PAData::from_der)(i) |
625 | 2.75k | } kerberos_parser::krb5_parser::parse_krb5_padata_sequence Line | Count | Source | 623 | 1 | fn parse_krb5_padata_sequence(i: &[u8]) -> IResult<&[u8], Vec<PAData>, Error> { | 624 | 1 | parse_ber_sequence_of_v(PAData::from_der)(i) | 625 | 1 | } |
kerberos_parser::krb5_parser::parse_krb5_padata_sequence Line | Count | Source | 623 | 2.75k | fn parse_krb5_padata_sequence(i: &[u8]) -> IResult<&[u8], Vec<PAData>, Error> { | 624 | 2.75k | parse_ber_sequence_of_v(PAData::from_der)(i) | 625 | 2.75k | } |
|
626 | | |
627 | | /// Parse a Kerberos AP Request |
628 | | /// |
629 | | /// <pre> |
630 | | /// AP-REQ ::= [APPLICATION 14] SEQUENCE { |
631 | | /// pvno [0] INTEGER (5), |
632 | | /// msg-type [1] INTEGER (14), |
633 | | /// ap-options [2] APOptions, |
634 | | /// ticket [3] Ticket, |
635 | | /// authenticator [4] EncryptedData -- Authenticator |
636 | | /// } |
637 | | /// |
638 | | /// APOptions ::= KerberosFlags |
639 | | /// -- reserved(0), |
640 | | /// -- use-session-key(1), |
641 | | /// -- mutual-required(2) |
642 | | /// </pre> |
643 | | #[deprecated( |
644 | | since = "0.8.0", |
645 | | note = "Parsing functions are deprecated. Users should instead use the FromDer trait" |
646 | | )] |
647 | | #[inline] |
648 | 0 | pub fn parse_ap_req(i: &[u8]) -> IResult<&[u8], ApReq, Error> { |
649 | 0 | ApReq::from_der(i) |
650 | 0 | } Unexecuted instantiation: kerberos_parser::krb5_parser::parse_ap_req Unexecuted instantiation: kerberos_parser::krb5_parser::parse_ap_req |
651 | | |
652 | | /// Parse a Kerberos AP Request |
653 | | /// |
654 | | /// <pre> |
655 | | /// AP-REQ ::= [APPLICATION 14] SEQUENCE { |
656 | | /// pvno [0] INTEGER (5), |
657 | | /// msg-type [1] INTEGER (14), |
658 | | /// ap-options [2] APOptions, |
659 | | /// ticket [3] Ticket, |
660 | | /// authenticator [4] EncryptedData -- Authenticator |
661 | | /// } |
662 | | /// |
663 | | /// APOptions ::= KerberosFlags |
664 | | /// -- reserved(0), |
665 | | /// -- use-session-key(1), |
666 | | /// -- mutual-required(2) |
667 | | /// </pre> |
668 | | impl<'a> FromDer<'a> for ApReq<'a> { |
669 | 714 | fn from_der(bytes: &'a [u8]) -> ParseResult<Self, Error> { |
670 | 714 | TaggedParser::from_der_and_then(Class::Application, 14, bytes, |inner| { |
671 | 708 | Sequence::from_der_and_then(inner, |i| { |
672 | 704 | let (i, pvno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; |
673 | 702 | let (i, msg_type) = TaggedParser::from_der_and_then(CS, 1, i, u32::from_der)?; |
674 | 695 | let msg_type = MessageType(msg_type); |
675 | 692 | let (i, ap_options) = |
676 | 695 | TaggedParser::from_der_and_then(CS, 2, i, parse_kerberos_flags)?; |
677 | 692 | let (i, ticket) = TaggedParser::from_der_and_then(CS, 3, i, Ticket::from_der)?; |
678 | 636 | let (i, authenticator) = |
679 | 657 | TaggedParser::from_der_and_then(CS, 4, i, EncryptedData::from_der)?; |
680 | 636 | let req = ApReq { |
681 | 636 | pvno, |
682 | 636 | msg_type, |
683 | 636 | ap_options, |
684 | 636 | ticket, |
685 | 636 | authenticator, |
686 | 636 | }; |
687 | 636 | Ok((i, req)) |
688 | 704 | }) <kerberos_parser::krb5::ApReq as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}Line | Count | Source | 671 | 6 | Sequence::from_der_and_then(inner, |i| { | 672 | 6 | let (i, pvno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; | 673 | 6 | let (i, msg_type) = TaggedParser::from_der_and_then(CS, 1, i, u32::from_der)?; | 674 | 5 | let msg_type = MessageType(msg_type); | 675 | 5 | let (i, ap_options) = | 676 | 5 | TaggedParser::from_der_and_then(CS, 2, i, parse_kerberos_flags)?; | 677 | 5 | let (i, ticket) = TaggedParser::from_der_and_then(CS, 3, i, Ticket::from_der)?; | 678 | 5 | let (i, authenticator) = | 679 | 5 | TaggedParser::from_der_and_then(CS, 4, i, EncryptedData::from_der)?; | 680 | 5 | let req = ApReq { | 681 | 5 | pvno, | 682 | 5 | msg_type, | 683 | 5 | ap_options, | 684 | 5 | ticket, | 685 | 5 | authenticator, | 686 | 5 | }; | 687 | 5 | Ok((i, req)) | 688 | 6 | }) |
<kerberos_parser::krb5::ApReq as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}Line | Count | Source | 671 | 698 | Sequence::from_der_and_then(inner, |i| { | 672 | 698 | let (i, pvno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; | 673 | 696 | let (i, msg_type) = TaggedParser::from_der_and_then(CS, 1, i, u32::from_der)?; | 674 | 690 | let msg_type = MessageType(msg_type); | 675 | 687 | let (i, ap_options) = | 676 | 690 | TaggedParser::from_der_and_then(CS, 2, i, parse_kerberos_flags)?; | 677 | 687 | let (i, ticket) = TaggedParser::from_der_and_then(CS, 3, i, Ticket::from_der)?; | 678 | 631 | let (i, authenticator) = | 679 | 652 | TaggedParser::from_der_and_then(CS, 4, i, EncryptedData::from_der)?; | 680 | 631 | let req = ApReq { | 681 | 631 | pvno, | 682 | 631 | msg_type, | 683 | 631 | ap_options, | 684 | 631 | ticket, | 685 | 631 | authenticator, | 686 | 631 | }; | 687 | 631 | Ok((i, req)) | 688 | 698 | }) |
|
689 | 708 | }) <kerberos_parser::krb5::ApReq as asn1_rs::traits::FromDer>::from_der::{closure#0}Line | Count | Source | 670 | 6 | TaggedParser::from_der_and_then(Class::Application, 14, bytes, |inner| { | 671 | 6 | Sequence::from_der_and_then(inner, |i| { | 672 | | let (i, pvno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; | 673 | | let (i, msg_type) = TaggedParser::from_der_and_then(CS, 1, i, u32::from_der)?; | 674 | | let msg_type = MessageType(msg_type); | 675 | | let (i, ap_options) = | 676 | | TaggedParser::from_der_and_then(CS, 2, i, parse_kerberos_flags)?; | 677 | | let (i, ticket) = TaggedParser::from_der_and_then(CS, 3, i, Ticket::from_der)?; | 678 | | let (i, authenticator) = | 679 | | TaggedParser::from_der_and_then(CS, 4, i, EncryptedData::from_der)?; | 680 | | let req = ApReq { | 681 | | pvno, | 682 | | msg_type, | 683 | | ap_options, | 684 | | ticket, | 685 | | authenticator, | 686 | | }; | 687 | | Ok((i, req)) | 688 | | }) | 689 | 6 | }) |
<kerberos_parser::krb5::ApReq as asn1_rs::traits::FromDer>::from_der::{closure#0}Line | Count | Source | 670 | 702 | TaggedParser::from_der_and_then(Class::Application, 14, bytes, |inner| { | 671 | 702 | Sequence::from_der_and_then(inner, |i| { | 672 | | let (i, pvno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; | 673 | | let (i, msg_type) = TaggedParser::from_der_and_then(CS, 1, i, u32::from_der)?; | 674 | | let msg_type = MessageType(msg_type); | 675 | | let (i, ap_options) = | 676 | | TaggedParser::from_der_and_then(CS, 2, i, parse_kerberos_flags)?; | 677 | | let (i, ticket) = TaggedParser::from_der_and_then(CS, 3, i, Ticket::from_der)?; | 678 | | let (i, authenticator) = | 679 | | TaggedParser::from_der_and_then(CS, 4, i, EncryptedData::from_der)?; | 680 | | let req = ApReq { | 681 | | pvno, | 682 | | msg_type, | 683 | | ap_options, | 684 | | ticket, | 685 | | authenticator, | 686 | | }; | 687 | | Ok((i, req)) | 688 | | }) | 689 | 702 | }) |
|
690 | 714 | } <kerberos_parser::krb5::ApReq as asn1_rs::traits::FromDer>::from_der Line | Count | Source | 669 | 6 | fn from_der(bytes: &'a [u8]) -> ParseResult<Self, Error> { | 670 | 6 | TaggedParser::from_der_and_then(Class::Application, 14, bytes, |inner| { | 671 | | Sequence::from_der_and_then(inner, |i| { | 672 | | let (i, pvno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; | 673 | | let (i, msg_type) = TaggedParser::from_der_and_then(CS, 1, i, u32::from_der)?; | 674 | | let msg_type = MessageType(msg_type); | 675 | | let (i, ap_options) = | 676 | | TaggedParser::from_der_and_then(CS, 2, i, parse_kerberos_flags)?; | 677 | | let (i, ticket) = TaggedParser::from_der_and_then(CS, 3, i, Ticket::from_der)?; | 678 | | let (i, authenticator) = | 679 | | TaggedParser::from_der_and_then(CS, 4, i, EncryptedData::from_der)?; | 680 | | let req = ApReq { | 681 | | pvno, | 682 | | msg_type, | 683 | | ap_options, | 684 | | ticket, | 685 | | authenticator, | 686 | | }; | 687 | | Ok((i, req)) | 688 | | }) | 689 | | }) | 690 | 6 | } |
<kerberos_parser::krb5::ApReq as asn1_rs::traits::FromDer>::from_der Line | Count | Source | 669 | 708 | fn from_der(bytes: &'a [u8]) -> ParseResult<Self, Error> { | 670 | 708 | TaggedParser::from_der_and_then(Class::Application, 14, bytes, |inner| { | 671 | | Sequence::from_der_and_then(inner, |i| { | 672 | | let (i, pvno) = TaggedParser::from_der_and_then(CS, 0, i, u32::from_der)?; | 673 | | let (i, msg_type) = TaggedParser::from_der_and_then(CS, 1, i, u32::from_der)?; | 674 | | let msg_type = MessageType(msg_type); | 675 | | let (i, ap_options) = | 676 | | TaggedParser::from_der_and_then(CS, 2, i, parse_kerberos_flags)?; | 677 | | let (i, ticket) = TaggedParser::from_der_and_then(CS, 3, i, Ticket::from_der)?; | 678 | | let (i, authenticator) = | 679 | | TaggedParser::from_der_and_then(CS, 4, i, EncryptedData::from_der)?; | 680 | | let req = ApReq { | 681 | | pvno, | 682 | | msg_type, | 683 | | ap_options, | 684 | | ticket, | 685 | | authenticator, | 686 | | }; | 687 | | Ok((i, req)) | 688 | | }) | 689 | | }) | 690 | 708 | } |
|
691 | | } |
692 | | |
693 | | /// Parse a Kerberos AP Reply |
694 | | /// |
695 | | /// <pre> |
696 | | /// AP-REP ::= [APPLICATION 15] SEQUENCE { |
697 | | /// pvno [0] INTEGER (5), |
698 | | /// msg-type [1] INTEGER (15), |
699 | | /// enc-part [2] EncryptedData -- EncAPRepPart |
700 | | /// } |
701 | | /// </pre> |
702 | | #[deprecated( |
703 | | since = "0.8.0", |
704 | | note = "Parsing functions are deprecated. Users should instead use the FromDer trait" |
705 | | )] |
706 | | #[inline] |
707 | 0 | pub fn parse_ap_rep(i: &[u8]) -> IResult<&[u8], ApRep, Error> { |
708 | 0 | ApRep::from_der(i) |
709 | 0 | } Unexecuted instantiation: kerberos_parser::krb5_parser::parse_ap_rep Unexecuted instantiation: kerberos_parser::krb5_parser::parse_ap_rep |
710 | | |
711 | | /// Parse a Kerberos AP Reply |
712 | | /// |
713 | | /// <pre> |
714 | | /// AP-REP ::= [APPLICATION 15] SEQUENCE { |
715 | | /// pvno [0] INTEGER (5), |
716 | | /// msg-type [1] INTEGER (15), |
717 | | /// enc-part [2] EncryptedData -- EncAPRepPart |
718 | | /// } |
719 | | /// </pre> |
720 | | impl<'a> FromDer<'a> for ApRep<'a> { |
721 | 0 | fn from_der(bytes: &'a [u8]) -> ParseResult<Self, Error> { |
722 | 0 | TaggedParser::from_der_and_then(Class::Application, 15, bytes, |inner| { |
723 | 0 | Sequence::from_der_and_then(inner, |i| { |
724 | 0 | let (i, pvno) = TaggedExplicit::<u32, Error, 0>::from_der(i)?; |
725 | 0 | let (i, msg_type) = map(TaggedExplicit::<u32, Error, 1>::from_der, |m| { |
726 | 0 | MessageType(m.into_inner()) |
727 | 0 | })(i)?; Unexecuted instantiation: <kerberos_parser::krb5::ApRep as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}::{closure#0}Unexecuted instantiation: <kerberos_parser::krb5::ApRep as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}::{closure#0} |
728 | 0 | let (i, enc_part) = |
729 | 0 | TaggedParser::from_der_and_then(CS, 2, i, EncryptedData::from_der)?; |
730 | 0 | let rep = ApRep { |
731 | 0 | pvno: pvno.into_inner(), |
732 | 0 | msg_type, |
733 | 0 | enc_part, |
734 | 0 | }; |
735 | 0 | Ok((i, rep)) |
736 | 0 | }) Unexecuted instantiation: <kerberos_parser::krb5::ApRep as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0}Unexecuted instantiation: <kerberos_parser::krb5::ApRep as asn1_rs::traits::FromDer>::from_der::{closure#0}::{closure#0} |
737 | 0 | }) Unexecuted instantiation: <kerberos_parser::krb5::ApRep as asn1_rs::traits::FromDer>::from_der::{closure#0}Unexecuted instantiation: <kerberos_parser::krb5::ApRep as asn1_rs::traits::FromDer>::from_der::{closure#0} |
738 | 0 | } Unexecuted instantiation: <kerberos_parser::krb5::ApRep as asn1_rs::traits::FromDer>::from_der Unexecuted instantiation: <kerberos_parser::krb5::ApRep as asn1_rs::traits::FromDer>::from_der |
739 | | } |