1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
use std::fmt;
use der_parser::DerObject;
pub use krb5_constants::*;
pub use krb5_errors::*;
#[derive(Debug, PartialEq)]
pub struct Realm(pub String);
#[derive(Debug, PartialEq)]
pub struct PrincipalName {
pub name_type: NameType,
pub name_string: Vec<String>,
}
impl fmt::Display for PrincipalName {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.write_str(&self.name_string.join("/"))
}
}
#[derive(Debug, PartialEq)]
pub struct Ticket<'a> {
pub tkt_vno: u32,
pub realm: Realm,
pub sname: PrincipalName,
pub enc_part: &'a [u8],
}
#[derive(Debug, PartialEq)]
pub struct EncryptedData<'a> {
pub etype: EncryptionType,
pub kvno: Option<u32>,
pub cipher: &'a [u8],
}
#[derive(Debug, PartialEq)]
pub struct KdcReq<'a> {
pub pvno: u32,
pub msg_type: MessageType,
pub padata: Vec<PAData<'a>>,
pub req_body: KdcReqBody<'a>,
}
#[derive(Debug, PartialEq)]
pub struct KdcReqBody<'a> {
pub kdc_options: DerObject<'a>,
pub cname: Option<PrincipalName>,
pub realm: Realm,
pub sname: Option<PrincipalName>,
pub from: Option<DerObject<'a>>,
pub till: DerObject<'a>,
pub rtime: Option<DerObject<'a>>,
pub nonce: u32,
pub etype: Vec<EncryptionType>,
pub addresses: Vec<HostAddress<'a>>,
pub enc_authorization_data: Option<EncryptedData<'a>>,
pub additional_tickets: Vec<Ticket<'a>>,
}
#[derive(Debug, PartialEq)]
pub struct HostAddress<'a> {
pub addr_type: AddressType,
pub address: &'a[u8],
}
#[derive(Debug, PartialEq)]
pub struct KdcRep<'a> {
pub pvno: u32,
pub msg_type: MessageType,
pub padata: Vec<PAData<'a>>,
pub crealm: Realm,
pub cname: PrincipalName,
pub ticket: Ticket<'a>,
pub enc_part: EncryptedData<'a>,
}
#[derive(Debug, PartialEq)]
pub struct KrbError<'a> {
pub pvno: u32,
pub msg_type: MessageType,
pub ctime: Option<DerObject<'a>>,
pub cusec: Option<u32>,
pub stime: DerObject<'a>,
pub susec: u32,
pub error_code: ErrorCode,
pub crealm: Option<Realm>,
pub cname: Option<PrincipalName>,
pub realm: Realm,
pub sname: PrincipalName,
pub etext: Option<String>,
pub edata: Option<DerObject<'a>>,
}
#[derive(Debug, PartialEq)]
pub struct PAData<'a> {
pub padata_type: PAType,
pub padata_value: &'a[u8],
}
#[derive(Debug, PartialEq)]
pub struct ApReq<'a> {
pub pvno : u32,
pub msg_type : MessageType,
pub ap_options : DerObject<'a>,
pub ticket : Ticket<'a>,
pub authenticator : EncryptedData<'a>,
}
#[derive(Debug, PartialEq)]
pub struct ApRep<'a> {
pub pvno : u32,
pub msg_type : MessageType,
pub enc_part : EncryptedData<'a>,
}