Coverage Report

Created: 2021-11-03 07:11

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