Coverage Report

Created: 2026-11-12 06:59

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