/rust/registry/src/github.com-1ecc6299db9ec823/kerberos-parser-0.5.0/src/krb5_parser.rs
Line | Count | Source (jump to first uncovered line) |
1 | | //! Kerberos 5 parsing functions |
2 | | |
3 | | use der_parser::ber::*; |
4 | | use der_parser::der::*; |
5 | | use der_parser::error::*; |
6 | | use nom::error::ErrorKind; |
7 | | use nom::{Err, IResult}; |
8 | | use std::str; |
9 | | |
10 | | use crate::krb5::*; |
11 | | |
12 | | /// Parse a signed 32 bits integer |
13 | | /// |
14 | | /// <pre> |
15 | | /// Int32 ::= INTEGER (-2147483648..2147483647) |
16 | | /// -- signed values representable in 32 bits |
17 | | /// </pre> |
18 | 139k | pub fn parse_der_int32(i: &[u8]) -> IResult<&[u8], i32, BerError> { |
19 | 277k | map_res!(i, parse_der_integer, |x: DerObject| { |
20 | 138k | match x.content { |
21 | 277k | BerObjectContent::Integer(i) => match i.len() { |
22 | 277k | 1 => Ok(i[0] as i8 as i32), |
23 | 277k | 2 => Ok((i[0] as i8 as i32) << 8 | (i[1] as i32)), |
24 | 277k | 3 => Ok((i[0] as i8 as i32) << 16 | (i[1] as i32) << 8 | (i[2] as i32)), |
25 | 277k | 4 => Ok((i[0] as i8 as i32) << 24 |
26 | 64.8k | | (i[1] as i32) << 16 |
27 | 64.8k | | (i[2] as i32) << 8 |
28 | 64.8k | | (i[3] as i32)), |
29 | 277k | _ => Err(BerError::IntegerTooLarge), |
30 | 277k | }, |
31 | 277k | _ => Err(BerError::BerTypeError), |
32 | 277k | } |
33 | 277k | }) kerberos_parser::krb5_parser::parse_der_int32::{closure#0} Line | Count | Source | 19 | 139k | map_res!(i, parse_der_integer, |x: DerObject| { | 20 | 139k | match x.content { | 21 | 139k | BerObjectContent::Integer(i) => match i.len() { | 22 | 139k | 1 => Ok(i[0] as i8 as i32), | 23 | 139k | 2 => Ok((i[0] as i8 as i32) << 8 | (i[1] as i32)), | 24 | 139k | 3 => Ok((i[0] as i8 as i32) << 16 | (i[1] as i32) << 8 | (i[2] as i32)), | 25 | 139k | 4 => Ok((i[0] as i8 as i32) << 24 | 26 | 139k | | (i[1] as i32) << 16 | 27 | 139k | | (i[2] as i32) << 8 | 28 | 139k | | (i[3] as i32)), | 29 | 139k | _ => Err(BerError::IntegerTooLarge), | 30 | 139k | }, | 31 | 139k | _ => Err(BerError::BerTypeError), | 32 | 139k | } | 33 | 139k | }) |
kerberos_parser::krb5_parser::parse_der_int32::{closure#1} Line | Count | Source | 19 | 138k | map_res!(i, parse_der_integer, |x: DerObject| { | 20 | 138k | match x.content { | 21 | 138k | BerObjectContent::Integer(i) => match i.len() { | 22 | 138k | 1 => Ok(i[0] as i8 as i32), | 23 | 138k | 2 => Ok((i[0] as i8 as i32) << 8 | (i[1] as i32)), | 24 | 138k | 3 => Ok((i[0] as i8 as i32) << 16 | (i[1] as i32) << 8 | (i[2] as i32)), | 25 | 138k | 4 => Ok((i[0] as i8 as i32) << 24 | 26 | 138k | | (i[1] as i32) << 16 | 27 | 138k | | (i[2] as i32) << 8 | 28 | 138k | | (i[3] as i32)), | 29 | 138k | _ => Err(BerError::IntegerTooLarge), | 30 | 138k | }, | 31 | 138k | _ => Err(BerError::BerTypeError), | 32 | 138k | } | 33 | 138k | }) |
|
34 | 139k | } |
35 | | |
36 | | // Microseconds ::= INTEGER (0..999999) |
37 | | // -- microseconds |
38 | 68.9k | fn parse_der_microseconds(i: &[u8]) -> IResult<&[u8], u32, BerError> { |
39 | 68.9k | verify!(i, parse_der_u32, |x: &u32| *x <= 999_999) |
40 | 68.9k | } |
41 | | |
42 | | // helper macro to give same result as opt!(complete!(parse_der_tagged!(i,tag,fn) but with |
43 | | // less complexity, and faster |
44 | | macro_rules! opt_parse_der_tagged( |
45 | | ($i:expr, EXPLICIT $tag:expr, $submac:ident!( $($args:tt)*)) => ({ |
46 | | use der_parser::der::der_read_element_header; |
47 | | use nom::{Err, Needed}; |
48 | | match der_read_element_header($i) { |
49 | | Ok((rem,hdr)) => { |
50 | | if $tag != hdr.tag.0 { |
51 | | Ok(($i,None)) |
52 | | } else { |
53 | | let len = hdr.len as usize; |
54 | | if rem.len() < len { Err(Err::Incomplete(Needed::Size(len))) } // tag was correct, this really is an error |
55 | | else { |
56 | | match $submac!(&rem[0..len], $($args)*) { |
57 | | Ok((_,res)) => Ok((&rem[len..],Some(res))), |
58 | | _ => Ok(($i,None)) |
59 | | } |
60 | | } |
61 | | } |
62 | | }, |
63 | | _ => Ok(($i,None)) |
64 | | } |
65 | | }); |
66 | | ($i:expr, EXPLICIT $tag:expr, $f:ident) => ({ |
67 | | opt_parse_der_tagged!($i, EXPLICIT $tag, call!($f)) |
68 | | }); |
69 | | ); |
70 | | |
71 | | /// Parse a Kerberos string object |
72 | | /// |
73 | | /// <pre> |
74 | | /// KerberosString ::= GeneralString (IA5String) |
75 | | /// </pre> |
76 | 157k | pub fn parse_kerberos_string(i: &[u8]) -> IResult<&[u8], String, BerError> { |
77 | 157k | match parse_der_generalstring(i) { |
78 | 88.9k | Ok((rem, ref obj)) => { |
79 | 88.9k | if let BerObjectContent::GeneralString(s) = obj.content { |
80 | 88.9k | match str::from_utf8(s) { |
81 | 88.7k | Ok(r) => Ok((rem, r.to_owned())), |
82 | 237 | Err(_) => Err(Err::Error(error_position!(i, ErrorKind::IsNot))), |
83 | | } |
84 | | } else { |
85 | 0 | Err(Err::Error(error_position!(i, ErrorKind::Tag))) |
86 | | } |
87 | | } |
88 | 68.7k | Err(e) => Err(e), |
89 | | } |
90 | 157k | } |
91 | | |
92 | 65.6k | fn parse_kerberos_string_sequence(i: &[u8]) -> IResult<&[u8], Vec<String>, BerError> { |
93 | 72.4k | parse_der_struct!( kerberos_parser::krb5_parser::parse_kerberos_string_sequence::{closure#2} Line | Count | Source | 93 | 72.4k | parse_der_struct!( |
|
94 | 72.4k | i, |
95 | 72.4k | TAG DerTag::Sequence, kerberos_parser::krb5_parser::parse_kerberos_string_sequence::{closure#1} Line | Count | Source | 93 | 65.4k | parse_der_struct!( | 94 | | i, | 95 | 65.3k | TAG DerTag::Sequence, |
|
96 | 72.4k | v: many0!(complete!(parse_kerberos_string)) >> |
97 | 72.4k | ( v ) |
98 | 72.4k | ) kerberos_parser::krb5_parser::parse_kerberos_string_sequence::{closure#2}::{closure#0} Line | Count | Source | 93 | 72.4k | parse_der_struct!( | 94 | 72.4k | i, | 95 | 72.4k | TAG DerTag::Sequence, | 96 | 72.4k | v: many0!(complete!(parse_kerberos_string)) >> | 97 | 72.4k | ( v ) | 98 | 72.4k | ) |
|
99 | 65.6k | .map(|(rem, x)| (rem, x.1)) |
100 | 65.6k | } |
101 | | |
102 | | /// Parse Kerberos flags |
103 | | /// |
104 | | /// <pre> |
105 | | /// KerberosFlags ::= BIT STRING (SIZE (32..MAX)) |
106 | | /// -- minimum number of bits shall be sent, |
107 | | /// -- but no fewer than 32 |
108 | | /// </pre> |
109 | | #[inline] |
110 | 6.68k | pub fn parse_kerberos_flags(i: &[u8]) -> IResult<&[u8], DerObject, BerError> { |
111 | 6.68k | parse_der_bitstring(i) |
112 | 6.68k | } |
113 | | |
114 | | /// Parse of a Kerberos Realm |
115 | | /// |
116 | | /// <pre> |
117 | | /// Realm ::= KerberosString |
118 | | /// </pre> |
119 | | #[inline] |
120 | 83.9k | pub fn parse_krb5_realm(i: &[u8]) -> IResult<&[u8], Realm, BerError> { |
121 | 83.9k | map!(i, parse_kerberos_string, Realm) |
122 | 83.9k | } |
123 | | |
124 | | /// Parse Kerberos PrincipalName |
125 | | /// |
126 | | /// <pre> |
127 | | /// PrincipalName ::= SEQUENCE { |
128 | | /// name-type [0] Int32, |
129 | | /// name-string [1] SEQUENCE OF KerberosString |
130 | | /// } |
131 | | /// </pre> |
132 | 69.7k | pub fn parse_krb5_principalname(i: &[u8]) -> IResult<&[u8], PrincipalName, BerError> { |
133 | 69.7k | map_res!( kerberos_parser::krb5_parser::parse_krb5_principalname::{closure#0} Line | Count | Source | 133 | 69.7k | map_res!( |
|
134 | 268k | i, |
135 | 268k | parse_der_struct!( |
136 | 268k | t: parse_der_tagged!(EXPLICIT 0, parse_der_int32) |
137 | 268k | >> s: parse_der_tagged!(EXPLICIT 1, parse_kerberos_string_sequence) |
138 | 268k | >> (PrincipalName { |
139 | 268k | name_type: NameType(t), |
140 | 268k | name_string: s, |
141 | 268k | }) |
142 | 268k | ), |
143 | 268k | |(hdr, t): (BerObjectHeader, PrincipalName)| { |
144 | 64.9k | if hdr.tag != BerTag::Sequence { |
145 | 268k | return Err("not a sequence!"); |
146 | 268k | } |
147 | 63.9k | Ok(t) |
148 | 268k | } |
149 | 268k | ) kerberos_parser::krb5_parser::parse_krb5_principalname::{closure#0}::{closure#2} Line | Count | Source | 133 | 66.2k | map_res!( | 134 | 66.2k | i, | 135 | 66.2k | parse_der_struct!( | 136 | 66.2k | t: parse_der_tagged!(EXPLICIT 0, parse_der_int32) | 137 | 66.2k | >> s: parse_der_tagged!(EXPLICIT 1, parse_kerberos_string_sequence) | 138 | 66.2k | >> (PrincipalName { | 139 | 66.2k | name_type: NameType(t), | 140 | 66.2k | name_string: s, | 141 | 66.2k | }) | 142 | 66.2k | ), | 143 | 66.2k | |(hdr, t): (BerObjectHeader, PrincipalName)| { | 144 | 66.2k | if hdr.tag != BerTag::Sequence { | 145 | 66.2k | return Err("not a sequence!"); | 146 | 66.2k | } | 147 | 66.2k | Ok(t) | 148 | 66.2k | } | 149 | 66.2k | ) |
kerberos_parser::krb5_parser::parse_krb5_principalname::{closure#0}::{closure#1} Line | Count | Source | 133 | 68.4k | map_res!( | 134 | 68.4k | i, | 135 | 68.4k | parse_der_struct!( | 136 | 68.4k | t: parse_der_tagged!(EXPLICIT 0, parse_der_int32) | 137 | 68.4k | >> s: parse_der_tagged!(EXPLICIT 1, parse_kerberos_string_sequence) | 138 | 68.4k | >> (PrincipalName { | 139 | 68.4k | name_type: NameType(t), | 140 | 68.4k | name_string: s, | 141 | 68.4k | }) | 142 | 68.4k | ), | 143 | 68.4k | |(hdr, t): (BerObjectHeader, PrincipalName)| { | 144 | 68.4k | if hdr.tag != BerTag::Sequence { | 145 | 68.4k | return Err("not a sequence!"); | 146 | 68.4k | } | 147 | 68.4k | Ok(t) | 148 | 68.4k | } | 149 | 68.4k | ) |
kerberos_parser::krb5_parser::parse_krb5_principalname::{closure#1} Line | Count | Source | 133 | 64.9k | map_res!( | 134 | 64.9k | i, | 135 | 64.9k | parse_der_struct!( | 136 | 64.9k | t: parse_der_tagged!(EXPLICIT 0, parse_der_int32) | 137 | 64.9k | >> s: parse_der_tagged!(EXPLICIT 1, parse_kerberos_string_sequence) | 138 | 64.9k | >> (PrincipalName { | 139 | 64.9k | name_type: NameType(t), | 140 | 64.9k | name_string: s, | 141 | 64.9k | }) | 142 | 64.9k | ), | 143 | 64.9k | |(hdr, t): (BerObjectHeader, PrincipalName)| { | 144 | 64.9k | if hdr.tag != BerTag::Sequence { | 145 | 64.9k | return Err("not a sequence!"); | 146 | 64.9k | } | 147 | 64.9k | Ok(t) | 148 | 64.9k | } | 149 | 64.9k | ) |
kerberos_parser::krb5_parser::parse_krb5_principalname::{closure#0}::{closure#0} Line | Count | Source | 133 | 69.1k | map_res!( | 134 | 69.1k | i, | 135 | 69.1k | parse_der_struct!( | 136 | 69.1k | t: parse_der_tagged!(EXPLICIT 0, parse_der_int32) | 137 | 69.1k | >> s: parse_der_tagged!(EXPLICIT 1, parse_kerberos_string_sequence) | 138 | 69.1k | >> (PrincipalName { | 139 | 69.1k | name_type: NameType(t), | 140 | 69.1k | name_string: s, | 141 | 69.1k | }) | 142 | 69.1k | ), | 143 | 69.1k | |(hdr, t): (BerObjectHeader, PrincipalName)| { | 144 | 69.1k | if hdr.tag != BerTag::Sequence { | 145 | 69.1k | return Err("not a sequence!"); | 146 | 69.1k | } | 147 | 69.1k | Ok(t) | 148 | 69.1k | } | 149 | 69.1k | ) |
|
150 | 69.7k | } |
151 | | |
152 | | /// Parse of a Kerberos Time |
153 | | /// |
154 | | /// <pre> |
155 | | /// KerberosTime ::= GeneralizedTime -- with no fractional seconds |
156 | | /// </pre> |
157 | | #[inline] |
158 | 70.6k | pub fn parse_kerberos_time(i: &[u8]) -> IResult<&[u8], DerObject, BerError> { |
159 | 70.6k | parse_der_generalizedtime(i) |
160 | 70.6k | } |
161 | | |
162 | | /// Parse Kerberos HostAddress |
163 | | /// |
164 | | /// <pre> |
165 | | /// HostAddress ::= SEQUENCE { |
166 | | /// addr-type [0] Int32, |
167 | | /// address [1] OCTET STRING |
168 | | /// } |
169 | | /// </pre> |
170 | 0 | pub fn parse_krb5_hostaddress<'a>(i: &'a [u8]) -> IResult<&'a [u8], HostAddress<'a>, BerError> { |
171 | 0 | parse_der_struct!( Unexecuted instantiation: kerberos_parser::krb5_parser::parse_krb5_hostaddress::{closure#3} |
172 | 0 | i, |
173 | 0 | TAG DerTag::Sequence, Unexecuted instantiation: kerberos_parser::krb5_parser::parse_krb5_hostaddress::{closure#1} |
174 | 0 | t: parse_der_tagged!(EXPLICIT 0, parse_der_int32) >> |
175 | 0 | a: map_res!(parse_der_tagged!(EXPLICIT 1, parse_der_octetstring),|x: DerObject<'a>| x.as_slice()) >> |
176 | 0 | ( HostAddress{ |
177 | 0 | addr_type: AddressType(t), |
178 | 0 | address: a, |
179 | 0 | }) |
180 | 0 | ).map(|(rem,x)| (rem,x.1)) Unexecuted instantiation: kerberos_parser::krb5_parser::parse_krb5_hostaddress::{closure#2} Unexecuted instantiation: kerberos_parser::krb5_parser::parse_krb5_hostaddress::{closure#4} Unexecuted instantiation: kerberos_parser::krb5_parser::parse_krb5_hostaddress::{closure#3}::{closure#0} |
181 | 0 | } |
182 | | |
183 | | /// Parse Kerberos HostAddresses |
184 | | /// |
185 | | /// <pre> |
186 | | /// -- NOTE: HostAddresses is always used as an OPTIONAL field and |
187 | | /// -- should not be empty. |
188 | | /// HostAddresses -- NOTE: subtly different from rfc1510, |
189 | | /// -- but has a value mapping and encodes the same |
190 | | /// ::= SEQUENCE OF HostAddress |
191 | | /// </pre> |
192 | 0 | pub fn parse_krb5_hostaddresses(i: &[u8]) -> IResult<&[u8], Vec<HostAddress>, BerError> { |
193 | 0 | parse_der_struct!( Unexecuted instantiation: kerberos_parser::krb5_parser::parse_krb5_hostaddresses::{closure#2} |
194 | 0 | i, |
195 | 0 | TAG DerTag::Sequence, Unexecuted instantiation: kerberos_parser::krb5_parser::parse_krb5_hostaddresses::{closure#1} |
196 | 0 | v: many0!(complete!(parse_krb5_hostaddress)) >> |
197 | 0 | ( v ) |
198 | 0 | ) Unexecuted instantiation: kerberos_parser::krb5_parser::parse_krb5_hostaddresses::{closure#2}::{closure#0} |
199 | 0 | .map(|(rem, x)| (rem, x.1)) |
200 | 0 | } |
201 | | |
202 | | /// Parse Kerberos Ticket |
203 | | /// |
204 | | /// <pre> |
205 | | /// Ticket ::= [APPLICATION 1] SEQUENCE { |
206 | | /// tkt-vno [0] INTEGER (5), |
207 | | /// realm [1] Realm, |
208 | | /// sname [2] PrincipalName, |
209 | | /// enc-part [3] EncryptedData -- EncTicketPart |
210 | | /// } |
211 | | /// </pre> |
212 | 5.58k | pub fn parse_krb5_ticket<'a>(i: &'a [u8]) -> IResult<&'a [u8], Ticket<'a>, BerError> { |
213 | 6.00k | parse_der_application!( |
214 | 6.00k | i, |
215 | 6.00k | APPLICATION 1, |
216 | 6.00k | st: parse_der_struct!( |
217 | 6.00k | TAG DerTag::Sequence, |
218 | 6.00k | no: parse_der_tagged!(EXPLICIT 0, parse_der_u32) >> |
219 | 6.00k | error_if!(no != 5, ErrorKind::Tag) >> |
220 | 6.00k | r: parse_der_tagged!(EXPLICIT 1, parse_krb5_realm) >> |
221 | 6.00k | s: parse_der_tagged!(EXPLICIT 2, parse_krb5_principalname) >> |
222 | 6.00k | e: map_res!(parse_der,|x: DerObject<'a>| x.as_slice()) >> |
223 | 6.00k | ( Ticket{ |
224 | 6.00k | tkt_vno: no, |
225 | 6.00k | realm: r, |
226 | 6.00k | sname: s, |
227 | 6.00k | enc_part: e |
228 | 6.00k | }) |
229 | 6.00k | ) >> (st) |
230 | 6.00k | ) kerberos_parser::krb5_parser::parse_krb5_ticket::{closure#4} Line | Count | Source | 213 | 60 | parse_der_application!( | 214 | 60 | i, | 215 | 60 | APPLICATION 1, | 216 | 60 | st: parse_der_struct!( | 217 | 60 | TAG DerTag::Sequence, | 218 | 60 | no: parse_der_tagged!(EXPLICIT 0, parse_der_u32) >> | 219 | 60 | error_if!(no != 5, ErrorKind::Tag) >> | 220 | 60 | r: parse_der_tagged!(EXPLICIT 1, parse_krb5_realm) >> | 221 | 60 | s: parse_der_tagged!(EXPLICIT 2, parse_krb5_principalname) >> | 222 | 60 | e: map_res!(parse_der,|x: DerObject<'a>| x.as_slice()) >> | 223 | 60 | ( Ticket{ | 224 | 60 | tkt_vno: no, | 225 | 60 | realm: r, | 226 | 60 | sname: s, | 227 | 60 | enc_part: e | 228 | 60 | }) | 229 | 60 | ) >> (st) | 230 | 60 | ) |
kerberos_parser::krb5_parser::parse_krb5_ticket::{closure#3} Line | Count | Source | 213 | 653 | parse_der_application!( | 214 | 653 | i, | 215 | 653 | APPLICATION 1, | 216 | 653 | st: parse_der_struct!( | 217 | 653 | TAG DerTag::Sequence, | 218 | 653 | no: parse_der_tagged!(EXPLICIT 0, parse_der_u32) >> | 219 | 653 | error_if!(no != 5, ErrorKind::Tag) >> | 220 | 653 | r: parse_der_tagged!(EXPLICIT 1, parse_krb5_realm) >> | 221 | 653 | s: parse_der_tagged!(EXPLICIT 2, parse_krb5_principalname) >> | 222 | 653 | e: map_res!(parse_der,|x: DerObject<'a>| x.as_slice()) >> | 223 | 653 | ( Ticket{ | 224 | 653 | tkt_vno: no, | 225 | 653 | realm: r, | 226 | 653 | sname: s, | 227 | 653 | enc_part: e | 228 | 653 | }) | 229 | 653 | ) >> (st) | 230 | 653 | ) |
kerberos_parser::krb5_parser::parse_krb5_ticket::{closure#5} Line | Count | Source | 213 | 58 | parse_der_application!( | 214 | 58 | i, | 215 | 58 | APPLICATION 1, | 216 | 58 | st: parse_der_struct!( | 217 | 58 | TAG DerTag::Sequence, | 218 | 58 | no: parse_der_tagged!(EXPLICIT 0, parse_der_u32) >> | 219 | 58 | error_if!(no != 5, ErrorKind::Tag) >> | 220 | 58 | r: parse_der_tagged!(EXPLICIT 1, parse_krb5_realm) >> | 221 | 58 | s: parse_der_tagged!(EXPLICIT 2, parse_krb5_principalname) >> | 222 | 58 | e: map_res!(parse_der,|x: DerObject<'a>| x.as_slice()) >> | 223 | 58 | ( Ticket{ | 224 | 58 | tkt_vno: no, | 225 | 58 | realm: r, | 226 | 58 | sname: s, | 227 | 58 | enc_part: e | 228 | 58 | }) | 229 | 58 | ) >> (st) | 230 | 58 | ) |
kerberos_parser::krb5_parser::parse_krb5_ticket::{closure#1} Line | Count | Source | 213 | 5.14k | parse_der_application!( | 214 | 5.14k | i, | 215 | 5.14k | APPLICATION 1, | 216 | 5.14k | st: parse_der_struct!( | 217 | 5.14k | TAG DerTag::Sequence, | 218 | 5.14k | no: parse_der_tagged!(EXPLICIT 0, parse_der_u32) >> | 219 | 5.14k | error_if!(no != 5, ErrorKind::Tag) >> | 220 | 5.14k | r: parse_der_tagged!(EXPLICIT 1, parse_krb5_realm) >> | 221 | 5.14k | s: parse_der_tagged!(EXPLICIT 2, parse_krb5_principalname) >> | 222 | 5.14k | e: map_res!(parse_der,|x: DerObject<'a>| x.as_slice()) >> | 223 | 5.14k | ( Ticket{ | 224 | 5.14k | tkt_vno: no, | 225 | 5.14k | realm: r, | 226 | 5.14k | sname: s, | 227 | 5.14k | enc_part: e | 228 | 5.14k | }) | 229 | 5.14k | ) >> (st) | 230 | 5.14k | ) |
kerberos_parser::krb5_parser::parse_krb5_ticket::{closure#7} Line | Count | Source | 213 | 43 | parse_der_application!( | 214 | 43 | i, | 215 | 43 | APPLICATION 1, | 216 | 43 | st: parse_der_struct!( | 217 | 43 | TAG DerTag::Sequence, | 218 | 43 | no: parse_der_tagged!(EXPLICIT 0, parse_der_u32) >> | 219 | 43 | error_if!(no != 5, ErrorKind::Tag) >> | 220 | 43 | r: parse_der_tagged!(EXPLICIT 1, parse_krb5_realm) >> | 221 | 43 | s: parse_der_tagged!(EXPLICIT 2, parse_krb5_principalname) >> | 222 | 43 | e: map_res!(parse_der,|x: DerObject<'a>| x.as_slice()) >> | 223 | 43 | ( Ticket{ | 224 | 43 | tkt_vno: no, | 225 | 43 | realm: r, | 226 | 43 | sname: s, | 227 | 43 | enc_part: e | 228 | 43 | }) | 229 | 43 | ) >> (st) | 230 | 43 | ) |
kerberos_parser::krb5_parser::parse_krb5_ticket::{closure#6} Line | Count | Source | 213 | 45 | parse_der_application!( | 214 | 45 | i, | 215 | 45 | APPLICATION 1, | 216 | 45 | st: parse_der_struct!( | 217 | 45 | TAG DerTag::Sequence, | 218 | 45 | no: parse_der_tagged!(EXPLICIT 0, parse_der_u32) >> | 219 | 45 | error_if!(no != 5, ErrorKind::Tag) >> | 220 | 45 | r: parse_der_tagged!(EXPLICIT 1, parse_krb5_realm) >> | 221 | 45 | s: parse_der_tagged!(EXPLICIT 2, parse_krb5_principalname) >> | 222 | 45 | e: map_res!(parse_der,|x: DerObject<'a>| x.as_slice()) >> | 223 | 45 | ( Ticket{ | 224 | 45 | tkt_vno: no, | 225 | 45 | realm: r, | 226 | 45 | sname: s, | 227 | 45 | enc_part: e | 228 | 45 | }) | 229 | 45 | ) >> (st) | 230 | 45 | ) |
|
231 | 5.58k | .map(|(rem, t)| (rem, (t.1).1)) |
232 | 5.58k | } |
233 | | |
234 | | /// Parse Kerberos EncryptedData |
235 | | /// |
236 | | /// <pre> |
237 | | /// EncryptedData ::= SEQUENCE { |
238 | | /// etype [0] Int32 -- EncryptionType --, |
239 | | /// kvno [1] UInt32 OPTIONAL, |
240 | | /// cipher [2] OCTET STRING -- ciphertext |
241 | | /// } |
242 | | /// </pre> |
243 | 37 | pub fn parse_encrypted<'a>(i: &'a [u8]) -> IResult<&'a [u8], EncryptedData<'a>, BerError> { |
244 | 37 | parse_der_struct!( kerberos_parser::krb5_parser::parse_encrypted::{closure#3} Line | Count | Source | 244 | 37 | parse_der_struct!( |
|
245 | 111 | i, |
246 | 111 | TAG DerTag::Sequence, kerberos_parser::krb5_parser::parse_encrypted::{closure#1} Line | Count | Source | 244 | 37 | parse_der_struct!( | 245 | | i, | 246 | 37 | TAG DerTag::Sequence, |
|
247 | 111 | e: parse_der_tagged!(EXPLICIT 0, parse_der_int32) >> |
248 | 111 | k: opt_parse_der_tagged!(EXPLICIT 1, parse_der_u32) >> |
249 | 111 | c: map_res!(parse_der_tagged!(EXPLICIT 2, parse_der_octetstring), |x: DerObject<'a>| x.as_slice()) >> |
250 | 111 | eof!() >> |
251 | 111 | ( EncryptedData{ |
252 | 111 | etype: EncryptionType(e), |
253 | 111 | kvno: k, |
254 | 111 | cipher: c |
255 | 111 | }) |
256 | 111 | ).map(|(rem,t)| (rem,t.1)) kerberos_parser::krb5_parser::parse_encrypted::{closure#2} Line | Count | Source | 244 | 37 | parse_der_struct!( | 245 | 37 | i, | 246 | 37 | TAG DerTag::Sequence, | 247 | 37 | e: parse_der_tagged!(EXPLICIT 0, parse_der_int32) >> | 248 | 37 | k: opt_parse_der_tagged!(EXPLICIT 1, parse_der_u32) >> | 249 | 37 | c: map_res!(parse_der_tagged!(EXPLICIT 2, parse_der_octetstring), |x: DerObject<'a>| x.as_slice()) >> | 250 | 37 | eof!() >> | 251 | 37 | ( EncryptedData{ | 252 | 37 | etype: EncryptionType(e), | 253 | 37 | kvno: k, | 254 | 37 | cipher: c | 255 | 37 | }) | 256 | 37 | ).map(|(rem,t)| (rem,t.1)) |
kerberos_parser::krb5_parser::parse_encrypted::{closure#3}::{closure#0} Line | Count | Source | 244 | 37 | parse_der_struct!( | 245 | 37 | i, | 246 | 37 | TAG DerTag::Sequence, | 247 | 37 | e: parse_der_tagged!(EXPLICIT 0, parse_der_int32) >> | 248 | 37 | k: opt_parse_der_tagged!(EXPLICIT 1, parse_der_u32) >> | 249 | 37 | c: map_res!(parse_der_tagged!(EXPLICIT 2, parse_der_octetstring), |x: DerObject<'a>| x.as_slice()) >> | 250 | 37 | eof!() >> | 251 | 37 | ( EncryptedData{ | 252 | 37 | etype: EncryptionType(e), | 253 | 37 | kvno: k, | 254 | 37 | cipher: c | 255 | 37 | }) | 256 | 37 | ).map(|(rem,t)| (rem,t.1)) |
kerberos_parser::krb5_parser::parse_encrypted::{closure#4} Line | Count | Source | 244 | 37 | parse_der_struct!( | 245 | 37 | i, | 246 | 37 | TAG DerTag::Sequence, | 247 | 37 | e: parse_der_tagged!(EXPLICIT 0, parse_der_int32) >> | 248 | 37 | k: opt_parse_der_tagged!(EXPLICIT 1, parse_der_u32) >> | 249 | 37 | c: map_res!(parse_der_tagged!(EXPLICIT 2, parse_der_octetstring), |x: DerObject<'a>| x.as_slice()) >> | 250 | 37 | eof!() >> | 251 | 37 | ( EncryptedData{ | 252 | 37 | etype: EncryptionType(e), | 253 | 37 | kvno: k, | 254 | 37 | cipher: c | 255 | 37 | }) | 256 | 37 | ).map(|(rem,t)| (rem,t.1)) |
|
257 | 37 | } |
258 | | |
259 | | /// Parse a Kerberos KDC Request |
260 | | /// |
261 | | /// <pre> |
262 | | /// KDC-REQ ::= SEQUENCE { |
263 | | /// -- NOTE: first tag is [1], not [0] |
264 | | /// pvno [1] INTEGER (5) , |
265 | | /// msg-type [2] INTEGER (10 -- AS -- | 12 -- TGS --), |
266 | | /// padata [3] SEQUENCE OF PA-DATA OPTIONAL |
267 | | /// -- NOTE: not empty --, |
268 | | /// req-body [4] KDC-REQ-BODY |
269 | | /// } |
270 | | /// </pre> |
271 | 0 | pub fn parse_kdc_req(i: &[u8]) -> IResult<&[u8], KdcReq, BerError> { |
272 | 0 | parse_der_struct!( |
273 | 0 | i, |
274 | 0 | TAG DerTag::Sequence, Unexecuted instantiation: kerberos_parser::krb5_parser::parse_kdc_req::{closure#1} |
275 | 0 | pvno: parse_der_tagged!(EXPLICIT 1, parse_der_u32) >> |
276 | 0 | t: parse_der_tagged!(EXPLICIT 2, parse_der_u32) >> |
277 | 0 | d: opt_parse_der_tagged!(EXPLICIT 3, parse_krb5_padata_sequence) >> |
278 | 0 | req_body: parse_der_tagged!(EXPLICIT 4, parse_kdc_req_body) >> |
279 | 0 | eof!() >> |
280 | 0 | ( KdcReq{ |
281 | 0 | pvno, |
282 | 0 | msg_type: MessageType(t), |
283 | 0 | padata: d.unwrap_or_default(), |
284 | 0 | req_body |
285 | 0 | }) |
286 | 0 | ) Unexecuted instantiation: kerberos_parser::krb5_parser::parse_kdc_req::{closure#3} Unexecuted instantiation: kerberos_parser::krb5_parser::parse_kdc_req::{closure#2} Unexecuted instantiation: kerberos_parser::krb5_parser::parse_kdc_req::{closure#4} |
287 | 0 | .map(|(rem, t)| (rem, t.1)) |
288 | 0 | } |
289 | | |
290 | | /// Parse the body of a Kerberos KDC Request |
291 | | /// |
292 | | /// <pre> |
293 | | /// KDC-REQ-BODY ::= SEQUENCE { |
294 | | /// kdc-options [0] KDCOptions, |
295 | | /// cname [1] PrincipalName OPTIONAL |
296 | | /// -- Used only in AS-REQ --, |
297 | | /// realm [2] Realm |
298 | | /// -- Server's realm |
299 | | /// -- Also client's in AS-REQ --, |
300 | | /// sname [3] PrincipalName OPTIONAL, |
301 | | /// from [4] KerberosTime OPTIONAL, |
302 | | /// till [5] KerberosTime, |
303 | | /// rtime [6] KerberosTime OPTIONAL, |
304 | | /// nonce [7] UInt32, |
305 | | /// etype [8] SEQUENCE OF Int32 -- EncryptionType |
306 | | /// -- in preference order --, |
307 | | /// addresses [9] HostAddresses OPTIONAL, |
308 | | /// enc-authorization-data [10] EncryptedData OPTIONAL |
309 | | /// -- AuthorizationData --, |
310 | | /// additional-tickets [11] SEQUENCE OF Ticket OPTIONAL |
311 | | /// -- NOTE: not empty |
312 | | /// } |
313 | | /// </pre> |
314 | 0 | pub fn parse_kdc_req_body(i: &[u8]) -> IResult<&[u8], KdcReqBody, BerError> { |
315 | 0 | parse_der_struct!( Unexecuted instantiation: kerberos_parser::krb5_parser::parse_kdc_req_body::{closure#11} Unexecuted instantiation: kerberos_parser::krb5_parser::parse_kdc_req_body::{closure#8} |
316 | 0 | i, |
317 | 0 | TAG DerTag::Sequence, Unexecuted instantiation: kerberos_parser::krb5_parser::parse_kdc_req_body::{closure#1} |
318 | 0 | o: parse_der_tagged!(EXPLICIT 0,parse_kerberos_flags) >> |
319 | 0 | cname: opt_parse_der_tagged!(EXPLICIT 1,parse_krb5_principalname) >> |
320 | 0 | realm: parse_der_tagged!(EXPLICIT 2,parse_krb5_realm) >> |
321 | 0 | sname: opt_parse_der_tagged!(EXPLICIT 3,parse_krb5_principalname) >> |
322 | 0 | from: opt_parse_der_tagged!(EXPLICIT 4,parse_kerberos_time) >> |
323 | 0 | till: parse_der_tagged!(EXPLICIT 5,parse_kerberos_time) >> |
324 | 0 | rtime: opt_parse_der_tagged!(EXPLICIT 6,parse_kerberos_time) >> |
325 | 0 | nonce: parse_der_tagged!(EXPLICIT 7, parse_der_u32) >> |
326 | 0 | etype: parse_der_tagged!(EXPLICIT 8, |
327 | 0 | parse_der_struct!(v: many1!(complete!(parse_der_int32)) >> (v.iter().map(|&x| EncryptionType(x)).collect())) |
328 | 0 | ) >> |
329 | 0 | addr: opt_parse_der_tagged!(EXPLICIT 9,parse_krb5_hostaddresses) >> |
330 | 0 | ead: opt_parse_der_tagged!(EXPLICIT 10,parse_encrypted) >> |
331 | 0 | atkts: opt_parse_der_tagged!(EXPLICIT 11, |
332 | 0 | parse_der_struct!(v: many1!(complete!(parse_krb5_ticket)) >> (v)) |
333 | 0 | ) >> |
334 | 0 | eof!() >> |
335 | 0 | ( KdcReqBody{ |
336 | 0 | kdc_options: o, |
337 | 0 | cname, |
338 | 0 | realm, |
339 | 0 | sname, |
340 | 0 | from, |
341 | 0 | till, |
342 | 0 | rtime, |
343 | 0 | nonce, |
344 | 0 | etype: etype.1, |
345 | 0 | addresses: addr.unwrap_or_default(), |
346 | 0 | enc_authorization_data: ead, |
347 | 0 | additional_tickets: if atkts.is_some() { atkts.unwrap().1 } else { vec![] } |
348 | 0 | }) |
349 | 0 | ).map(|(rem,t)| (rem,t.1)) Unexecuted instantiation: kerberos_parser::krb5_parser::parse_kdc_req_body::{closure#7} Unexecuted instantiation: kerberos_parser::krb5_parser::parse_kdc_req_body::{closure#5} Unexecuted instantiation: kerberos_parser::krb5_parser::parse_kdc_req_body::{closure#2} Unexecuted instantiation: kerberos_parser::krb5_parser::parse_kdc_req_body::{closure#6} Unexecuted instantiation: kerberos_parser::krb5_parser::parse_kdc_req_body::{closure#3} Unexecuted instantiation: kerberos_parser::krb5_parser::parse_kdc_req_body::{closure#10} Unexecuted instantiation: kerberos_parser::krb5_parser::parse_kdc_req_body::{closure#4} Unexecuted instantiation: kerberos_parser::krb5_parser::parse_kdc_req_body::{closure#8}::{closure#0} Unexecuted instantiation: kerberos_parser::krb5_parser::parse_kdc_req_body::{closure#11}::{closure#0} |
350 | 0 | } |
351 | | |
352 | | /// Parse a Kerberos AS Request |
353 | | /// |
354 | | /// <pre> |
355 | | /// AS-REQ ::= [APPLICATION 10] KDC-REQ |
356 | | /// </pre> |
357 | 0 | pub fn parse_as_req(i: &[u8]) -> IResult<&[u8], KdcReq, BerError> { |
358 | 0 | parse_der_application!( |
359 | 0 | i, |
360 | 0 | APPLICATION 10, |
361 | 0 | req: parse_kdc_req >> (req) |
362 | 0 | ) |
363 | 0 | .map(|(rem, t)| (rem, t.1)) |
364 | 0 | } |
365 | | |
366 | | /// Parse a Kerberos TGS Request |
367 | | /// |
368 | | /// <pre> |
369 | | /// TGS-REQ ::= [APPLICATION 12] KDC-REQ |
370 | | /// </pre> |
371 | 0 | pub fn parse_tgs_req(i: &[u8]) -> IResult<&[u8], KdcReq, BerError> { |
372 | 0 | parse_der_application!( |
373 | 0 | i, |
374 | 0 | APPLICATION 12, |
375 | 0 | req: parse_kdc_req >> (req) |
376 | 0 | ) |
377 | 0 | .map(|(rem, t)| (rem, t.1)) |
378 | 0 | } |
379 | | |
380 | | /// Parse a Kerberos KDC Reply |
381 | | /// |
382 | | /// <pre> |
383 | | /// KDC-REP ::= SEQUENCE { |
384 | | /// pvno [0] INTEGER (5), |
385 | | /// msg-type [1] INTEGER (11 -- AS -- | 13 -- TGS --), |
386 | | /// padata [2] SEQUENCE OF PA-DATA OPTIONAL |
387 | | /// -- NOTE: not empty --, |
388 | | /// crealm [3] Realm, |
389 | | /// cname [4] PrincipalName, |
390 | | /// ticket [5] Ticket, |
391 | | /// enc-part [6] EncryptedData |
392 | | /// -- EncASRepPart or EncTGSRepPart, |
393 | | /// -- as appropriate |
394 | | /// } |
395 | | /// </pre> |
396 | 78.5k | pub fn parse_kdc_rep(i: &[u8]) -> IResult<&[u8], KdcRep, BerError> { |
397 | 78.5k | parse_der_struct!( |
398 | 177k | i, |
399 | 177k | TAG DerTag::Sequence, kerberos_parser::krb5_parser::parse_kdc_rep::{closure#1} Line | Count | Source | 397 | 74.3k | parse_der_struct!( | 398 | | i, | 399 | 73.8k | TAG DerTag::Sequence, |
|
400 | 177k | pvno: parse_der_tagged!(EXPLICIT 0,parse_der_u32) >> |
401 | 177k | msgtype: parse_der_tagged!(EXPLICIT 1,parse_der_u32) >> |
402 | 177k | padata: opt_parse_der_tagged!(EXPLICIT 2,parse_krb5_padata_sequence) >> |
403 | 177k | crealm: parse_der_tagged!(EXPLICIT 3,parse_krb5_realm) >> |
404 | 177k | cname: parse_der_tagged!(EXPLICIT 4,parse_krb5_principalname) >> |
405 | 177k | ticket: parse_der_tagged!(EXPLICIT 5,parse_krb5_ticket) >> |
406 | 177k | enc_part: parse_der_tagged!(EXPLICIT 6,parse_encrypted) >> |
407 | 177k | eof!() >> |
408 | 177k | ( KdcRep{ |
409 | 177k | pvno, |
410 | 177k | msg_type: MessageType(msgtype), |
411 | 177k | padata: padata.unwrap_or_default(), |
412 | 177k | crealm, |
413 | 177k | cname, |
414 | 177k | ticket, |
415 | 177k | enc_part, |
416 | 177k | }) |
417 | 177k | ) kerberos_parser::krb5_parser::parse_kdc_rep::{closure#2} Line | Count | Source | 397 | 69.3k | parse_der_struct!( | 398 | 69.3k | i, | 399 | 69.3k | TAG DerTag::Sequence, | 400 | 69.3k | pvno: parse_der_tagged!(EXPLICIT 0,parse_der_u32) >> | 401 | 69.3k | msgtype: parse_der_tagged!(EXPLICIT 1,parse_der_u32) >> | 402 | 69.3k | padata: opt_parse_der_tagged!(EXPLICIT 2,parse_krb5_padata_sequence) >> | 403 | 69.3k | crealm: parse_der_tagged!(EXPLICIT 3,parse_krb5_realm) >> | 404 | 69.3k | cname: parse_der_tagged!(EXPLICIT 4,parse_krb5_principalname) >> | 405 | 69.3k | ticket: parse_der_tagged!(EXPLICIT 5,parse_krb5_ticket) >> | 406 | 69.3k | enc_part: parse_der_tagged!(EXPLICIT 6,parse_encrypted) >> | 407 | 69.3k | eof!() >> | 408 | 69.3k | ( KdcRep{ | 409 | 69.3k | pvno, | 410 | 69.3k | msg_type: MessageType(msgtype), | 411 | 69.3k | padata: padata.unwrap_or_default(), | 412 | 69.3k | crealm, | 413 | 69.3k | cname, | 414 | 69.3k | ticket, | 415 | 69.3k | enc_part, | 416 | 69.3k | }) | 417 | 69.3k | ) |
kerberos_parser::krb5_parser::parse_kdc_rep::{closure#5} Line | Count | Source | 397 | 8.16k | parse_der_struct!( | 398 | 8.16k | i, | 399 | 8.16k | TAG DerTag::Sequence, | 400 | 8.16k | pvno: parse_der_tagged!(EXPLICIT 0,parse_der_u32) >> | 401 | 8.16k | msgtype: parse_der_tagged!(EXPLICIT 1,parse_der_u32) >> | 402 | 8.16k | padata: opt_parse_der_tagged!(EXPLICIT 2,parse_krb5_padata_sequence) >> | 403 | 8.16k | crealm: parse_der_tagged!(EXPLICIT 3,parse_krb5_realm) >> | 404 | 8.16k | cname: parse_der_tagged!(EXPLICIT 4,parse_krb5_principalname) >> | 405 | 8.16k | ticket: parse_der_tagged!(EXPLICIT 5,parse_krb5_ticket) >> | 406 | 8.16k | enc_part: parse_der_tagged!(EXPLICIT 6,parse_encrypted) >> | 407 | 8.16k | eof!() >> | 408 | 8.16k | ( KdcRep{ | 409 | 8.16k | pvno, | 410 | 8.16k | msg_type: MessageType(msgtype), | 411 | 8.16k | padata: padata.unwrap_or_default(), | 412 | 8.16k | crealm, | 413 | 8.16k | cname, | 414 | 8.16k | ticket, | 415 | 8.16k | enc_part, | 416 | 8.16k | }) | 417 | 8.16k | ) |
kerberos_parser::krb5_parser::parse_kdc_rep::{closure#3} Line | Count | Source | 397 | 62.8k | parse_der_struct!( | 398 | 62.8k | i, | 399 | 62.8k | TAG DerTag::Sequence, | 400 | 62.8k | pvno: parse_der_tagged!(EXPLICIT 0,parse_der_u32) >> | 401 | 62.8k | msgtype: parse_der_tagged!(EXPLICIT 1,parse_der_u32) >> | 402 | 62.8k | padata: opt_parse_der_tagged!(EXPLICIT 2,parse_krb5_padata_sequence) >> | 403 | 62.8k | crealm: parse_der_tagged!(EXPLICIT 3,parse_krb5_realm) >> | 404 | 62.8k | cname: parse_der_tagged!(EXPLICIT 4,parse_krb5_principalname) >> | 405 | 62.8k | ticket: parse_der_tagged!(EXPLICIT 5,parse_krb5_ticket) >> | 406 | 62.8k | enc_part: parse_der_tagged!(EXPLICIT 6,parse_encrypted) >> | 407 | 62.8k | eof!() >> | 408 | 62.8k | ( KdcRep{ | 409 | 62.8k | pvno, | 410 | 62.8k | msg_type: MessageType(msgtype), | 411 | 62.8k | padata: padata.unwrap_or_default(), | 412 | 62.8k | crealm, | 413 | 62.8k | cname, | 414 | 62.8k | ticket, | 415 | 62.8k | enc_part, | 416 | 62.8k | }) | 417 | 62.8k | ) |
kerberos_parser::krb5_parser::parse_kdc_rep::{closure#6} Line | Count | Source | 397 | 2.55k | parse_der_struct!( | 398 | 2.55k | i, | 399 | 2.55k | TAG DerTag::Sequence, | 400 | 2.55k | pvno: parse_der_tagged!(EXPLICIT 0,parse_der_u32) >> | 401 | 2.55k | msgtype: parse_der_tagged!(EXPLICIT 1,parse_der_u32) >> | 402 | 2.55k | padata: opt_parse_der_tagged!(EXPLICIT 2,parse_krb5_padata_sequence) >> | 403 | 2.55k | crealm: parse_der_tagged!(EXPLICIT 3,parse_krb5_realm) >> | 404 | 2.55k | cname: parse_der_tagged!(EXPLICIT 4,parse_krb5_principalname) >> | 405 | 2.55k | ticket: parse_der_tagged!(EXPLICIT 5,parse_krb5_ticket) >> | 406 | 2.55k | enc_part: parse_der_tagged!(EXPLICIT 6,parse_encrypted) >> | 407 | 2.55k | eof!() >> | 408 | 2.55k | ( KdcRep{ | 409 | 2.55k | pvno, | 410 | 2.55k | msg_type: MessageType(msgtype), | 411 | 2.55k | padata: padata.unwrap_or_default(), | 412 | 2.55k | crealm, | 413 | 2.55k | cname, | 414 | 2.55k | ticket, | 415 | 2.55k | enc_part, | 416 | 2.55k | }) | 417 | 2.55k | ) |
kerberos_parser::krb5_parser::parse_kdc_rep::{closure#4} Line | Count | Source | 397 | 34.5k | parse_der_struct!( | 398 | 34.5k | i, | 399 | 34.5k | TAG DerTag::Sequence, | 400 | 34.5k | pvno: parse_der_tagged!(EXPLICIT 0,parse_der_u32) >> | 401 | 34.5k | msgtype: parse_der_tagged!(EXPLICIT 1,parse_der_u32) >> | 402 | 34.5k | padata: opt_parse_der_tagged!(EXPLICIT 2,parse_krb5_padata_sequence) >> | 403 | 34.5k | crealm: parse_der_tagged!(EXPLICIT 3,parse_krb5_realm) >> | 404 | 34.5k | cname: parse_der_tagged!(EXPLICIT 4,parse_krb5_principalname) >> | 405 | 34.5k | ticket: parse_der_tagged!(EXPLICIT 5,parse_krb5_ticket) >> | 406 | 34.5k | enc_part: parse_der_tagged!(EXPLICIT 6,parse_encrypted) >> | 407 | 34.5k | eof!() >> | 408 | 34.5k | ( KdcRep{ | 409 | 34.5k | pvno, | 410 | 34.5k | msg_type: MessageType(msgtype), | 411 | 34.5k | padata: padata.unwrap_or_default(), | 412 | 34.5k | crealm, | 413 | 34.5k | cname, | 414 | 34.5k | ticket, | 415 | 34.5k | enc_part, | 416 | 34.5k | }) | 417 | 34.5k | ) |
kerberos_parser::krb5_parser::parse_kdc_rep::{closure#7} Line | Count | Source | 397 | 4 | parse_der_struct!( | 398 | 4 | i, | 399 | 4 | TAG DerTag::Sequence, | 400 | 4 | pvno: parse_der_tagged!(EXPLICIT 0,parse_der_u32) >> | 401 | 4 | msgtype: parse_der_tagged!(EXPLICIT 1,parse_der_u32) >> | 402 | 4 | padata: opt_parse_der_tagged!(EXPLICIT 2,parse_krb5_padata_sequence) >> | 403 | 4 | crealm: parse_der_tagged!(EXPLICIT 3,parse_krb5_realm) >> | 404 | 4 | cname: parse_der_tagged!(EXPLICIT 4,parse_krb5_principalname) >> | 405 | 4 | ticket: parse_der_tagged!(EXPLICIT 5,parse_krb5_ticket) >> | 406 | 4 | enc_part: parse_der_tagged!(EXPLICIT 6,parse_encrypted) >> | 407 | 4 | eof!() >> | 408 | 4 | ( KdcRep{ | 409 | 4 | pvno, | 410 | 4 | msg_type: MessageType(msgtype), | 411 | 4 | padata: padata.unwrap_or_default(), | 412 | 4 | crealm, | 413 | 4 | cname, | 414 | 4 | ticket, | 415 | 4 | enc_part, | 416 | 4 | }) | 417 | 4 | ) |
|
418 | 78.5k | .map(|(rem, t)| (rem, t.1)) |
419 | 78.5k | } |
420 | | |
421 | | /// Parse a Kerberos AS Reply |
422 | | /// |
423 | | /// <pre> |
424 | | /// AS-REP ::= [APPLICATION 11] KDC-REP |
425 | | /// </pre> |
426 | 20.8k | pub fn parse_as_rep(i: &[u8]) -> IResult<&[u8], KdcRep, BerError> { |
427 | 20.8k | parse_der_application!( |
428 | 20.8k | i, |
429 | 20.8k | APPLICATION 11, |
430 | 20.8k | rep: parse_kdc_rep >> (rep) |
431 | 20.8k | ) |
432 | 20.8k | .map(|(rem, t)| (rem, t.1)) |
433 | 20.8k | } |
434 | | |
435 | | /// Parse a Kerberos TGS Reply |
436 | | /// |
437 | | /// <pre> |
438 | | /// TGS-REP ::= [APPLICATION 13] KDC-REP |
439 | | /// </pre> |
440 | 62.0k | pub fn parse_tgs_rep(i: &[u8]) -> IResult<&[u8], KdcRep, BerError> { |
441 | 62.0k | parse_der_application!( |
442 | 62.0k | i, |
443 | 62.0k | APPLICATION 13, |
444 | 62.0k | rep: parse_kdc_rep >> (rep) |
445 | 62.0k | ) |
446 | 62.0k | .map(|(rem, t)| (rem, t.1)) |
447 | 62.0k | } |
448 | | |
449 | | /// Parse a Kerberos Error |
450 | | /// |
451 | | /// <pre> |
452 | | /// KRB-ERROR ::= [APPLICATION 30] SEQUENCE { |
453 | | /// pvno [0] INTEGER (5), |
454 | | /// msg-type [1] INTEGER (30), |
455 | | /// ctime [2] KerberosTime OPTIONAL, |
456 | | /// cusec [3] Microseconds OPTIONAL, |
457 | | /// stime [4] KerberosTime, |
458 | | /// susec [5] Microseconds, |
459 | | /// error-code [6] Int32, |
460 | | /// crealm [7] Realm OPTIONAL, |
461 | | /// cname [8] PrincipalName OPTIONAL, |
462 | | /// realm [9] Realm -- service realm --, |
463 | | /// sname [10] PrincipalName -- service name --, |
464 | | /// e-text [11] KerberosString OPTIONAL, |
465 | | /// e-data [12] OCTET STRING OPTIONAL |
466 | | /// } |
467 | | /// </pre> |
468 | 100k | pub fn parse_krb_error(i: &[u8]) -> IResult<&[u8], KrbError, BerError> { |
469 | 603k | parse_der_application!( |
470 | 603k | i, |
471 | 603k | APPLICATION 30, |
472 | 603k | st: parse_der_struct!( |
473 | 603k | TAG DerTag::Sequence, |
474 | 603k | pvno: parse_der_tagged!(EXPLICIT 0,parse_der_u32) >> |
475 | 603k | msgtype: parse_der_tagged!(EXPLICIT 1,parse_der_u32) >> |
476 | 603k | error_if!(pvno != 5 || msgtype != 30, ErrorKind::Tag) >> |
477 | 603k | ctime: opt_parse_der_tagged!(EXPLICIT 2,parse_kerberos_time) >> |
478 | 603k | cusec: opt_parse_der_tagged!(EXPLICIT 3,parse_der_microseconds) >> |
479 | 603k | stime: parse_der_tagged!(EXPLICIT 4,parse_kerberos_time) >> |
480 | 603k | susec: parse_der_tagged!(EXPLICIT 5,parse_der_microseconds) >> |
481 | 603k | errorc: parse_der_tagged!(EXPLICIT 6,parse_der_int32) >> |
482 | 603k | crealm: opt_parse_der_tagged!(EXPLICIT 7,parse_krb5_realm) >> |
483 | 603k | cname: opt_parse_der_tagged!(EXPLICIT 8,parse_krb5_principalname) >> |
484 | 603k | realm: parse_der_tagged!(EXPLICIT 9,parse_krb5_realm) >> |
485 | 603k | sname: parse_der_tagged!(EXPLICIT 10,parse_krb5_principalname) >> |
486 | 603k | etext: opt_parse_der_tagged!(EXPLICIT 11,parse_kerberos_string) >> |
487 | 603k | edata: opt_parse_der_tagged!(EXPLICIT 12,parse_der_octetstring) >> |
488 | 603k | (KrbError{ |
489 | 603k | pvno, |
490 | 603k | msg_type: MessageType(msgtype), |
491 | 603k | ctime, |
492 | 603k | cusec, |
493 | 603k | stime, |
494 | 603k | susec, |
495 | 603k | error_code: ErrorCode(errorc), |
496 | 603k | crealm, |
497 | 603k | cname, |
498 | 603k | realm, |
499 | 603k | sname, |
500 | 603k | etext, |
501 | 603k | edata, |
502 | 603k | }) |
503 | 603k | ) |
504 | 603k | >> (st) |
505 | 603k | ) kerberos_parser::krb5_parser::parse_krb_error::{closure#1} Line | Count | Source | 469 | 100k | parse_der_application!( | 470 | 100k | i, | 471 | 100k | APPLICATION 30, | 472 | 100k | st: parse_der_struct!( | 473 | 100k | TAG DerTag::Sequence, | 474 | 100k | pvno: parse_der_tagged!(EXPLICIT 0,parse_der_u32) >> | 475 | 100k | msgtype: parse_der_tagged!(EXPLICIT 1,parse_der_u32) >> | 476 | 100k | error_if!(pvno != 5 || msgtype != 30, ErrorKind::Tag) >> | 477 | 100k | ctime: opt_parse_der_tagged!(EXPLICIT 2,parse_kerberos_time) >> | 478 | 100k | cusec: opt_parse_der_tagged!(EXPLICIT 3,parse_der_microseconds) >> | 479 | 100k | stime: parse_der_tagged!(EXPLICIT 4,parse_kerberos_time) >> | 480 | 100k | susec: parse_der_tagged!(EXPLICIT 5,parse_der_microseconds) >> | 481 | 100k | errorc: parse_der_tagged!(EXPLICIT 6,parse_der_int32) >> | 482 | 100k | crealm: opt_parse_der_tagged!(EXPLICIT 7,parse_krb5_realm) >> | 483 | 100k | cname: opt_parse_der_tagged!(EXPLICIT 8,parse_krb5_principalname) >> | 484 | 100k | realm: parse_der_tagged!(EXPLICIT 9,parse_krb5_realm) >> | 485 | 100k | sname: parse_der_tagged!(EXPLICIT 10,parse_krb5_principalname) >> | 486 | 100k | etext: opt_parse_der_tagged!(EXPLICIT 11,parse_kerberos_string) >> | 487 | 100k | edata: opt_parse_der_tagged!(EXPLICIT 12,parse_der_octetstring) >> | 488 | 100k | (KrbError{ | 489 | 100k | pvno, | 490 | 100k | msg_type: MessageType(msgtype), | 491 | 100k | ctime, | 492 | 100k | cusec, | 493 | 100k | stime, | 494 | 100k | susec, | 495 | 100k | error_code: ErrorCode(errorc), | 496 | 100k | crealm, | 497 | 100k | cname, | 498 | 100k | realm, | 499 | 100k | sname, | 500 | 100k | etext, | 501 | 100k | edata, | 502 | 100k | }) | 503 | 100k | ) | 504 | 100k | >> (st) | 505 | 100k | ) |
kerberos_parser::krb5_parser::parse_krb_error::{closure#7} Line | Count | Source | 469 | 68.0k | parse_der_application!( | 470 | 68.0k | i, | 471 | 68.0k | APPLICATION 30, | 472 | 68.0k | st: parse_der_struct!( | 473 | 68.0k | TAG DerTag::Sequence, | 474 | 68.0k | pvno: parse_der_tagged!(EXPLICIT 0,parse_der_u32) >> | 475 | 68.0k | msgtype: parse_der_tagged!(EXPLICIT 1,parse_der_u32) >> | 476 | 68.0k | error_if!(pvno != 5 || msgtype != 30, ErrorKind::Tag) >> | 477 | 68.0k | ctime: opt_parse_der_tagged!(EXPLICIT 2,parse_kerberos_time) >> | 478 | 68.0k | cusec: opt_parse_der_tagged!(EXPLICIT 3,parse_der_microseconds) >> | 479 | 68.0k | stime: parse_der_tagged!(EXPLICIT 4,parse_kerberos_time) >> | 480 | 68.0k | susec: parse_der_tagged!(EXPLICIT 5,parse_der_microseconds) >> | 481 | 68.0k | errorc: parse_der_tagged!(EXPLICIT 6,parse_der_int32) >> | 482 | 68.0k | crealm: opt_parse_der_tagged!(EXPLICIT 7,parse_krb5_realm) >> | 483 | 68.0k | cname: opt_parse_der_tagged!(EXPLICIT 8,parse_krb5_principalname) >> | 484 | 68.0k | realm: parse_der_tagged!(EXPLICIT 9,parse_krb5_realm) >> | 485 | 68.0k | sname: parse_der_tagged!(EXPLICIT 10,parse_krb5_principalname) >> | 486 | 68.0k | etext: opt_parse_der_tagged!(EXPLICIT 11,parse_kerberos_string) >> | 487 | 68.0k | edata: opt_parse_der_tagged!(EXPLICIT 12,parse_der_octetstring) >> | 488 | 68.0k | (KrbError{ | 489 | 68.0k | pvno, | 490 | 68.0k | msg_type: MessageType(msgtype), | 491 | 68.0k | ctime, | 492 | 68.0k | cusec, | 493 | 68.0k | stime, | 494 | 68.0k | susec, | 495 | 68.0k | error_code: ErrorCode(errorc), | 496 | 68.0k | crealm, | 497 | 68.0k | cname, | 498 | 68.0k | realm, | 499 | 68.0k | sname, | 500 | 68.0k | etext, | 501 | 68.0k | edata, | 502 | 68.0k | }) | 503 | 68.0k | ) | 504 | 68.0k | >> (st) | 505 | 68.0k | ) |
kerberos_parser::krb5_parser::parse_krb_error::{closure#6} Line | Count | Source | 469 | 69.1k | parse_der_application!( | 470 | 69.1k | i, | 471 | 69.1k | APPLICATION 30, | 472 | 69.1k | st: parse_der_struct!( | 473 | 69.1k | TAG DerTag::Sequence, | 474 | 69.1k | pvno: parse_der_tagged!(EXPLICIT 0,parse_der_u32) >> | 475 | 69.1k | msgtype: parse_der_tagged!(EXPLICIT 1,parse_der_u32) >> | 476 | 69.1k | error_if!(pvno != 5 || msgtype != 30, ErrorKind::Tag) >> | 477 | 69.1k | ctime: opt_parse_der_tagged!(EXPLICIT 2,parse_kerberos_time) >> | 478 | 69.1k | cusec: opt_parse_der_tagged!(EXPLICIT 3,parse_der_microseconds) >> | 479 | 69.1k | stime: parse_der_tagged!(EXPLICIT 4,parse_kerberos_time) >> | 480 | 69.1k | susec: parse_der_tagged!(EXPLICIT 5,parse_der_microseconds) >> | 481 | 69.1k | errorc: parse_der_tagged!(EXPLICIT 6,parse_der_int32) >> | 482 | 69.1k | crealm: opt_parse_der_tagged!(EXPLICIT 7,parse_krb5_realm) >> | 483 | 69.1k | cname: opt_parse_der_tagged!(EXPLICIT 8,parse_krb5_principalname) >> | 484 | 69.1k | realm: parse_der_tagged!(EXPLICIT 9,parse_krb5_realm) >> | 485 | 69.1k | sname: parse_der_tagged!(EXPLICIT 10,parse_krb5_principalname) >> | 486 | 69.1k | etext: opt_parse_der_tagged!(EXPLICIT 11,parse_kerberos_string) >> | 487 | 69.1k | edata: opt_parse_der_tagged!(EXPLICIT 12,parse_der_octetstring) >> | 488 | 69.1k | (KrbError{ | 489 | 69.1k | pvno, | 490 | 69.1k | msg_type: MessageType(msgtype), | 491 | 69.1k | ctime, | 492 | 69.1k | cusec, | 493 | 69.1k | stime, | 494 | 69.1k | susec, | 495 | 69.1k | error_code: ErrorCode(errorc), | 496 | 69.1k | crealm, | 497 | 69.1k | cname, | 498 | 69.1k | realm, | 499 | 69.1k | sname, | 500 | 69.1k | etext, | 501 | 69.1k | edata, | 502 | 69.1k | }) | 503 | 69.1k | ) | 504 | 69.1k | >> (st) | 505 | 69.1k | ) |
kerberos_parser::krb5_parser::parse_krb_error::{closure#4} Line | Count | Source | 469 | 76.5k | parse_der_application!( | 470 | 76.5k | i, | 471 | 76.5k | APPLICATION 30, | 472 | 76.5k | st: parse_der_struct!( | 473 | 76.5k | TAG DerTag::Sequence, | 474 | 76.5k | pvno: parse_der_tagged!(EXPLICIT 0,parse_der_u32) >> | 475 | 76.5k | msgtype: parse_der_tagged!(EXPLICIT 1,parse_der_u32) >> | 476 | 76.5k | error_if!(pvno != 5 || msgtype != 30, ErrorKind::Tag) >> | 477 | 76.5k | ctime: opt_parse_der_tagged!(EXPLICIT 2,parse_kerberos_time) >> | 478 | 76.5k | cusec: opt_parse_der_tagged!(EXPLICIT 3,parse_der_microseconds) >> | 479 | 76.5k | stime: parse_der_tagged!(EXPLICIT 4,parse_kerberos_time) >> | 480 | 76.5k | susec: parse_der_tagged!(EXPLICIT 5,parse_der_microseconds) >> | 481 | 76.5k | errorc: parse_der_tagged!(EXPLICIT 6,parse_der_int32) >> | 482 | 76.5k | crealm: opt_parse_der_tagged!(EXPLICIT 7,parse_krb5_realm) >> | 483 | 76.5k | cname: opt_parse_der_tagged!(EXPLICIT 8,parse_krb5_principalname) >> | 484 | 76.5k | realm: parse_der_tagged!(EXPLICIT 9,parse_krb5_realm) >> | 485 | 76.5k | sname: parse_der_tagged!(EXPLICIT 10,parse_krb5_principalname) >> | 486 | 76.5k | etext: opt_parse_der_tagged!(EXPLICIT 11,parse_kerberos_string) >> | 487 | 76.5k | edata: opt_parse_der_tagged!(EXPLICIT 12,parse_der_octetstring) >> | 488 | 76.5k | (KrbError{ | 489 | 76.5k | pvno, | 490 | 76.5k | msg_type: MessageType(msgtype), | 491 | 76.5k | ctime, | 492 | 76.5k | cusec, | 493 | 76.5k | stime, | 494 | 76.5k | susec, | 495 | 76.5k | error_code: ErrorCode(errorc), | 496 | 76.5k | crealm, | 497 | 76.5k | cname, | 498 | 76.5k | realm, | 499 | 76.5k | sname, | 500 | 76.5k | etext, | 501 | 76.5k | edata, | 502 | 76.5k | }) | 503 | 76.5k | ) | 504 | 76.5k | >> (st) | 505 | 76.5k | ) |
kerberos_parser::krb5_parser::parse_krb_error::{closure#8} Line | Count | Source | 469 | 64.5k | parse_der_application!( | 470 | 64.5k | i, | 471 | 64.5k | APPLICATION 30, | 472 | 64.5k | st: parse_der_struct!( | 473 | 64.5k | TAG DerTag::Sequence, | 474 | 64.5k | pvno: parse_der_tagged!(EXPLICIT 0,parse_der_u32) >> | 475 | 64.5k | msgtype: parse_der_tagged!(EXPLICIT 1,parse_der_u32) >> | 476 | 64.5k | error_if!(pvno != 5 || msgtype != 30, ErrorKind::Tag) >> | 477 | 64.5k | ctime: opt_parse_der_tagged!(EXPLICIT 2,parse_kerberos_time) >> | 478 | 64.5k | cusec: opt_parse_der_tagged!(EXPLICIT 3,parse_der_microseconds) >> | 479 | 64.5k | stime: parse_der_tagged!(EXPLICIT 4,parse_kerberos_time) >> | 480 | 64.5k | susec: parse_der_tagged!(EXPLICIT 5,parse_der_microseconds) >> | 481 | 64.5k | errorc: parse_der_tagged!(EXPLICIT 6,parse_der_int32) >> | 482 | 64.5k | crealm: opt_parse_der_tagged!(EXPLICIT 7,parse_krb5_realm) >> | 483 | 64.5k | cname: opt_parse_der_tagged!(EXPLICIT 8,parse_krb5_principalname) >> | 484 | 64.5k | realm: parse_der_tagged!(EXPLICIT 9,parse_krb5_realm) >> | 485 | 64.5k | sname: parse_der_tagged!(EXPLICIT 10,parse_krb5_principalname) >> | 486 | 64.5k | etext: opt_parse_der_tagged!(EXPLICIT 11,parse_kerberos_string) >> | 487 | 64.5k | edata: opt_parse_der_tagged!(EXPLICIT 12,parse_der_octetstring) >> | 488 | 64.5k | (KrbError{ | 489 | 64.5k | pvno, | 490 | 64.5k | msg_type: MessageType(msgtype), | 491 | 64.5k | ctime, | 492 | 64.5k | cusec, | 493 | 64.5k | stime, | 494 | 64.5k | susec, | 495 | 64.5k | error_code: ErrorCode(errorc), | 496 | 64.5k | crealm, | 497 | 64.5k | cname, | 498 | 64.5k | realm, | 499 | 64.5k | sname, | 500 | 64.5k | etext, | 501 | 64.5k | edata, | 502 | 64.5k | }) | 503 | 64.5k | ) | 504 | 64.5k | >> (st) | 505 | 64.5k | ) |
kerberos_parser::krb5_parser::parse_krb_error::{closure#9} Line | Count | Source | 469 | 62.1k | parse_der_application!( | 470 | 62.1k | i, | 471 | 62.1k | APPLICATION 30, | 472 | 62.1k | st: parse_der_struct!( | 473 | 62.1k | TAG DerTag::Sequence, | 474 | 62.1k | pvno: parse_der_tagged!(EXPLICIT 0,parse_der_u32) >> | 475 | 62.1k | msgtype: parse_der_tagged!(EXPLICIT 1,parse_der_u32) >> | 476 | 62.1k | error_if!(pvno != 5 || msgtype != 30, ErrorKind::Tag) >> | 477 | 62.1k | ctime: opt_parse_der_tagged!(EXPLICIT 2,parse_kerberos_time) >> | 478 | 62.1k | cusec: opt_parse_der_tagged!(EXPLICIT 3,parse_der_microseconds) >> | 479 | 62.1k | stime: parse_der_tagged!(EXPLICIT 4,parse_kerberos_time) >> | 480 | 62.1k | susec: parse_der_tagged!(EXPLICIT 5,parse_der_microseconds) >> | 481 | 62.1k | errorc: parse_der_tagged!(EXPLICIT 6,parse_der_int32) >> | 482 | 62.1k | crealm: opt_parse_der_tagged!(EXPLICIT 7,parse_krb5_realm) >> | 483 | 62.1k | cname: opt_parse_der_tagged!(EXPLICIT 8,parse_krb5_principalname) >> | 484 | 62.1k | realm: parse_der_tagged!(EXPLICIT 9,parse_krb5_realm) >> | 485 | 62.1k | sname: parse_der_tagged!(EXPLICIT 10,parse_krb5_principalname) >> | 486 | 62.1k | etext: opt_parse_der_tagged!(EXPLICIT 11,parse_kerberos_string) >> | 487 | 62.1k | edata: opt_parse_der_tagged!(EXPLICIT 12,parse_der_octetstring) >> | 488 | 62.1k | (KrbError{ | 489 | 62.1k | pvno, | 490 | 62.1k | msg_type: MessageType(msgtype), | 491 | 62.1k | ctime, | 492 | 62.1k | cusec, | 493 | 62.1k | stime, | 494 | 62.1k | susec, | 495 | 62.1k | error_code: ErrorCode(errorc), | 496 | 62.1k | crealm, | 497 | 62.1k | cname, | 498 | 62.1k | realm, | 499 | 62.1k | sname, | 500 | 62.1k | etext, | 501 | 62.1k | edata, | 502 | 62.1k | }) | 503 | 62.1k | ) | 504 | 62.1k | >> (st) | 505 | 62.1k | ) |
kerberos_parser::krb5_parser::parse_krb_error::{closure#3} Line | Count | Source | 469 | 90.5k | parse_der_application!( | 470 | 90.5k | i, | 471 | 90.5k | APPLICATION 30, | 472 | 90.5k | st: parse_der_struct!( | 473 | 90.5k | TAG DerTag::Sequence, | 474 | 90.5k | pvno: parse_der_tagged!(EXPLICIT 0,parse_der_u32) >> | 475 | 90.5k | msgtype: parse_der_tagged!(EXPLICIT 1,parse_der_u32) >> | 476 | 90.5k | error_if!(pvno != 5 || msgtype != 30, ErrorKind::Tag) >> | 477 | 90.5k | ctime: opt_parse_der_tagged!(EXPLICIT 2,parse_kerberos_time) >> | 478 | 90.5k | cusec: opt_parse_der_tagged!(EXPLICIT 3,parse_der_microseconds) >> | 479 | 90.5k | stime: parse_der_tagged!(EXPLICIT 4,parse_kerberos_time) >> | 480 | 90.5k | susec: parse_der_tagged!(EXPLICIT 5,parse_der_microseconds) >> | 481 | 90.5k | errorc: parse_der_tagged!(EXPLICIT 6,parse_der_int32) >> | 482 | 90.5k | crealm: opt_parse_der_tagged!(EXPLICIT 7,parse_krb5_realm) >> | 483 | 90.5k | cname: opt_parse_der_tagged!(EXPLICIT 8,parse_krb5_principalname) >> | 484 | 90.5k | realm: parse_der_tagged!(EXPLICIT 9,parse_krb5_realm) >> | 485 | 90.5k | sname: parse_der_tagged!(EXPLICIT 10,parse_krb5_principalname) >> | 486 | 90.5k | etext: opt_parse_der_tagged!(EXPLICIT 11,parse_kerberos_string) >> | 487 | 90.5k | edata: opt_parse_der_tagged!(EXPLICIT 12,parse_der_octetstring) >> | 488 | 90.5k | (KrbError{ | 489 | 90.5k | pvno, | 490 | 90.5k | msg_type: MessageType(msgtype), | 491 | 90.5k | ctime, | 492 | 90.5k | cusec, | 493 | 90.5k | stime, | 494 | 90.5k | susec, | 495 | 90.5k | error_code: ErrorCode(errorc), | 496 | 90.5k | crealm, | 497 | 90.5k | cname, | 498 | 90.5k | realm, | 499 | 90.5k | sname, | 500 | 90.5k | etext, | 501 | 90.5k | edata, | 502 | 90.5k | }) | 503 | 90.5k | ) | 504 | 90.5k | >> (st) | 505 | 90.5k | ) |
kerberos_parser::krb5_parser::parse_krb_error::{closure#5} Line | Count | Source | 469 | 71.5k | parse_der_application!( | 470 | 71.5k | i, | 471 | 71.5k | APPLICATION 30, | 472 | 71.5k | st: parse_der_struct!( | 473 | 71.5k | TAG DerTag::Sequence, | 474 | 71.5k | pvno: parse_der_tagged!(EXPLICIT 0,parse_der_u32) >> | 475 | 71.5k | msgtype: parse_der_tagged!(EXPLICIT 1,parse_der_u32) >> | 476 | 71.5k | error_if!(pvno != 5 || msgtype != 30, ErrorKind::Tag) >> | 477 | 71.5k | ctime: opt_parse_der_tagged!(EXPLICIT 2,parse_kerberos_time) >> | 478 | 71.5k | cusec: opt_parse_der_tagged!(EXPLICIT 3,parse_der_microseconds) >> | 479 | 71.5k | stime: parse_der_tagged!(EXPLICIT 4,parse_kerberos_time) >> | 480 | 71.5k | susec: parse_der_tagged!(EXPLICIT 5,parse_der_microseconds) >> | 481 | 71.5k | errorc: parse_der_tagged!(EXPLICIT 6,parse_der_int32) >> | 482 | 71.5k | crealm: opt_parse_der_tagged!(EXPLICIT 7,parse_krb5_realm) >> | 483 | 71.5k | cname: opt_parse_der_tagged!(EXPLICIT 8,parse_krb5_principalname) >> | 484 | 71.5k | realm: parse_der_tagged!(EXPLICIT 9,parse_krb5_realm) >> | 485 | 71.5k | sname: parse_der_tagged!(EXPLICIT 10,parse_krb5_principalname) >> | 486 | 71.5k | etext: opt_parse_der_tagged!(EXPLICIT 11,parse_kerberos_string) >> | 487 | 71.5k | edata: opt_parse_der_tagged!(EXPLICIT 12,parse_der_octetstring) >> | 488 | 71.5k | (KrbError{ | 489 | 71.5k | pvno, | 490 | 71.5k | msg_type: MessageType(msgtype), | 491 | 71.5k | ctime, | 492 | 71.5k | cusec, | 493 | 71.5k | stime, | 494 | 71.5k | susec, | 495 | 71.5k | error_code: ErrorCode(errorc), | 496 | 71.5k | crealm, | 497 | 71.5k | cname, | 498 | 71.5k | realm, | 499 | 71.5k | sname, | 500 | 71.5k | etext, | 501 | 71.5k | edata, | 502 | 71.5k | }) | 503 | 71.5k | ) | 504 | 71.5k | >> (st) | 505 | 71.5k | ) |
|
506 | 100k | .map(|(rem, t)| (rem, (t.1).1)) |
507 | 100k | } |
508 | | |
509 | | /// Parse Kerberos PA-Data |
510 | | /// |
511 | | /// <pre> |
512 | | /// PA-DATA ::= SEQUENCE { |
513 | | /// -- NOTE: first tag is [1], not [0] |
514 | | /// padata-type [1] Int32, |
515 | | /// padata-value [2] OCTET STRING -- might be encoded AP-REQ |
516 | | /// } |
517 | | /// </pre> |
518 | 5.99k | pub fn parse_krb5_padata<'a>(i: &'a [u8]) -> IResult<&'a [u8], PAData<'a>, BerError> { |
519 | 5.99k | parse_der_struct!( kerberos_parser::krb5_parser::parse_krb5_padata::{closure#3} Line | Count | Source | 519 | 3.01k | parse_der_struct!( |
|
520 | 7.23k | i, |
521 | 7.23k | TAG DerTag::Sequence, kerberos_parser::krb5_parser::parse_krb5_padata::{closure#1} Line | Count | Source | 519 | 5.38k | parse_der_struct!( | 520 | | i, | 521 | 5.16k | TAG DerTag::Sequence, |
|
522 | 7.23k | t: parse_der_tagged!(EXPLICIT 1, parse_der_int32) >> |
523 | 7.23k | s: map_res!(parse_der_tagged!(EXPLICIT 2, parse_der_octetstring),|x: DerObject<'a>| x.as_slice()) >> |
524 | 7.23k | ( PAData{ |
525 | 7.23k | padata_type: PAType(t), |
526 | 7.23k | padata_value: s, |
527 | 7.23k | }) |
528 | 7.23k | ).map(|(rem,x)| (rem,x.1)) kerberos_parser::krb5_parser::parse_krb5_padata::{closure#2} Line | Count | Source | 519 | 4.31k | parse_der_struct!( | 520 | 4.31k | i, | 521 | 4.31k | TAG DerTag::Sequence, | 522 | 4.31k | t: parse_der_tagged!(EXPLICIT 1, parse_der_int32) >> | 523 | 4.31k | s: map_res!(parse_der_tagged!(EXPLICIT 2, parse_der_octetstring),|x: DerObject<'a>| x.as_slice()) >> | 524 | 4.31k | ( PAData{ | 525 | 4.31k | padata_type: PAType(t), | 526 | 4.31k | padata_value: s, | 527 | 4.31k | }) | 528 | 4.31k | ).map(|(rem,x)| (rem,x.1)) |
kerberos_parser::krb5_parser::parse_krb5_padata::{closure#3}::{closure#0} Line | Count | Source | 519 | 2.52k | parse_der_struct!( | 520 | 2.52k | i, | 521 | 2.52k | TAG DerTag::Sequence, | 522 | 2.52k | t: parse_der_tagged!(EXPLICIT 1, parse_der_int32) >> | 523 | 2.52k | s: map_res!(parse_der_tagged!(EXPLICIT 2, parse_der_octetstring),|x: DerObject<'a>| x.as_slice()) >> | 524 | 2.52k | ( PAData{ | 525 | 2.52k | padata_type: PAType(t), | 526 | 2.52k | padata_value: s, | 527 | 2.52k | }) | 528 | 2.52k | ).map(|(rem,x)| (rem,x.1)) |
kerberos_parser::krb5_parser::parse_krb5_padata::{closure#4} Line | Count | Source | 519 | 387 | parse_der_struct!( | 520 | 387 | i, | 521 | 387 | TAG DerTag::Sequence, | 522 | 387 | t: parse_der_tagged!(EXPLICIT 1, parse_der_int32) >> | 523 | 387 | s: map_res!(parse_der_tagged!(EXPLICIT 2, parse_der_octetstring),|x: DerObject<'a>| x.as_slice()) >> | 524 | 387 | ( PAData{ | 525 | 387 | padata_type: PAType(t), | 526 | 387 | padata_value: s, | 527 | 387 | }) | 528 | 387 | ).map(|(rem,x)| (rem,x.1)) |
|
529 | 5.99k | } |
530 | | |
531 | 10.0k | fn parse_krb5_padata_sequence(i: &[u8]) -> IResult<&[u8], Vec<PAData>, BerError> { |
532 | 10.0k | parse_der_struct!( kerberos_parser::krb5_parser::parse_krb5_padata_sequence::{closure#2} Line | Count | Source | 532 | 5.99k | parse_der_struct!( |
|
533 | 5.99k | i, |
534 | 6.61k | TAG DerTag::Sequence, kerberos_parser::krb5_parser::parse_krb5_padata_sequence::{closure#1} Line | Count | Source | 532 | 6.95k | parse_der_struct!( | 533 | | i, | 534 | 6.61k | TAG DerTag::Sequence, |
|
535 | 5.99k | v: many0!(complete!(parse_krb5_padata)) >> |
536 | 5.99k | ( v ) |
537 | 5.99k | ) kerberos_parser::krb5_parser::parse_krb5_padata_sequence::{closure#2}::{closure#0} Line | Count | Source | 532 | 5.99k | parse_der_struct!( | 533 | 5.99k | i, | 534 | 5.99k | TAG DerTag::Sequence, | 535 | 5.99k | v: many0!(complete!(parse_krb5_padata)) >> | 536 | 5.99k | ( v ) | 537 | 5.99k | ) |
|
538 | 10.0k | .map(|(rem, x)| (rem, x.1)) |
539 | 10.0k | } |
540 | | |
541 | | /// Parse a Kerberos AP Request |
542 | | /// |
543 | | /// <pre> |
544 | | /// AP-REQ ::= [APPLICATION 14] SEQUENCE { |
545 | | /// pvno [0] INTEGER (5), |
546 | | /// msg-type [1] INTEGER (14), |
547 | | /// ap-options [2] APOptions, |
548 | | /// ticket [3] Ticket, |
549 | | /// authenticator [4] EncryptedData -- Authenticator |
550 | | /// } |
551 | | /// |
552 | | /// APOptions ::= KerberosFlags |
553 | | /// -- reserved(0), |
554 | | /// -- use-session-key(1), |
555 | | /// -- mutual-required(2) |
556 | | /// </pre> |
557 | 18.0k | pub fn parse_ap_req(i: &[u8]) -> IResult<&[u8], ApReq, BerError> { |
558 | 50.8k | parse_der_application!( |
559 | 50.8k | i, |
560 | 50.8k | APPLICATION 14, |
561 | 50.8k | st: parse_der_struct!( |
562 | 50.8k | TAG DerTag::Sequence, |
563 | 50.8k | pvno: parse_der_tagged!(EXPLICIT 0,parse_der_u32) >> |
564 | 50.8k | msgtype: parse_der_tagged!(EXPLICIT 1,parse_der_u32) >> |
565 | 50.8k | error_if!(pvno != 5 || msgtype != 14, ErrorKind::Tag) >> |
566 | 50.8k | flags: parse_der_tagged!(EXPLICIT 2,parse_kerberos_flags) >> |
567 | 50.8k | ticket: parse_der_tagged!(EXPLICIT 3,parse_krb5_ticket) >> |
568 | 50.8k | auth: parse_der_tagged!(EXPLICIT 4,parse_encrypted) >> |
569 | 50.8k | ( ApReq{ |
570 | 50.8k | pvno, |
571 | 50.8k | msg_type: MessageType(msgtype), |
572 | 50.8k | ap_options: flags, |
573 | 50.8k | ticket, |
574 | 50.8k | authenticator: auth, |
575 | 50.8k | }) |
576 | 50.8k | ) |
577 | 50.8k | >> (st) |
578 | 50.8k | ) kerberos_parser::krb5_parser::parse_ap_req::{closure#7} Line | Count | Source | 558 | 33 | parse_der_application!( | 559 | 33 | i, | 560 | 33 | APPLICATION 14, | 561 | 33 | st: parse_der_struct!( | 562 | 33 | TAG DerTag::Sequence, | 563 | 33 | pvno: parse_der_tagged!(EXPLICIT 0,parse_der_u32) >> | 564 | 33 | msgtype: parse_der_tagged!(EXPLICIT 1,parse_der_u32) >> | 565 | 33 | error_if!(pvno != 5 || msgtype != 14, ErrorKind::Tag) >> | 566 | 33 | flags: parse_der_tagged!(EXPLICIT 2,parse_kerberos_flags) >> | 567 | 33 | ticket: parse_der_tagged!(EXPLICIT 3,parse_krb5_ticket) >> | 568 | 33 | auth: parse_der_tagged!(EXPLICIT 4,parse_encrypted) >> | 569 | 33 | ( ApReq{ | 570 | 33 | pvno, | 571 | 33 | msg_type: MessageType(msgtype), | 572 | 33 | ap_options: flags, | 573 | 33 | ticket, | 574 | 33 | authenticator: auth, | 575 | 33 | }) | 576 | 33 | ) | 577 | 33 | >> (st) | 578 | 33 | ) |
kerberos_parser::krb5_parser::parse_ap_req::{closure#3} Line | Count | Source | 558 | 12.1k | parse_der_application!( | 559 | 12.1k | i, | 560 | 12.1k | APPLICATION 14, | 561 | 12.1k | st: parse_der_struct!( | 562 | 12.1k | TAG DerTag::Sequence, | 563 | 12.1k | pvno: parse_der_tagged!(EXPLICIT 0,parse_der_u32) >> | 564 | 12.1k | msgtype: parse_der_tagged!(EXPLICIT 1,parse_der_u32) >> | 565 | 12.1k | error_if!(pvno != 5 || msgtype != 14, ErrorKind::Tag) >> | 566 | 12.1k | flags: parse_der_tagged!(EXPLICIT 2,parse_kerberos_flags) >> | 567 | 12.1k | ticket: parse_der_tagged!(EXPLICIT 3,parse_krb5_ticket) >> | 568 | 12.1k | auth: parse_der_tagged!(EXPLICIT 4,parse_encrypted) >> | 569 | 12.1k | ( ApReq{ | 570 | 12.1k | pvno, | 571 | 12.1k | msg_type: MessageType(msgtype), | 572 | 12.1k | ap_options: flags, | 573 | 12.1k | ticket, | 574 | 12.1k | authenticator: auth, | 575 | 12.1k | }) | 576 | 12.1k | ) | 577 | 12.1k | >> (st) | 578 | 12.1k | ) |
kerberos_parser::krb5_parser::parse_ap_req::{closure#4} Line | Count | Source | 558 | 10.0k | parse_der_application!( | 559 | 10.0k | i, | 560 | 10.0k | APPLICATION 14, | 561 | 10.0k | st: parse_der_struct!( | 562 | 10.0k | TAG DerTag::Sequence, | 563 | 10.0k | pvno: parse_der_tagged!(EXPLICIT 0,parse_der_u32) >> | 564 | 10.0k | msgtype: parse_der_tagged!(EXPLICIT 1,parse_der_u32) >> | 565 | 10.0k | error_if!(pvno != 5 || msgtype != 14, ErrorKind::Tag) >> | 566 | 10.0k | flags: parse_der_tagged!(EXPLICIT 2,parse_kerberos_flags) >> | 567 | 10.0k | ticket: parse_der_tagged!(EXPLICIT 3,parse_krb5_ticket) >> | 568 | 10.0k | auth: parse_der_tagged!(EXPLICIT 4,parse_encrypted) >> | 569 | 10.0k | ( ApReq{ | 570 | 10.0k | pvno, | 571 | 10.0k | msg_type: MessageType(msgtype), | 572 | 10.0k | ap_options: flags, | 573 | 10.0k | ticket, | 574 | 10.0k | authenticator: auth, | 575 | 10.0k | }) | 576 | 10.0k | ) | 577 | 10.0k | >> (st) | 578 | 10.0k | ) |
kerberos_parser::krb5_parser::parse_ap_req::{closure#5} Line | Count | Source | 558 | 7.46k | parse_der_application!( | 559 | 7.46k | i, | 560 | 7.46k | APPLICATION 14, | 561 | 7.46k | st: parse_der_struct!( | 562 | 7.46k | TAG DerTag::Sequence, | 563 | 7.46k | pvno: parse_der_tagged!(EXPLICIT 0,parse_der_u32) >> | 564 | 7.46k | msgtype: parse_der_tagged!(EXPLICIT 1,parse_der_u32) >> | 565 | 7.46k | error_if!(pvno != 5 || msgtype != 14, ErrorKind::Tag) >> | 566 | 7.46k | flags: parse_der_tagged!(EXPLICIT 2,parse_kerberos_flags) >> | 567 | 7.46k | ticket: parse_der_tagged!(EXPLICIT 3,parse_krb5_ticket) >> | 568 | 7.46k | auth: parse_der_tagged!(EXPLICIT 4,parse_encrypted) >> | 569 | 7.46k | ( ApReq{ | 570 | 7.46k | pvno, | 571 | 7.46k | msg_type: MessageType(msgtype), | 572 | 7.46k | ap_options: flags, | 573 | 7.46k | ticket, | 574 | 7.46k | authenticator: auth, | 575 | 7.46k | }) | 576 | 7.46k | ) | 577 | 7.46k | >> (st) | 578 | 7.46k | ) |
kerberos_parser::krb5_parser::parse_ap_req::{closure#6} Line | Count | Source | 558 | 4.34k | parse_der_application!( | 559 | 4.34k | i, | 560 | 4.34k | APPLICATION 14, | 561 | 4.34k | st: parse_der_struct!( | 562 | 4.34k | TAG DerTag::Sequence, | 563 | 4.34k | pvno: parse_der_tagged!(EXPLICIT 0,parse_der_u32) >> | 564 | 4.34k | msgtype: parse_der_tagged!(EXPLICIT 1,parse_der_u32) >> | 565 | 4.34k | error_if!(pvno != 5 || msgtype != 14, ErrorKind::Tag) >> | 566 | 4.34k | flags: parse_der_tagged!(EXPLICIT 2,parse_kerberos_flags) >> | 567 | 4.34k | ticket: parse_der_tagged!(EXPLICIT 3,parse_krb5_ticket) >> | 568 | 4.34k | auth: parse_der_tagged!(EXPLICIT 4,parse_encrypted) >> | 569 | 4.34k | ( ApReq{ | 570 | 4.34k | pvno, | 571 | 4.34k | msg_type: MessageType(msgtype), | 572 | 4.34k | ap_options: flags, | 573 | 4.34k | ticket, | 574 | 4.34k | authenticator: auth, | 575 | 4.34k | }) | 576 | 4.34k | ) | 577 | 4.34k | >> (st) | 578 | 4.34k | ) |
kerberos_parser::krb5_parser::parse_ap_req::{closure#1} Line | Count | Source | 558 | 16.7k | parse_der_application!( | 559 | 16.7k | i, | 560 | 16.7k | APPLICATION 14, | 561 | 16.7k | st: parse_der_struct!( | 562 | 16.7k | TAG DerTag::Sequence, | 563 | 16.7k | pvno: parse_der_tagged!(EXPLICIT 0,parse_der_u32) >> | 564 | 16.7k | msgtype: parse_der_tagged!(EXPLICIT 1,parse_der_u32) >> | 565 | 16.7k | error_if!(pvno != 5 || msgtype != 14, ErrorKind::Tag) >> | 566 | 16.7k | flags: parse_der_tagged!(EXPLICIT 2,parse_kerberos_flags) >> | 567 | 16.7k | ticket: parse_der_tagged!(EXPLICIT 3,parse_krb5_ticket) >> | 568 | 16.7k | auth: parse_der_tagged!(EXPLICIT 4,parse_encrypted) >> | 569 | 16.7k | ( ApReq{ | 570 | 16.7k | pvno, | 571 | 16.7k | msg_type: MessageType(msgtype), | 572 | 16.7k | ap_options: flags, | 573 | 16.7k | ticket, | 574 | 16.7k | authenticator: auth, | 575 | 16.7k | }) | 576 | 16.7k | ) | 577 | 16.7k | >> (st) | 578 | 16.7k | ) |
|
579 | 18.0k | .map(|(rem, t)| (rem, (t.1).1)) |
580 | 18.0k | } |
581 | | |
582 | | /// Parse a Kerberos AP Reply |
583 | | /// |
584 | | /// <pre> |
585 | | /// AP-REP ::= [APPLICATION 15] SEQUENCE { |
586 | | /// pvno [0] INTEGER (5), |
587 | | /// msg-type [1] INTEGER (15), |
588 | | /// enc-part [2] EncryptedData -- EncAPRepPart |
589 | | /// } |
590 | | /// </pre> |
591 | 0 | pub fn parse_ap_rep(i: &[u8]) -> IResult<&[u8], ApRep, BerError> { |
592 | 0 | parse_der_application!( |
593 | 0 | i, |
594 | 0 | APPLICATION 15, |
595 | 0 | st: parse_der_struct!( |
596 | 0 | TAG DerTag::Sequence, |
597 | 0 | pvno: parse_der_tagged!(EXPLICIT 0,parse_der_u32) >> |
598 | 0 | msgtype: parse_der_tagged!(EXPLICIT 1,parse_der_u32) >> |
599 | 0 | error_if!(pvno != 5 || msgtype != 15, ErrorKind::Tag) >> |
600 | 0 | edata: parse_der_tagged!(EXPLICIT 4,parse_encrypted) >> |
601 | 0 | ( ApRep{ |
602 | 0 | pvno, |
603 | 0 | msg_type: MessageType(msgtype), |
604 | 0 | enc_part: edata, |
605 | 0 | }) |
606 | 0 | ) |
607 | 0 | >> (st) |
608 | 0 | ) Unexecuted instantiation: kerberos_parser::krb5_parser::parse_ap_rep::{closure#3} Unexecuted instantiation: kerberos_parser::krb5_parser::parse_ap_rep::{closure#1} Unexecuted instantiation: kerberos_parser::krb5_parser::parse_ap_rep::{closure#4} Unexecuted instantiation: kerberos_parser::krb5_parser::parse_ap_rep::{closure#5} |
609 | 0 | .map(|(rem, t)| (rem, (t.1).1)) |
610 | 0 | } |