1 /* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2 /* tests/asn.1/krb5_decode_test.c */
3 /*
4 * Copyright (C) 1994 by the Massachusetts Institute of Technology.
5 * All rights reserved.
6 *
7 * Export of this software from the United States of America may
8 * require a specific license from the United States Government.
9 * It is the responsibility of any person or organization contemplating
10 * export to obtain such a license before exporting.
11 *
12 * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
13 * distribute this software and its documentation for any purpose and
14 * without fee is hereby granted, provided that the above copyright
15 * notice appear in all copies and that both that copyright notice and
16 * this permission notice appear in supporting documentation, and that
17 * the name of M.I.T. not be used in advertising or publicity pertaining
18 * to distribution of the software without specific, written prior
19 * permission. Furthermore if you modify this software you must label
20 * your software as modified software and not distribute it in such a
21 * fashion that it might be confused with the original M.I.T. software.
22 * M.I.T. makes no representations about the suitability of
23 * this software for any purpose. It is provided "as is" without express
24 * or implied warranty.
25 */
26
27 #include "k5-int.h"
28 #include "k5-spake.h"
29 #include "ktest.h"
30 #include "com_err.h"
31 #include "utility.h"
32 #include "ktest_equal.h"
33
34 #include "debug.h"
35 #include <string.h>
36
37 krb5_context test_context;
38 int error_count = 0;
39
40 void krb5_ktest_free_enc_data(krb5_context context, krb5_enc_data *val);
41
42 #ifndef DISABLE_PKINIT
43 static int equal_principal(krb5_principal *ref, krb5_principal var);
44 static void ktest_free_auth_pack(krb5_context context, krb5_auth_pack *val);
45 static void ktest_free_kdc_dh_key_info(krb5_context context,
46 krb5_kdc_dh_key_info *val);
47 static void ktest_free_pa_pk_as_req(krb5_context context,
48 krb5_pa_pk_as_req *val);
49 static void ktest_free_pa_pk_as_rep(krb5_context context,
50 krb5_pa_pk_as_rep *val);
51 static void ktest_free_reply_key_pack(krb5_context context,
52 krb5_reply_key_pack *val);
53 #endif
54 #ifdef ENABLE_LDAP
55 static void ktest_free_ldap_seqof_key_data(krb5_context context,
56 ldap_seqof_key_data *val);
57 #endif
58 static void ktest_free_kkdcp_message(krb5_context context,
59 krb5_kkdcp_message *val);
60
61 int
main(int argc,char ** argv)62 main(int argc, char **argv)
63 {
64 krb5_data code;
65 krb5_error_code retval;
66
67 retval = krb5_init_context(&test_context);
68 if (retval) {
69 com_err(argv[0], retval, "while initializing krb5");
70 exit(1);
71 }
72 init_access(argv[0]);
73
74
75 #define setup(type,constructor) \
76 type ref, *var; \
77 constructor(&ref); \
78 do {} while (0)
79
80 #define decode_run(typestring,description,encoding,decoder,comparator,cleanup) do { \
81 retval = krb5_data_hex_parse(&code,encoding); \
82 if (retval) { \
83 com_err("krb5_decode_test", retval, "while parsing %s", typestring); \
84 exit(1); \
85 } \
86 retval = decoder(&code,&var); \
87 if (retval) { \
88 com_err("krb5_decode_test", retval, "while decoding %s", typestring); \
89 error_count++; \
90 } \
91 test(comparator(&ref,var),typestring); \
92 printf("%s\n",description); \
93 krb5_free_data_contents(test_context, &code); \
94 cleanup(test_context, var); \
95 } while (0)
96
97 #define decode_fail(err,typestring,description,encoding,decoder) do { \
98 retval = krb5_data_hex_parse(&code,encoding); \
99 if (retval) { \
100 com_err("krb5_decode_test", retval, "while parsing %s", typestring); \
101 exit(1); \
102 } \
103 retval = decoder(&code,&var); \
104 if (retval != (err)) { \
105 com_err("krb5_decode_test", retval, "while decoding %s", typestring); \
106 error_count++; \
107 } \
108 test(1,typestring); \
109 printf("%s\n",description); \
110 krb5_free_data_contents(test_context, &code); \
111 } while (0)
112
113 /****************************************************************/
114 /* decode_krb5_authenticator */
115 {
116 setup(krb5_authenticator,ktest_make_sample_authenticator);
117
118 decode_run("authenticator","","62 81 A1 30 81 9E A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 0F 30 0D A0 03 02 01 01 A1 06 04 04 31 32 33 34 A4 05 02 03 01 E2 40 A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A6 13 30 11 A0 03 02 01 01 A1 0A 04 08 31 32 33 34 35 36 37 38 A7 03 02 01 11 A8 24 30 22 30 0F A0 03 02 01 01 A1 08 04 06 66 6F 6F 62 61 72 30 0F A0 03 02 01 01 A1 08 04 06 66 6F 6F 62 61 72",decode_krb5_authenticator,ktest_equal_authenticator,krb5_free_authenticator);
119
120 ref.seq_number = 0xffffff80;
121 decode_run("authenticator","(80 -> seq-number 0xffffff80)",
122 "62 81 A1 30 81 9E"
123 " A0 03 02 01 05"
124 " A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55"
125 " A2 1A 30 18"
126 " A0 03 02 01 01"
127 " A1 11 30 0F"
128 " 1B 06 68 66 74 73 61 69"
129 " 1B 05 65 78 74 72 61"
130 " A3 0F 30 0D"
131 " A0 03 02 01 01"
132 " A1 06 04 04 31 32 33 34"
133 " A4 05 02 03 01 E2 40"
134 " A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A"
135 " A6 13 30 11"
136 " A0 03 02 01 01"
137 " A1 0A 04 08 31 32 33 34 35 36 37 38"
138 " A7 03 02 01 80"
139 " A8 24 30 22"
140 " 30 0F"
141 " A0 03 02 01 01"
142 " A1 08 04 06 66 6F 6F 62 61 72"
143 " 30 0F"
144 " A0 03 02 01 01"
145 " A1 08 04 06 66 6F 6F 62 61 72"
146 ,decode_krb5_authenticator,ktest_equal_authenticator,krb5_free_authenticator);
147
148 ref.seq_number = 0xffffffff;
149 decode_run("authenticator","(FF -> seq-number 0xffffffff)",
150 "62 81 A1 30 81 9E"
151 " A0 03 02 01 05"
152 " A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55"
153 " A2 1A 30 18"
154 " A0 03 02 01 01"
155 " A1 11 30 0F"
156 " 1B 06 68 66 74 73 61 69"
157 " 1B 05 65 78 74 72 61"
158 " A3 0F 30 0D"
159 " A0 03 02 01 01"
160 " A1 06 04 04 31 32 33 34"
161 " A4 05 02 03 01 E2 40"
162 " A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A"
163 " A6 13 30 11"
164 " A0 03 02 01 01"
165 " A1 0A 04 08 31 32 33 34 35 36 37 38"
166 " A7 03 02 01 FF"
167 " A8 24 30 22"
168 " 30 0F"
169 " A0 03 02 01 01"
170 " A1 08 04 06 66 6F 6F 62 61 72"
171 " 30 0F"
172 " A0 03 02 01 01"
173 " A1 08 04 06 66 6F 6F 62 61 72"
174 ,decode_krb5_authenticator,ktest_equal_authenticator,krb5_free_authenticator);
175
176 ref.seq_number = 0xff;
177 decode_run("authenticator","(00FF -> seq-number 0xff)",
178 "62 81 A2 30 81 9F"
179 " A0 03 02 01 05"
180 " A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55"
181 " A2 1A 30 18"
182 " A0 03 02 01 01"
183 " A1 11 30 0F"
184 " 1B 06 68 66 74 73 61 69"
185 " 1B 05 65 78 74 72 61"
186 " A3 0F 30 0D"
187 " A0 03 02 01 01"
188 " A1 06 04 04 31 32 33 34"
189 " A4 05 02 03 01 E2 40"
190 " A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A"
191 " A6 13 30 11"
192 " A0 03 02 01 01"
193 " A1 0A 04 08 31 32 33 34 35 36 37 38"
194 " A7 04 02 02 00 FF"
195 " A8 24 30 22"
196 " 30 0F"
197 " A0 03 02 01 01"
198 " A1 08 04 06 66 6F 6F 62 61 72"
199 " 30 0F"
200 " A0 03 02 01 01"
201 " A1 08 04 06 66 6F 6F 62 61 72"
202 ,decode_krb5_authenticator,ktest_equal_authenticator,krb5_free_authenticator);
203
204 ref.seq_number = 0xffffffff;
205 decode_run("authenticator","(00FFFFFFFF -> seq-number 0xffffffff)",
206 "62 81 A5 30 81 A2"
207 " A0 03 02 01 05"
208 " A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55"
209 " A2 1A 30 18"
210 " A0 03 02 01 01"
211 " A1 11 30 0F"
212 " 1B 06 68 66 74 73 61 69"
213 " 1B 05 65 78 74 72 61"
214 " A3 0F 30 0D"
215 " A0 03 02 01 01"
216 " A1 06 04 04 31 32 33 34"
217 " A4 05 02 03 01 E2 40"
218 " A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A"
219 " A6 13 30 11"
220 " A0 03 02 01 01"
221 " A1 0A 04 08 31 32 33 34 35 36 37 38"
222 " A7 07 02 05 00 FF FF FF FF"
223 " A8 24 30 22"
224 " 30 0F"
225 " A0 03 02 01 01"
226 " A1 08 04 06 66 6F 6F 62 61 72"
227 " 30 0F"
228 " A0 03 02 01 01"
229 " A1 08 04 06 66 6F 6F 62 61 72"
230 ,decode_krb5_authenticator,ktest_equal_authenticator,krb5_free_authenticator);
231
232 ref.seq_number = 0x7fffffff;
233 decode_run("authenticator","(7FFFFFFF -> seq-number 0x7fffffff)",
234 "62 81 A4 30 81 A1"
235 " A0 03 02 01 05"
236 " A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55"
237 " A2 1A 30 18"
238 " A0 03 02 01 01"
239 " A1 11 30 0F"
240 " 1B 06 68 66 74 73 61 69"
241 " 1B 05 65 78 74 72 61"
242 " A3 0F 30 0D"
243 " A0 03 02 01 01"
244 " A1 06 04 04 31 32 33 34"
245 " A4 05 02 03 01 E2 40"
246 " A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A"
247 " A6 13 30 11"
248 " A0 03 02 01 01"
249 " A1 0A 04 08 31 32 33 34 35 36 37 38"
250 " A7 06 02 04 7F FF FF FF"
251 " A8 24 30 22"
252 " 30 0F"
253 " A0 03 02 01 01"
254 " A1 08 04 06 66 6F 6F 62 61 72"
255 " 30 0F"
256 " A0 03 02 01 01"
257 " A1 08 04 06 66 6F 6F 62 61 72"
258 ,decode_krb5_authenticator,ktest_equal_authenticator,krb5_free_authenticator);
259
260 ref.seq_number = 0xffffffff;
261 decode_run("authenticator","(FFFFFFFF -> seq-number 0xffffffff)",
262 "62 81 A4 30 81 A1"
263 " A0 03 02 01 05"
264 " A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55"
265 " A2 1A 30 18"
266 " A0 03 02 01 01"
267 " A1 11 30 0F"
268 " 1B 06 68 66 74 73 61 69"
269 " 1B 05 65 78 74 72 61"
270 " A3 0F 30 0D"
271 " A0 03 02 01 01"
272 " A1 06 04 04 31 32 33 34"
273 " A4 05 02 03 01 E2 40"
274 " A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A"
275 " A6 13 30 11"
276 " A0 03 02 01 01"
277 " A1 0A 04 08 31 32 33 34 35 36 37 38"
278 " A7 06 02 04 FF FF FF FF"
279 " A8 24 30 22"
280 " 30 0F"
281 " A0 03 02 01 01"
282 " A1 08 04 06 66 6F 6F 62 61 72"
283 " 30 0F"
284 " A0 03 02 01 01"
285 " A1 08 04 06 66 6F 6F 62 61 72"
286 ,decode_krb5_authenticator,ktest_equal_authenticator,krb5_free_authenticator);
287
288 ktest_destroy_checksum(&(ref.checksum));
289 ktest_destroy_keyblock(&(ref.subkey));
290 ref.seq_number = 0;
291 ktest_empty_authorization_data(ref.authorization_data);
292 decode_run("authenticator","(optionals empty)","62 4F 30 4D A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A4 05 02 03 01 E2 40 A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A",decode_krb5_authenticator,ktest_equal_authenticator,krb5_free_authenticator);
293
294 ktest_destroy_authorization_data(&(ref.authorization_data));
295
296 decode_run("authenticator","(optionals NULL)","62 4F 30 4D A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A4 05 02 03 01 E2 40 A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A",decode_krb5_authenticator,ktest_equal_authenticator,krb5_free_authenticator);
297
298 ktest_empty_authenticator(&ref);
299 }
300
301 /****************************************************************/
302 /* decode_krb5_ticket */
303 {
304 setup(krb5_ticket,ktest_make_sample_ticket);
305 decode_run("ticket","","61 5C 30 5A A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65",decode_krb5_ticket,ktest_equal_ticket,krb5_free_ticket);
306 decode_run("ticket","(+ trailing [4] INTEGER","61 61 30 5F A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65 A4 03 02 01 01",decode_krb5_ticket,ktest_equal_ticket,krb5_free_ticket);
307
308 /*
309 "61 80 30 80 "
310 " A0 03 02 01 05 "
311 " A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 "
312 " A2 80 30 80 "
313 " A0 03 02 01 01 "
314 " A1 80 30 80 "
315 " 1B 06 68 66 74 73 61 69 "
316 " 1B 05 65 78 74 72 61 "
317 " 00 00 00 00 "
318 " 00 00 00 00 "
319 " A3 80 30 80 "
320 " A0 03 02 01 00 "
321 " A1 03 02 01 05 "
322 " A2 17 04 15 6B 72 62 41 53 4E 2E 31 "
323 " 20 74 65 73 74 20 6D 65 73 73 61 67 65 "
324 " 00 00 00 00"
325 "00 00 00 00"
326 */
327 decode_fail(ASN1_INDEF,"ticket","(indefinite lengths)", "61 80 30 80 A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 80 30 80 A0 03 02 01 01 A1 80 30 80 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 00 00 00 00 00 00 00 00 A3 80 30 80 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65 00 00 00 00 00 00 00 00" ,decode_krb5_ticket);
328 /*
329 "61 80 30 80 "
330 " A0 03 02 01 05 "
331 " A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 "
332 " A2 80 30 80 "
333 " A0 03 02 01 01 "
334 " A1 80 30 80 "
335 " 1B 06 68 66 74 73 61 69 "
336 " 1B 05 65 78 74 72 61 "
337 " 00 00 00 00 "
338 " 00 00 00 00 "
339 " A3 80 30 80 "
340 " A0 03 02 01 00 "
341 " A1 03 02 01 05 "
342 " A2 17 04 15 6B 72 62 41 53 4E 2E 31 "
343 " 20 74 65 73 74 20 6D 65 73 73 61 67 65 "
344 " 00 00 00 00"
345 " A4 03 02 01 01 "
346 "00 00 00 00"
347 */
348 decode_fail(ASN1_INDEF,"ticket","(indefinite lengths + trailing [4] INTEGER)", "61 80 30 80 A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 80 30 80 A0 03 02 01 01 A1 80 30 80 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 00 00 00 00 00 00 00 00 A3 80 30 80 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65 00 00 00 00 A4 03 02 01 01 00 00 00 00",decode_krb5_ticket);
349
350 ktest_empty_ticket(&ref);
351
352 }
353
354 /****************************************************************/
355 /* decode_krb5_encryption_key */
356 {
357 setup(krb5_keyblock,ktest_make_sample_keyblock);
358
359 decode_run("encryption_key","","30 11 A0 03 02 01 01 A1 0A 04 08 31 32 33 34 35 36 37 38",decode_krb5_encryption_key,ktest_equal_encryption_key,krb5_free_keyblock);
360
361 decode_run("encryption_key","(+ trailing [2] INTEGER)","30 16 A0 03 02 01 01 A1 0A 04 08 31 32 33 34 35 36 37 38 A2 03 02 01 01",decode_krb5_encryption_key,ktest_equal_encryption_key,krb5_free_keyblock);
362 decode_run("encryption_key","(+ trailing [2] SEQUENCE {[0] INTEGER})","30 1A A0 03 02 01 01 A1 0A 04 08 31 32 33 34 35 36 37 38 A2 07 30 05 A0 03 02 01 01",decode_krb5_encryption_key,ktest_equal_encryption_key,krb5_free_keyblock);
363 decode_fail(ASN1_INDEF,"encryption_key","(indefinite lengths)","30 80 A0 03 02 01 01 A1 0A 04 08 31 32 33 34 35 36 37 38 00 00",decode_krb5_encryption_key);
364 decode_fail(ASN1_INDEF,"encryption_key","(indefinite lengths + trailing [2] INTEGER)","30 80 A0 03 02 01 01 A1 0A 04 08 31 32 33 34 35 36 37 38 A2 03 02 01 01 00 00",decode_krb5_encryption_key);
365 decode_fail(ASN1_INDEF,"encryption_key","(indefinite lengths + trailing [2] SEQUENCE {[0] INTEGER})","30 80 A0 03 02 01 01 A1 0A 04 08 31 32 33 34 35 36 37 38 A2 80 30 80 A0 03 02 01 01 00 00 00 00 00 00",decode_krb5_encryption_key);
366 decode_fail(ASN1_INDEF,"encryption_key","(indefinite lengths + trailing SEQUENCE {[0] INTEGER})","30 80 A0 03 02 01 01 A1 0A 04 08 31 32 33 34 35 36 37 38 30 80 A0 03 02 01 01 00 00 00 00",decode_krb5_encryption_key);
367 ref.enctype = -1;
368 decode_run("encryption_key","(enctype = -1)","30 11 A0 03 02 01 FF A1 0A 04 08 31 32 33 34 35 36 37 38",decode_krb5_encryption_key,ktest_equal_encryption_key,krb5_free_keyblock);
369 ref.enctype = -255;
370 decode_run("encryption_key","(enctype = -255)","30 12 A0 04 02 02 FF 01 A1 0A 04 08 31 32 33 34 35 36 37 38",decode_krb5_encryption_key,ktest_equal_encryption_key,krb5_free_keyblock);
371 ref.enctype = 255;
372 decode_run("encryption_key","(enctype = 255)","30 12 A0 04 02 02 00 FF A1 0A 04 08 31 32 33 34 35 36 37 38",decode_krb5_encryption_key,ktest_equal_encryption_key,krb5_free_keyblock);
373 ref.enctype = -2147483648U;
374 decode_run("encryption_key","(enctype = -2147483648)","30 14 A0 06 02 04 80 00 00 00 A1 0A 04 08 31 32 33 34 35 36 37 38",decode_krb5_encryption_key,ktest_equal_encryption_key,krb5_free_keyblock);
375 ref.enctype = 2147483647;
376 decode_run("encryption_key","(enctype = 2147483647)","30 14 A0 06 02 04 7F FF FF FF A1 0A 04 08 31 32 33 34 35 36 37 38",decode_krb5_encryption_key,ktest_equal_encryption_key,krb5_free_keyblock);
377
378 ktest_empty_keyblock(&ref);
379 }
380
381 /****************************************************************/
382 /* decode_krb5_enc_tkt_part */
383 {
384 setup(krb5_enc_tkt_part,ktest_make_sample_enc_tkt_part);
385 decode_run("enc_tkt_part","","63 82 01 14 30 82 01 10 A0 07 03 05 00 FE DC BA 98 A1 13 30 11 A0 03 02 01 01 A1 0A 04 08 31 32 33 34 35 36 37 38 A2 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A3 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A4 2E 30 2C A0 03 02 01 01 A1 25 04 23 45 44 55 2C 4D 49 54 2E 2C 41 54 48 45 4E 41 2E 2C 57 41 53 48 49 4E 47 54 4F 4E 2E 45 44 55 2C 43 53 2E A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A6 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A7 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A8 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A9 20 30 1E 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23 AA 24 30 22 30 0F A0 03 02 01 01 A1 08 04 06 66 6F 6F 62 61 72 30 0F A0 03 02 01 01 A1 08 04 06 66 6F 6F 62 61 72",decode_krb5_enc_tkt_part,ktest_equal_enc_tkt_part,krb5_free_enc_tkt_part);
386
387 ref.times.starttime = 0;
388 ref.times.renew_till = 0;
389 ktest_destroy_address(&(ref.caddrs[1]));
390 ktest_destroy_address(&(ref.caddrs[0]));
391 ktest_destroy_authdata(&(ref.authorization_data[1]));
392 ktest_destroy_authdata(&(ref.authorization_data[0]));
393 /* ISODE version fails on the empty caddrs field */
394 ktest_destroy_addresses(&(ref.caddrs));
395 ktest_destroy_authorization_data(&(ref.authorization_data));
396
397 decode_run("enc_tkt_part","(optionals NULL)","63 81 A5 30 81 A2 A0 07 03 05 00 FE DC BA 98 A1 13 30 11 A0 03 02 01 01 A1 0A 04 08 31 32 33 34 35 36 37 38 A2 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A3 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A4 2E 30 2C A0 03 02 01 01 A1 25 04 23 45 44 55 2C 4D 49 54 2E 2C 41 54 48 45 4E 41 2E 2C 57 41 53 48 49 4E 47 54 4F 4E 2E 45 44 55 2C 43 53 2E A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A7 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A",decode_krb5_enc_tkt_part,ktest_equal_enc_tkt_part, krb5_free_enc_tkt_part);
398
399 decode_run("enc_tkt_part","(optionals NULL + bitstring enlarged to 38 bits)","63 81 A6 30 81 A3 A0 08 03 06 02 FE DC BA 98 DC A1 13 30 11 A0 03 02 01 01 A1 0A 04 08 31 32 33 34 35 36 37 38 A2 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A3 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A4 2E 30 2C A0 03 02 01 01 A1 25 04 23 45 44 55 2C 4D 49 54 2E 2C 41 54 48 45 4E 41 2E 2C 57 41 53 48 49 4E 47 54 4F 4E 2E 45 44 55 2C 43 53 2E A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A7 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A",decode_krb5_enc_tkt_part,ktest_equal_enc_tkt_part,krb5_free_enc_tkt_part);
400
401 decode_run("enc_tkt_part","(optionals NULL + bitstring enlarged to 40 bits)","63 81 A6 30 81 A3 A0 08 03 06 00 FE DC BA 98 DE A1 13 30 11 A0 03 02 01 01 A1 0A 04 08 31 32 33 34 35 36 37 38 A2 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A3 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A4 2E 30 2C A0 03 02 01 01 A1 25 04 23 45 44 55 2C 4D 49 54 2E 2C 41 54 48 45 4E 41 2E 2C 57 41 53 48 49 4E 47 54 4F 4E 2E 45 44 55 2C 43 53 2E A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A7 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A",decode_krb5_enc_tkt_part,ktest_equal_enc_tkt_part,krb5_free_enc_tkt_part);
402
403 decode_run("enc_tkt_part","(optionals NULL + bitstring reduced to 29 bits)","63 81 A5 30 81 A2 A0 07 03 05 03 FE DC BA 98 A1 13 30 11 A0 03 02 01 01 A1 0A 04 08 31 32 33 34 35 36 37 38 A2 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A3 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A4 2E 30 2C A0 03 02 01 01 A1 25 04 23 45 44 55 2C 4D 49 54 2E 2C 41 54 48 45 4E 41 2E 2C 57 41 53 48 49 4E 47 54 4F 4E 2E 45 44 55 2C 43 53 2E A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A7 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A",decode_krb5_enc_tkt_part,ktest_equal_enc_tkt_part,krb5_free_enc_tkt_part);
404
405 ref.flags &= 0xFFFFFF00;
406
407 decode_run("enc_tkt_part","(optionals NULL + bitstring reduced to 24 bits)","63 81 A4 30 81 A1 A0 06 03 04 00 FE DC BA A1 13 30 11 A0 03 02 01 01 A1 0A 04 08 31 32 33 34 35 36 37 38 A2 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A3 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A4 2E 30 2C A0 03 02 01 01 A1 25 04 23 45 44 55 2C 4D 49 54 2E 2C 41 54 48 45 4E 41 2E 2C 57 41 53 48 49 4E 47 54 4F 4E 2E 45 44 55 2C 43 53 2E A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A7 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A",decode_krb5_enc_tkt_part,ktest_equal_enc_tkt_part,krb5_free_enc_tkt_part);
408
409 ktest_empty_enc_tkt_part(&ref);
410 }
411
412 /****************************************************************/
413 /* decode_krb5_enc_kdc_rep_part */
414 {
415 setup(krb5_enc_kdc_rep_part,ktest_make_sample_enc_kdc_rep_part);
416
417 decode_run("enc_kdc_rep_part","","7A 82 01 0E 30 82 01 0A A0 13 30 11 A0 03 02 01 01 A1 0A 04 08 31 32 33 34 35 36 37 38 A1 36 30 34 30 18 A0 03 02 01 FB A1 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A 30 18 A0 03 02 01 FB A1 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A2 03 02 01 2A A3 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A4 07 03 05 00 FE DC BA 98 A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A6 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A7 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A8 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A9 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 AA 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 AB 20 30 1E 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23",decode_krb5_enc_kdc_rep_part,ktest_equal_enc_kdc_rep_part,krb5_free_enc_kdc_rep_part);
418
419 ref.key_exp = 0;
420 /* ref.times.starttime = 0;*/
421 ref.times.starttime = ref.times.authtime;
422 ref.times.renew_till = 0;
423 ref.flags &= ~TKT_FLG_RENEWABLE;
424 ktest_destroy_addresses(&(ref.caddrs));
425
426 decode_run("enc_kdc_rep_part","(optionals NULL)","7A 81 B2 30 81 AF A0 13 30 11 A0 03 02 01 01 A1 0A 04 08 31 32 33 34 35 36 37 38 A1 36 30 34 30 18 A0 03 02 01 FB A1 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A 30 18 A0 03 02 01 FB A1 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A2 03 02 01 2A A4 07 03 05 00 FE 5C BA 98 A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A7 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A9 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 AA 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61",decode_krb5_enc_kdc_rep_part,ktest_equal_enc_kdc_rep_part,krb5_free_enc_kdc_rep_part);
427
428 ktest_empty_enc_kdc_rep_part(&ref);
429 }
430
431 /****************************************************************/
432 /* decode_krb5_as_rep */
433 {
434 setup(krb5_kdc_rep,ktest_make_sample_kdc_rep);
435 ref.msg_type = KRB5_AS_REP;
436
437 decode_run("as_rep","","6B 81 EA 30 81 E7 A0 03 02 01 05 A1 03 02 01 0B A2 26 30 24 30 10 A1 03 02 01 0D A2 09 04 07 70 61 2D 64 61 74 61 30 10 A1 03 02 01 0D A2 09 04 07 70 61 2D 64 61 74 61 A3 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A4 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A5 5E 61 5C 30 5A A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65 A6 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65",decode_krb5_as_rep,ktest_equal_as_rep,krb5_free_kdc_rep);
438
439 /*
440 6B 80 30 80
441 A0 03 02 01 05
442 A1 03 02 01 0B
443 A2 80 30 80
444 30 80
445 A1 03 02 01 0D
446 A2 09 04 07 70 61 2D 64 61 74 61
447 00 00
448 30 80
449 A1 03 02 01 0D
450 A2 09 04 07 70 61 2D 64 61 74 61
451 00 00
452 00 00 00 00
453 A3 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55
454 A4 80 30 80
455 A0 03 02 01 01
456 A1 80 30 80
457 1B 06 68 66 74 73 61 69
458 1B 05 65 78 74 72 61
459 00 00 00 00
460 00 00 00 00
461 A5 80 61 80 30 80
462 A0 03 02 01 05
463 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55
464 A2 80 30 80
465 A0 03 02 01 01
466 A1 80 30 80
467 1B 06 68 66 74 73 61 69
468 1B 05 65 78 74 72 61
469 00 00 00 00
470 00 00 00 00
471 A3 80 30 80
472 A0 03 02 01 00
473 A1 03 02 01 05
474 A2 17 04 15 6B 72 62 41 53 4E 2E 31
475 20 74 65 73 74 20 6D 65
476 73 73 61 67 65
477 00 00 00 00
478 00 00 00 00 00 00
479 A6 80 30 80
480 A0 03 02 01 00
481 A1 03 02 01 05
482 A2 17 04 15 6B 72 62 41 53 4E 2E 31
483 20 74 65 73 74 20 6D 65
484 73 73 61 67 65
485 00 00 00 00
486 00 00 00 00
487 */
488 decode_fail(ASN1_INDEF,"as_rep","(indefinite lengths)","6B 80 30 80 A0 03 02 01 05 A1 03 02 01 0B A2 80 30 80 30 80 A1 03 02 01 0D A2 09 04 07 70 61 2D 64 61 74 61 00 00 30 80 A1 03 02 01 0D A2 09 04 07 70 61 2D 64 61 74 61 00 00 00 00 00 00 A3 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A4 80 30 80 A0 03 02 01 01 A1 80 30 80 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 00 00 00 00 00 00 00 00 A5 80 61 80 30 80 A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 80 30 80 A0 03 02 01 01 A1 80 30 80 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 00 00 00 00 00 00 00 00 A3 80 30 80 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65 00 00 00 00 00 00 00 00 00 00 A6 80 30 80 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65 00 00 00 00 00 00 00 00",decode_krb5_as_rep);
489 ktest_destroy_pa_data_array(&(ref.padata));
490 decode_run("as_rep","(optionals NULL)","6B 81 C2 30 81 BF A0 03 02 01 05 A1 03 02 01 0B A3 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A4 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A5 5E 61 5C 30 5A A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65 A6 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65",decode_krb5_as_rep,ktest_equal_as_rep,krb5_free_kdc_rep);
491
492 ktest_empty_kdc_rep(&ref);
493 }
494
495 /****************************************************************/
496 /* decode_krb5_tgs_rep */
497 {
498 setup(krb5_kdc_rep,ktest_make_sample_kdc_rep);
499 ref.msg_type = KRB5_TGS_REP;
500
501 decode_run("tgs_rep","","6D 81 EA 30 81 E7 A0 03 02 01 05 A1 03 02 01 0D A2 26 30 24 30 10 A1 03 02 01 0D A2 09 04 07 70 61 2D 64 61 74 61 30 10 A1 03 02 01 0D A2 09 04 07 70 61 2D 64 61 74 61 A3 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A4 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A5 5E 61 5C 30 5A A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65 A6 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65",decode_krb5_tgs_rep,ktest_equal_tgs_rep,krb5_free_kdc_rep);
502
503 ktest_destroy_pa_data_array(&(ref.padata));
504 decode_run("tgs_rep","(optionals NULL)","6D 81 C2 30 81 BF A0 03 02 01 05 A1 03 02 01 0D A3 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A4 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A5 5E 61 5C 30 5A A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65 A6 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65",decode_krb5_tgs_rep,ktest_equal_tgs_rep,krb5_free_kdc_rep);
505
506 ktest_empty_kdc_rep(&ref);
507 }
508
509 /****************************************************************/
510 /* decode_krb5_ap_req */
511 {
512 setup(krb5_ap_req,ktest_make_sample_ap_req);
513 decode_run("ap_req","","6E 81 9D 30 81 9A A0 03 02 01 05 A1 03 02 01 0E A2 07 03 05 00 FE DC BA 98 A3 5E 61 5C 30 5A A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65 A4 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65",decode_krb5_ap_req,ktest_equal_ap_req,krb5_free_ap_req);
514 ktest_empty_ap_req(&ref);
515
516 }
517
518 /****************************************************************/
519 /* decode_krb5_ap_rep */
520 {
521 setup(krb5_ap_rep,ktest_make_sample_ap_rep);
522 decode_run("ap_rep","","6F 33 30 31 A0 03 02 01 05 A1 03 02 01 0F A2 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65",decode_krb5_ap_rep,ktest_equal_ap_rep,krb5_free_ap_rep);
523 ktest_empty_ap_rep(&ref);
524 }
525
526 /****************************************************************/
527 /* decode_krb5_ap_rep_enc_part */
528 {
529 setup(krb5_ap_rep_enc_part,ktest_make_sample_ap_rep_enc_part);
530
531 decode_run("ap_rep_enc_part","","7B 36 30 34 A0 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A1 05 02 03 01 E2 40 A2 13 30 11 A0 03 02 01 01 A1 0A 04 08 31 32 33 34 35 36 37 38 A3 03 02 01 11",decode_krb5_ap_rep_enc_part,ktest_equal_ap_rep_enc_part,krb5_free_ap_rep_enc_part);
532
533 ktest_destroy_keyblock(&(ref.subkey));
534 ref.seq_number = 0;
535 decode_run("ap_rep_enc_part","(optionals NULL)","7B 1C 30 1A A0 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A1 05 02 03 01 E2 40",decode_krb5_ap_rep_enc_part,ktest_equal_ap_rep_enc_part,krb5_free_ap_rep_enc_part);
536
537 retval = krb5_data_hex_parse(&code, "7B 06 30 04 A0 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A1 05 02 03 01 E2 40");
538 if (retval) {
539 com_err("krb5_decode_test", retval, "while parsing");
540 exit(1);
541 }
542 retval = decode_krb5_ap_rep_enc_part(&code, &var);
543 if (retval != ASN1_OVERRUN) {
544 printf("ERROR: ");
545 error_count++;
546 } else {
547 printf("OK: ");
548 }
549 printf("ap_rep_enc_part(optionals NULL + expect ASN1_OVERRUN for inconsistent length of timestamp)\n");
550 krb5_free_data_contents(test_context, &code);
551 krb5_free_ap_rep_enc_part(test_context, var);
552
553 ktest_empty_ap_rep_enc_part(&ref);
554 }
555
556 /****************************************************************/
557 /* decode_krb5_as_req */
558 {
559 setup(krb5_kdc_req,ktest_make_sample_kdc_req);
560 ref.msg_type = KRB5_AS_REQ;
561
562 ref.kdc_options &= ~KDC_OPT_ENC_TKT_IN_SKEY;
563 decode_run("as_req","","6A 82 01 E4 30 82 01 E0 A1 03 02 01 05 A2 03 02 01 0A A3 26 30 24 30 10 A1 03 02 01 0D A2 09 04 07 70 61 2D 64 61 74 61 30 10 A1 03 02 01 0D A2 09 04 07 70 61 2D 64 61 74 61 A4 82 01 AA 30 82 01 A6 A0 07 03 05 00 FE DC BA 90 A1 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A2 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A3 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A4 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A6 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A7 03 02 01 2A A8 08 30 06 02 01 00 02 01 01 A9 20 30 1E 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23 AA 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65 AB 81 BF 30 81 BC 61 5C 30 5A A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65 61 5C 30 5A A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65",decode_krb5_as_req,ktest_equal_as_req,krb5_free_kdc_req);
564
565 ktest_destroy_pa_data_array(&(ref.padata));
566 ktest_destroy_principal(&(ref.client));
567 #ifndef ISODE_SUCKS
568 ktest_destroy_principal(&(ref.server));
569 #endif
570 ref.kdc_options |= KDC_OPT_ENC_TKT_IN_SKEY;
571 ref.from = 0;
572 ref.rtime = 0;
573 ktest_destroy_addresses(&(ref.addresses));
574 ktest_destroy_enc_data(&(ref.authorization_data));
575 decode_run("as_req","(optionals NULL except second_ticket)","6A 82 01 14 30 82 01 10 A1 03 02 01 05 A2 03 02 01 0A A4 82 01 02 30 81 FF A0 07 03 05 00 FE DC BA 98 A2 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A7 03 02 01 2A A8 08 30 06 02 01 00 02 01 01 AB 81 BF 30 81 BC 61 5C 30 5A A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65 61 5C 30 5A A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65",decode_krb5_as_req,ktest_equal_as_req,krb5_free_kdc_req);
576 ktest_destroy_sequence_of_ticket(&(ref.second_ticket));
577 #ifndef ISODE_SUCKS
578 ktest_make_sample_principal(&(ref.server));
579 #endif
580 ref.kdc_options &= ~KDC_OPT_ENC_TKT_IN_SKEY;
581 decode_run("as_req","(optionals NULL except server)","6A 69 30 67 A1 03 02 01 05 A2 03 02 01 0A A4 5B 30 59 A0 07 03 05 00 FE DC BA 90 A2 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A3 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A7 03 02 01 2A A8 08 30 06 02 01 00 02 01 01",decode_krb5_as_req,ktest_equal_as_req,krb5_free_kdc_req);
582
583 ktest_empty_kdc_req(&ref);
584
585 }
586
587
588 /****************************************************************/
589 /* decode_krb5_tgs_req */
590 {
591 setup(krb5_kdc_req,ktest_make_sample_kdc_req);
592 ref.msg_type = KRB5_TGS_REQ;
593
594 ref.kdc_options &= ~KDC_OPT_ENC_TKT_IN_SKEY;
595 decode_run("tgs_req","","6C 82 01 E4 30 82 01 E0 A1 03 02 01 05 A2 03 02 01 0C A3 26 30 24 30 10 A1 03 02 01 0D A2 09 04 07 70 61 2D 64 61 74 61 30 10 A1 03 02 01 0D A2 09 04 07 70 61 2D 64 61 74 61 A4 82 01 AA 30 82 01 A6 A0 07 03 05 00 FE DC BA 90 A1 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A2 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A3 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A4 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A6 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A7 03 02 01 2A A8 08 30 06 02 01 00 02 01 01 A9 20 30 1E 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23 AA 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65 AB 81 BF 30 81 BC 61 5C 30 5A A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65 61 5C 30 5A A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65",decode_krb5_tgs_req,ktest_equal_tgs_req,krb5_free_kdc_req);
596
597 ktest_destroy_pa_data_array(&(ref.padata));
598 ktest_destroy_principal(&(ref.client));
599 #ifndef ISODE_SUCKS
600 ktest_destroy_principal(&(ref.server));
601 #endif
602 ref.kdc_options |= KDC_OPT_ENC_TKT_IN_SKEY;
603 ref.from = 0;
604 ref.rtime = 0;
605 ktest_destroy_addresses(&(ref.addresses));
606 ktest_destroy_enc_data(&(ref.authorization_data));
607 decode_run("tgs_req","(optionals NULL except second_ticket)","6C 82 01 14 30 82 01 10 A1 03 02 01 05 A2 03 02 01 0C A4 82 01 02 30 81 FF A0 07 03 05 00 FE DC BA 98 A2 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A7 03 02 01 2A A8 08 30 06 02 01 00 02 01 01 AB 81 BF 30 81 BC 61 5C 30 5A A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65 61 5C 30 5A A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65",decode_krb5_tgs_req,ktest_equal_tgs_req,krb5_free_kdc_req);
608
609 ktest_destroy_sequence_of_ticket(&(ref.second_ticket));
610 #ifndef ISODE_SUCKS
611 ktest_make_sample_principal(&(ref.server));
612 #endif
613 ref.kdc_options &= ~KDC_OPT_ENC_TKT_IN_SKEY;
614 decode_run("tgs_req","(optionals NULL except server)","6C 69 30 67 A1 03 02 01 05 A2 03 02 01 0C A4 5B 30 59 A0 07 03 05 00 FE DC BA 90 A2 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A3 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A7 03 02 01 2A A8 08 30 06 02 01 00 02 01 01",decode_krb5_tgs_req,ktest_equal_tgs_req,krb5_free_kdc_req);
615
616 ktest_empty_kdc_req(&ref);
617 }
618
619 /****************************************************************/
620 /* decode_krb5_kdc_req_body */
621 {
622 krb5_kdc_req ref, *var;
623 memset(&ref, 0, sizeof(krb5_kdc_req));
624 ktest_make_sample_kdc_req_body(&ref);
625 ref.kdc_options &= ~KDC_OPT_ENC_TKT_IN_SKEY;
626 decode_run("kdc_req_body","","30 82 01 A6 A0 07 03 05 00 FE DC BA 90 A1 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A2 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A3 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A4 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A6 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A7 03 02 01 2A A8 08 30 06 02 01 00 02 01 01 A9 20 30 1E 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23 AA 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65 AB 81 BF 30 81 BC 61 5C 30 5A A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65 61 5C 30 5A A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65",decode_krb5_kdc_req_body,ktest_equal_kdc_req_body,krb5_free_kdc_req);
627
628 ktest_destroy_principal(&(ref.client));
629 #ifndef ISODE_SUCKS
630 ktest_destroy_principal(&(ref.server));
631 #endif
632 ref.kdc_options |= KDC_OPT_ENC_TKT_IN_SKEY;
633 ref.from = 0;
634 ref.rtime = 0;
635 ktest_destroy_addresses(&(ref.addresses));
636 ktest_destroy_enc_data(&(ref.authorization_data));
637 decode_run("kdc_req_body","(optionals NULL except second_ticket)","30 81 FF A0 07 03 05 00 FE DC BA 98 A2 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A7 03 02 01 2A A8 08 30 06 02 01 00 02 01 01 AB 81 BF 30 81 BC 61 5C 30 5A A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65 61 5C 30 5A A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65",decode_krb5_kdc_req_body,ktest_equal_kdc_req_body,krb5_free_kdc_req);
638
639 ktest_destroy_sequence_of_ticket(&(ref.second_ticket));
640 #ifndef ISODE_SUCKS
641 ktest_make_sample_principal(&(ref.server));
642 #endif
643 ref.kdc_options &= ~KDC_OPT_ENC_TKT_IN_SKEY;
644 decode_run("kdc_req_body","(optionals NULL except server)","30 59 A0 07 03 05 00 FE DC BA 90 A2 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A3 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A7 03 02 01 2A A8 08 30 06 02 01 00 02 01 01",decode_krb5_kdc_req_body,ktest_equal_kdc_req_body,krb5_free_kdc_req);
645 ref.nktypes = 0;
646 free(ref.ktype);
647 ref.ktype = NULL;
648 decode_run("kdc_req_body","(optionals NULL except server; zero-length etypes)","30 53 A0 07 03 05 00 FE DC BA 90 A2 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A3 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A7 03 02 01 2A A8 02 30 00",decode_krb5_kdc_req_body,ktest_equal_kdc_req_body,krb5_free_kdc_req);
649
650 ktest_empty_kdc_req(&ref);
651 }
652
653
654 /****************************************************************/
655 /* decode_krb5_safe */
656 {
657 setup(krb5_safe,ktest_make_sample_safe);
658 decode_run("safe","","74 6E 30 6C A0 03 02 01 05 A1 03 02 01 14 A2 4F 30 4D A0 0A 04 08 6B 72 62 35 64 61 74 61 A1 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A2 05 02 03 01 E2 40 A3 03 02 01 11 A4 0F 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23 A5 0F 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23 A3 0F 30 0D A0 03 02 01 01 A1 06 04 04 31 32 33 34",decode_krb5_safe,ktest_equal_safe,krb5_free_safe);
659
660 ref.timestamp = 0;
661 ref.usec = 0;
662 ref.seq_number = 0;
663 ktest_destroy_address(&(ref.r_address));
664 decode_run("safe","(optionals NULL)","74 3E 30 3C A0 03 02 01 05 A1 03 02 01 14 A2 1F 30 1D A0 0A 04 08 6B 72 62 35 64 61 74 61 A4 0F 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23 A3 0F 30 0D A0 03 02 01 01 A1 06 04 04 31 32 33 34",decode_krb5_safe,ktest_equal_safe,krb5_free_safe);
665
666 ktest_empty_safe(&ref);
667 }
668
669 /****************************************************************/
670 /* decode_krb5_priv */
671 {
672 setup(krb5_priv,ktest_make_sample_priv);
673 decode_run("priv","","75 33 30 31 A0 03 02 01 05 A1 03 02 01 15 A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65",decode_krb5_priv,ktest_equal_priv,krb5_free_priv);
674 ktest_empty_priv(&ref);
675 }
676
677 /****************************************************************/
678 /* decode_krb5_enc_priv_part */
679 {
680 setup(krb5_priv_enc_part,ktest_make_sample_priv_enc_part);
681 decode_run("enc_priv_part","","7C 4F 30 4D A0 0A 04 08 6B 72 62 35 64 61 74 61 A1 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A2 05 02 03 01 E2 40 A3 03 02 01 11 A4 0F 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23 A5 0F 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23",decode_krb5_enc_priv_part,ktest_equal_enc_priv_part,krb5_free_priv_enc_part);
682
683 ref.timestamp = 0;
684 ref.usec = 0;
685 ref.seq_number = 0;
686 ktest_destroy_address(&(ref.r_address));
687 decode_run("enc_priv_part","(optionals NULL)","7C 1F 30 1D A0 0A 04 08 6B 72 62 35 64 61 74 61 A4 0F 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23",decode_krb5_enc_priv_part,ktest_equal_enc_priv_part,krb5_free_priv_enc_part);
688 ktest_empty_priv_enc_part(&ref);
689 }
690
691 /****************************************************************/
692 /* decode_krb5_cred */
693 {
694 setup(krb5_cred,ktest_make_sample_cred);
695 decode_run("cred","","76 81 F6 30 81 F3 A0 03 02 01 05 A1 03 02 01 16 A2 81 BF 30 81 BC 61 5C 30 5A A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65 61 5C 30 5A A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65 A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65",decode_krb5_cred,ktest_equal_cred,krb5_free_cred);
696 ktest_empty_cred(&ref);
697 }
698
699 /****************************************************************/
700 /* decode_krb5_enc_cred_part */
701 {
702 setup(krb5_cred_enc_part,ktest_make_sample_cred_enc_part);
703 decode_run("enc_cred_part","","7D 82 02 23 30 82 02 1F A0 82 01 DA 30 82 01 D6 30 81 E8 A0 13 30 11 A0 03 02 01 01 A1 0A 04 08 31 32 33 34 35 36 37 38 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 07 03 05 00 FE DC BA 98 A4 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A6 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A7 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A8 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A9 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 AA 20 30 1E 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23 30 81 E8 A0 13 30 11 A0 03 02 01 01 A1 0A 04 08 31 32 33 34 35 36 37 38 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 07 03 05 00 FE DC BA 98 A4 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A6 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A7 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A8 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A9 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 AA 20 30 1E 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23 A1 03 02 01 2A A2 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A3 05 02 03 01 E2 40 A4 0F 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23 A5 0F 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23",decode_krb5_enc_cred_part,ktest_equal_enc_cred_part,krb5_free_cred_enc_part);
704 /* free_cred_enc_part does not free the pointer */
705 free(var);
706 ktest_destroy_principal(&(ref.ticket_info[0]->client));
707 ktest_destroy_principal(&(ref.ticket_info[0]->server));
708 ref.ticket_info[0]->flags = 0;
709 ref.ticket_info[0]->times.authtime = 0;
710 ref.ticket_info[0]->times.starttime = 0;
711 ref.ticket_info[0]->times.endtime = 0;
712 ref.ticket_info[0]->times.renew_till = 0;
713 ktest_destroy_addresses(&(ref.ticket_info[0]->caddrs));
714 ref.nonce = 0;
715 ref.timestamp = 0;
716 ref.usec = 0;
717 ktest_destroy_address(&(ref.s_address));
718 ktest_destroy_address(&(ref.r_address));
719 decode_run("enc_cred_part","(optionals NULL)","7D 82 01 0E 30 82 01 0A A0 82 01 06 30 82 01 02 30 15 A0 13 30 11 A0 03 02 01 01 A1 0A 04 08 31 32 33 34 35 36 37 38 30 81 E8 A0 13 30 11 A0 03 02 01 01 A1 0A 04 08 31 32 33 34 35 36 37 38 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 07 03 05 00 FE DC BA 98 A4 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A6 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A7 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A8 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A9 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 AA 20 30 1E 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23",decode_krb5_enc_cred_part,ktest_equal_enc_cred_part,krb5_free_cred_enc_part);
720 /* free_cred_enc_part does not free the pointer */
721 free(var);
722
723 ktest_empty_cred_enc_part(&ref);
724 }
725
726 /****************************************************************/
727 /* decode_krb5_error */
728 {
729 setup(krb5_error,ktest_make_sample_error);
730 decode_run("error","","7E 81 BA 30 81 B7 A0 03 02 01 05 A1 03 02 01 1E A2 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A3 05 02 03 01 E2 40 A4 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A5 05 02 03 01 E2 40 A6 03 02 01 3C A7 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A8 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A9 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 AA 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 AB 0A 1B 08 6B 72 62 35 64 61 74 61 AC 0A 04 08 6B 72 62 35 64 61 74 61",decode_krb5_error,ktest_equal_error,krb5_free_error);
731
732 ref.ctime = 0;
733 ktest_destroy_principal(&(ref.client));
734 ktest_empty_data(&(ref.text));
735 ktest_empty_data(&(ref.e_data));
736 decode_run("error","(optionals NULL)","7E 60 30 5E A0 03 02 01 05 A1 03 02 01 1E A3 05 02 03 01 E2 40 A4 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A5 05 02 03 01 E2 40 A6 03 02 01 3C A9 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 AA 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61",decode_krb5_error,ktest_equal_error,krb5_free_error);
737
738 ktest_empty_error(&ref);
739 }
740
741 /****************************************************************/
742 /* decode_krb5_authdata and krb5int_get_authdata_containee_types */
743 {
744 krb5_authdata **ref, **var, tmp;
745 unsigned int count;
746 krb5_authdatatype *types = NULL;
747 ktest_make_sample_authorization_data(&ref);
748 retval = krb5_data_hex_parse(&code,"30 22 30 0F A0 03 02 01 01 A1 08 04 06 66 6F 6F 62 61 72 30 0F A0 03 02 01 01 A1 08 04 06 66 6F 6F 62 61 72");
749 if (retval) {
750 com_err("parsing authorization_data",retval,"");
751 exit(1);
752 }
753 retval = decode_krb5_authdata(&code,&var);
754 if (retval) com_err("decoding authorization_data",retval,"");
755 test(ktest_equal_authorization_data(ref,var),"authorization_data\n");
756 tmp.length = code.length;
757 tmp.contents = (krb5_octet *)code.data;
758 retval = krb5int_get_authdata_containee_types(test_context, &tmp,
759 &count, &types);
760 if (retval) com_err("reading authdata types",retval,"");
761 test(count == 2 && types[0] == 1 && types[1] == 1,
762 "authorization_data(types only)\n");
763 free(types);
764 krb5_free_data_contents(test_context, &code);
765 krb5_free_authdata(test_context, var);
766 ktest_destroy_authorization_data(&ref);
767 }
768
769 /****************************************************************/
770 /* decode_krb5_padata_sequence and decode_krb5_typed_data */
771 {
772 krb5_pa_data **ref, **var;
773 ktest_make_sample_pa_data_array(&ref);
774 retval = krb5_data_hex_parse(&code,"30 24 30 10 A1 03 02 01 0D A2 09 04 07 70 61 2D 64 61 74 61 30 10 A1 03 02 01 0D A2 09 04 07 70 61 2D 64 61 74 61");
775 if (retval) {
776 com_err("parsing padata_sequence",retval,"");
777 exit(1);
778 }
779 retval = decode_krb5_padata_sequence(&code,&var);
780 if (retval) com_err("decoding padata_sequence",retval,"");
781 test(ktest_equal_sequence_of_pa_data(ref,var),"pa_data\n");
782 krb5_free_pa_data(test_context, var);
783 krb5_free_data_contents(test_context, &code);
784 retval = krb5_data_hex_parse(&code,"30 24 30 10 A0 03 02 01 0D A1 09 04 07 70 61 2D 64 61 74 61 30 10 A0 03 02 01 0D A1 09 04 07 70 61 2D 64 61 74 61");
785 if (retval) {
786 com_err("parsing padata_sequence",retval,"");
787 exit(1);
788 }
789 retval = decode_krb5_typed_data(&code,&var);
790 if (retval) com_err("decoding typed_data",retval,"");
791 test(ktest_equal_sequence_of_pa_data(ref,var),"typed_data\n");
792 krb5_free_pa_data(test_context, var);
793 krb5_free_data_contents(test_context, &code);
794 ktest_destroy_pa_data_array(&ref);
795 }
796
797 /****************************************************************/
798 /* decode_krb5_padata_sequence (empty) */
799 {
800 krb5_pa_data **ref, **var;
801 ktest_make_sample_empty_pa_data_array(&ref);
802 retval = krb5_data_hex_parse(&code,"30 00");
803 if (retval) {
804 com_err("parsing padata_sequence (empty)",retval,"");
805 exit(1);
806 }
807 retval = decode_krb5_padata_sequence(&code,&var);
808 if (retval) com_err("decoding padata_sequence (empty)",retval,"");
809 test(ktest_equal_sequence_of_pa_data(ref,var),"pa_data (empty)\n");
810 krb5_free_pa_data(test_context, var);
811 krb5_free_data_contents(test_context, &code);
812 ktest_destroy_pa_data_array(&ref);
813 }
814
815 /****************************************************************/
816 /* decode_etype_info */
817 {
818 krb5_etype_info ref, var;
819
820 ktest_make_sample_etype_info(&ref);
821 retval = krb5_data_hex_parse(&code,"30 33 30 14 A0 03 02 01 00 A1 0D 04 0B 4D 6F 72 74 6F 6E 27 73 20 23 30 30 05 A0 03 02 01 01 30 14 A0 03 02 01 02 A1 0D 04 0B 4D 6F 72 74 6F 6E 27 73 20 23 32");
822 if (retval) {
823 com_err("krb5_decode_test", retval, "while parsing etype_info");
824 exit(1);
825 }
826 retval = decode_krb5_etype_info(&code,&var);
827 if (retval) {
828 com_err("krb5_decode_test", retval, "while decoding etype_info");
829 }
830 test(ktest_equal_etype_info(ref,var),"etype_info\n");
831
832 ktest_destroy_etype_info(var);
833 ktest_destroy_etype_info_entry(ref[2]); ref[2] = 0;
834 ktest_destroy_etype_info_entry(ref[1]); ref[1] = 0;
835 krb5_free_data_contents(test_context, &code);
836
837 retval = krb5_data_hex_parse(&code,"30 16 30 14 A0 03 02 01 00 A1 0D 04 0B 4D 6F 72 74 6F 6E 27 73 20 23 30");
838 if (retval) {
839 com_err("krb5_decode_test", retval,
840 "while parsing etype_info (only one)");
841 exit(1);
842 }
843 retval = decode_krb5_etype_info(&code,&var);
844 if (retval) {
845 com_err("krb5_decode_test", retval,
846 "while decoding etype_info (only one)");
847 }
848 test(ktest_equal_etype_info(ref,var),"etype_info (only one)\n");
849
850 ktest_destroy_etype_info(var);
851 ktest_destroy_etype_info_entry(ref[0]); ref[0] = 0;
852 krb5_free_data_contents(test_context, &code);
853
854 retval = krb5_data_hex_parse(&code,"30 00");
855 if (retval) {
856 com_err("krb5_decode_test", retval,
857 "while parsing etype_info (no info)");
858 exit(1);
859 }
860 retval = decode_krb5_etype_info(&code,&var);
861 if (retval) {
862 com_err("krb5_decode_test", retval,
863 "while decoding etype_info (no info)");
864 }
865 test(ktest_equal_etype_info(ref,var),"etype_info (no info)\n");
866
867 krb5_free_data_contents(test_context, &code);
868 ktest_destroy_etype_info(var);
869 ktest_destroy_etype_info(ref);
870 }
871
872 /****************************************************************/
873 /* decode_etype_info2 */
874 {
875 krb5_etype_info ref, var;
876
877 ktest_make_sample_etype_info2(&ref);
878 retval = krb5_data_hex_parse(&code,"30 51 30 1E A0 03 02 01 00 A1 0D 1B 0B 4D 6F 72 74 6F 6E 27 73 20 23 30 A2 08 04 06 73 32 6B 3A 20 30 30 0F A0 03 02 01 01 A2 08 04 06 73 32 6B 3A 20 31 30 1E A0 03 02 01 02 A1 0D 1B 0B 4D 6F 72 74 6F 6E 27 73 20 23 32 A2 08 04 06 73 32 6B 3A 20 32");
879 if (retval) {
880 com_err("krb5_decode_test", retval, "while parsing etype_info2");
881 exit(1);
882 }
883 retval = decode_krb5_etype_info2(&code,&var);
884 if (retval) {
885 com_err("krb5_decode_test", retval, "while decoding etype_info2");
886 }
887 test(ktest_equal_etype_info(ref,var),"etype_info2\n");
888
889 ktest_destroy_etype_info(var);
890 ktest_destroy_etype_info_entry(ref[2]); ref[2] = 0;
891 ktest_destroy_etype_info_entry(ref[1]); ref[1] = 0;
892 krb5_free_data_contents(test_context, &code);
893
894 retval = krb5_data_hex_parse(&code,"30 20 30 1E A0 03 02 01 00 A1 0D 1B 0B 4D 6F 72 74 6F 6E 27 73 20 23 30 A2 08 04 06 73 32 6B 3A 20 30");
895 if (retval) {
896 com_err("krb5_decode_test", retval,
897 "while parsing etype_info2 (only one)");
898 exit(1);
899 }
900 retval = decode_krb5_etype_info2(&code,&var);
901 if (retval) {
902 com_err("krb5_decode_test", retval,
903 "while decoding etype_info2 (only one)");
904 }
905 test(ktest_equal_etype_info(ref,var),"etype_info2 (only one)\n");
906
907 krb5_free_data_contents(test_context, &code);
908 ktest_destroy_etype_info(var);
909 ktest_destroy_etype_info(ref);
910 }
911
912 /****************************************************************/
913 /* decode_pa_enc_ts */
914 {
915 setup(krb5_pa_enc_ts,ktest_make_sample_pa_enc_ts);
916 decode_run("pa_enc_ts","","30 1A A0 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A1 05 02 03 01 E2 40",decode_krb5_pa_enc_ts,ktest_equal_krb5_pa_enc_ts,krb5_free_pa_enc_ts);
917 ref.pausec = 0;
918 decode_run("pa_enc_ts (no usec)","","30 13 A0 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A",decode_krb5_pa_enc_ts,ktest_equal_krb5_pa_enc_ts,krb5_free_pa_enc_ts);
919 }
920
921 /****************************************************************/
922 /* decode_enc_data */
923 {
924 setup(krb5_enc_data,ktest_make_sample_enc_data);
925 decode_run("enc_data","","30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65",decode_krb5_enc_data,ktest_equal_enc_data,krb5_ktest_free_enc_data);
926 ref.kvno = 0xFF000000;
927 decode_run("enc_data","(MSB-set kvno)","30 26 A0 03 02 01 00 A1 06 02 04 FF 00 00 00 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65",decode_krb5_enc_data,ktest_equal_enc_data,krb5_ktest_free_enc_data);
928 ref.kvno = 0xFFFFFFFF;
929 decode_run("enc_data","(kvno=-1)","30 23 A0 03 02 01 00 A1 03 02 01 FF A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65",decode_krb5_enc_data,ktest_equal_enc_data,krb5_ktest_free_enc_data);
930 ktest_destroy_enc_data(&ref);
931 }
932
933 /****************************************************************/
934 /* decode_sam_challenge_2 */
935 {
936 setup(krb5_sam_challenge_2,ktest_make_sample_sam_challenge_2);
937 decode_run("sam_challenge_2","","30 22 A0 0D 30 0B 04 09 63 68 61 6C 6C 65 6E 67 65 A1 11 30 0F 30 0D A0 03 02 01 01 A1 06 04 04 31 32 33 34",decode_krb5_sam_challenge_2,ktest_equal_sam_challenge_2,krb5_free_sam_challenge_2);
938 ktest_empty_sam_challenge_2(&ref);
939
940 }
941
942 /****************************************************************/
943 /* decode_sam_challenge_2_body */
944 {
945 setup(krb5_sam_challenge_2_body,ktest_make_sample_sam_challenge_2_body);
946 decode_run("sam_challenge_2_body","","30 64 A0 03 02 01 2A A1 07 03 05 00 80 00 00 00 A2 0B 04 09 74 79 70 65 20 6E 61 6D 65 A4 11 04 0F 63 68 61 6C 6C 65 6E 67 65 20 6C 61 62 65 6C A5 10 04 0E 63 68 61 6C 6C 65 6E 67 65 20 69 70 73 65 A6 16 04 14 72 65 73 70 6F 6E 73 65 5F 70 72 6F 6D 70 74 20 69 70 73 65 A8 05 02 03 54 32 10 A9 03 02 01 14",decode_krb5_sam_challenge_2_body,ktest_equal_sam_challenge_2_body,krb5_free_sam_challenge_2_body);
947 ktest_empty_sam_challenge_2_body(&ref);
948
949 }
950
951 /****************************************************************/
952 /* decode_pa_for_user */
953 {
954 setup(krb5_pa_for_user,ktest_make_sample_pa_for_user);
955 decode_run("pa_for_user","","30 4B A0 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 0F 30 0D A0 03 02 01 01 A1 06 04 04 31 32 33 34 A3 0A 1B 08 6B 72 62 35 64 61 74 61",decode_krb5_pa_for_user,ktest_equal_pa_for_user,krb5_free_pa_for_user);
956 ktest_empty_pa_for_user(&ref);
957 }
958
959 /****************************************************************/
960 /* decode_pa_s4u_x509_user */
961 {
962 setup(krb5_pa_s4u_x509_user,ktest_make_sample_pa_s4u_x509_user);
963 decode_run("pa_s4u_x509_user","","30 68 A0 55 30 53 A0 06 02 04 00 CA 14 9A A1 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A2 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A3 12 04 10 70 61 5F 73 34 75 5F 78 35 30 39 5F 75 73 65 72 A4 07 03 05 00 80 00 00 00 A1 0F 30 0D A0 03 02 01 01 A1 06 04 04 31 32 33 34",decode_krb5_pa_s4u_x509_user,ktest_equal_pa_s4u_x509_user,krb5_free_pa_s4u_x509_user);
964 ktest_empty_pa_s4u_x509_user(&ref);
965 }
966
967 /****************************************************************/
968 /* decode_pa_pac_req */
969 {
970 /* This type has no encoder and is very simple. Test two
971 * hand-generated encodings. */
972 krb5_pa_pac_req *req1 = NULL, *req2 = NULL;
973 code = make_data("\x30\x05\xA0\x03\x01\x01\x00", 7);
974 retval = decode_krb5_pa_pac_req(&code, &req1);
975 if (retval) {
976 com_err(argv[0], retval, "while decoding PA-PAC-REQ");
977 exit(1);
978 }
979 code = make_data("\x30\x05\xA0\x03\x01\x01\xFF", 7);
980 retval = decode_krb5_pa_pac_req(&code, &req2);
981 if (retval) {
982 com_err(argv[0], retval, "while decoding PA-PAC-REQ");
983 exit(1);
984 }
985 if (req1->include_pac != 0 || req2->include_pac != 1) {
986 printf("ERROR: ");
987 error_count++;
988 } else {
989 printf("OK: ");
990 }
991 printf("pa_pac_rec\n");
992 free(req1);
993 free(req2);
994 }
995
996 /****************************************************************/
997 /* decode_ad_kdcissued */
998 {
999 setup(krb5_ad_kdcissued,ktest_make_sample_ad_kdcissued);
1000 decode_run("ad_kdcissued","","30 65 A0 0F 30 0D A0 03 02 01 01 A1 06 04 04 31 32 33 34 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 24 30 22 30 0F A0 03 02 01 01 A1 08 04 06 66 6F 6F 62 61 72 30 0F A0 03 02 01 01 A1 08 04 06 66 6F 6F 62 61 72",decode_krb5_ad_kdcissued,ktest_equal_ad_kdcissued,krb5_free_ad_kdcissued);
1001 ktest_empty_ad_kdcissued(&ref);
1002 }
1003
1004 /****************************************************************/
1005 /* decode_iakerb_header */
1006 {
1007 setup(krb5_iakerb_header,ktest_make_sample_iakerb_header);
1008 decode_run("iakerb_header","","30 18 A1 0A 0C 08 6B 72 62 35 64 61 74 61 A2 0A 04 08 6B 72 62 35 64 61 74 61",decode_krb5_iakerb_header,ktest_equal_iakerb_header,krb5_free_iakerb_header);
1009 ktest_empty_iakerb_header(&ref);
1010 }
1011
1012 /****************************************************************/
1013 /* decode_iakerb_finished */
1014 {
1015 setup(krb5_iakerb_finished,ktest_make_sample_iakerb_finished);
1016 decode_run("iakerb_finished","","30 11 A1 0F 30 0D A0 03 02 01 01 A1 06 04 04 31 32 33 34",decode_krb5_iakerb_finished,ktest_equal_iakerb_finished,krb5_free_iakerb_finished);
1017 ktest_empty_iakerb_finished(&ref);
1018 }
1019
1020 /****************************************************************/
1021 /* decode_fast_response */
1022 {
1023 setup(krb5_fast_response,ktest_make_sample_fast_response);
1024 decode_run("fast_response","","30 81 9F A0 26 30 24 30 10 A1 03 02 01 0D A2 09 04 07 70 61 2D 64 61 74 61 30 10 A1 03 02 01 0D A2 09 04 07 70 61 2D 64 61 74 61 A1 13 30 11 A0 03 02 01 01 A1 0A 04 08 31 32 33 34 35 36 37 38 A2 5B 30 59 A0 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A1 05 02 03 01 E2 40 A2 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A3 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A4 0F 30 0D A0 03 02 01 01 A1 06 04 04 31 32 33 34 A3 03 02 01 2A",decode_krb5_fast_response,ktest_equal_fast_response,krb5_free_fast_response);
1025 ktest_empty_fast_response(&ref);
1026 }
1027
1028 /****************************************************************/
1029 /* decode_pa_fx_fast_reply */
1030 {
1031 setup(krb5_enc_data,ktest_make_sample_enc_data);
1032 decode_run("pa_fx_fast_reply","","A0 29 30 27 A0 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65",decode_krb5_pa_fx_fast_reply,ktest_equal_enc_data,krb5_free_enc_data);
1033 ktest_destroy_enc_data(&ref);
1034 }
1035
1036 /****************************************************************/
1037 /* decode_krb5_otp_tokeninfo */
1038 {
1039 setup(krb5_otp_tokeninfo,ktest_make_minimal_otp_tokeninfo);
1040 decode_run("otp_tokeninfo","(optionals NULL)","30 07 80 05 00 00 00 00 00",decode_krb5_otp_tokeninfo,ktest_equal_otp_tokeninfo,k5_free_otp_tokeninfo);
1041 ktest_empty_otp_tokeninfo(&ref);
1042 }
1043 {
1044 setup(krb5_otp_tokeninfo,ktest_make_maximal_otp_tokeninfo);
1045 decode_run("otp_tokeninfo","","30 72 80 05 00 77 00 00 00 81 0B 45 78 61 6D 70 6C 65 63 6F 72 70 82 05 68 61 72 6B 21 83 01 0A 84 01 02 85 09 79 6F 75 72 74 6F 6B 65 6E 86 28 75 72 6E 3A 69 65 74 66 3A 70 61 72 61 6D 73 3A 78 6D 6C 3A 6E 73 3A 6B 65 79 70 72 6F 76 3A 70 73 6B 63 3A 68 6F 74 70 A7 16 30 0B 06 09 60 86 48 01 65 03 04 02 01 30 07 06 05 2B 0E 03 02 1A 88 02 03 E8",decode_krb5_otp_tokeninfo,ktest_equal_otp_tokeninfo,k5_free_otp_tokeninfo);
1046 ktest_empty_otp_tokeninfo(&ref);
1047 }
1048
1049 /****************************************************************/
1050 /* decode_krb5_pa_otp_challenge */
1051 {
1052 setup(krb5_pa_otp_challenge,ktest_make_minimal_pa_otp_challenge);
1053 decode_run("pa_otp_challenge","(optionals NULL)","30 15 80 08 6D 69 6E 6E 6F 6E 63 65 A2 09 30 07 80 05 00 00 00 00 00",decode_krb5_pa_otp_challenge,ktest_equal_pa_otp_challenge,k5_free_pa_otp_challenge);
1054 ktest_empty_pa_otp_challenge(&ref);
1055 }
1056 {
1057 setup(krb5_pa_otp_challenge,ktest_make_maximal_pa_otp_challenge);
1058 decode_run("pa_otp_challenge","","30 81 A5 80 08 6D 61 78 6E 6F 6E 63 65 81 0B 74 65 73 74 73 65 72 76 69 63 65 A2 7D 30 07 80 05 00 00 00 00 00 30 72 80 05 00 77 00 00 00 81 0B 45 78 61 6D 70 6C 65 63 6F 72 70 82 05 68 61 72 6B 21 83 01 0A 84 01 02 85 09 79 6F 75 72 74 6F 6B 65 6E 86 28 75 72 6E 3A 69 65 74 66 3A 70 61 72 61 6D 73 3A 78 6D 6C 3A 6E 73 3A 6B 65 79 70 72 6F 76 3A 70 73 6B 63 3A 68 6F 74 70 A7 16 30 0B 06 09 60 86 48 01 65 03 04 02 01 30 07 06 05 2B 0E 03 02 1A 88 02 03 E8 83 07 6B 65 79 73 61 6C 74 84 04 31 32 33 34",decode_krb5_pa_otp_challenge,ktest_equal_pa_otp_challenge,k5_free_pa_otp_challenge);
1059 ktest_empty_pa_otp_challenge(&ref);
1060 }
1061
1062 /****************************************************************/
1063 /* decode_krb5_pa_otp_req */
1064 {
1065 setup(krb5_pa_otp_req,ktest_make_minimal_pa_otp_req);
1066 decode_run("pa_otp_req","(optionals NULL)","30 2C 80 05 00 00 00 00 00 A2 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65",decode_krb5_pa_otp_req,ktest_equal_pa_otp_req,k5_free_pa_otp_req);
1067 ktest_empty_pa_otp_req(&ref);
1068 }
1069 {
1070 setup(krb5_pa_otp_req,ktest_make_maximal_pa_otp_req);
1071 decode_run("pa_otp_req","","30 81 B9 80 05 00 60 00 00 00 81 05 6E 6F 6E 63 65 A2 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65 A3 0B 06 09 60 86 48 01 65 03 04 02 01 84 02 03 E8 85 05 66 72 6F 67 73 86 0A 6D 79 66 69 72 73 74 70 69 6E 87 05 68 61 72 6B 21 88 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A 89 03 33 34 36 8A 01 02 8B 09 79 6F 75 72 74 6F 6B 65 6E 8C 28 75 72 6E 3A 69 65 74 66 3A 70 61 72 61 6D 73 3A 78 6D 6C 3A 6E 73 3A 6B 65 79 70 72 6F 76 3A 70 73 6B 63 3A 68 6F 74 70 8D 0B 45 78 61 6D 70 6C 65 63 6F 72 70",decode_krb5_pa_otp_req,ktest_equal_pa_otp_req,k5_free_pa_otp_req);
1072 ktest_empty_pa_otp_req(&ref);
1073 }
1074
1075 /****************************************************************/
1076 /* decode_krb5_pa_otp_enc_req */
1077 {
1078 setup(krb5_data,ktest_make_sample_data);
1079 decode_run("pa_otp_enc_req","","30 0A 80 08 6B 72 62 35 64 61 74 61",decode_krb5_pa_otp_enc_req,ktest_equal_data,krb5_free_data);
1080 ktest_empty_data(&ref);
1081 }
1082
1083 /****************************************************************/
1084 /* decode_krb5_kkdcp_message */
1085 {
1086 setup(krb5_kkdcp_message,ktest_make_sample_kkdcp_message);
1087 decode_run("kkdcp_message","","30 82 01 FC A0 82 01 EC 04 82 01 E8 6A 82 01 E4 30 82 01 E0 A1 03 02 01 05 A2 03 02 01 0A A3 26 30 24 30 10 A1 03 02 01 0D A2 09 04 07 70 61 2D 64 61 74 61 30 10 A1 03 02 01 0D A2 09 04 07 70 61 2D 64 61 74 61 A4 82 01 AA 30 82 01 A6 A0 07 03 05 00 FE DC BA 98 A1 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A2 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A3 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A4 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A5 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A6 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A7 03 02 01 2A A8 08 30 06 02 01 00 02 01 01 A9 20 30 1E 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23 30 0D A0 03 02 01 02 A1 06 04 04 12 D0 00 23 AA 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65 AB 81 BF 30 81 BC 61 5C 30 5A A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65 61 5C 30 5A A0 03 02 01 05 A1 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A2 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65 A1 0A 1B 08 6B 72 62 35 64 61 74 61",decode_krb5_kkdcp_message,ktest_equal_kkdcp_message,ktest_free_kkdcp_message);
1088 ktest_empty_kkdcp_message(&ref);
1089 }
1090
1091 /****************************************************************/
1092 /* decode_krb5_cammac */
1093 {
1094 setup(krb5_cammac,ktest_make_minimal_cammac);
1095 decode_run("cammac","(optionals NULL)","30 12 A0 10 30 0E 30 0C A0 03 02 01 01 A1 05 04 03 61 64 31",decode_krb5_cammac,ktest_equal_cammac,k5_free_cammac);
1096 ktest_empty_cammac(&ref);
1097 }
1098 {
1099 setup(krb5_cammac,ktest_make_maximal_cammac);
1100 decode_run("cammac","","30 81 F2 A0 1E 30 1C 30 0C A0 03 02 01 01 A1 05 04 03 61 64 31 30 0C A0 03 02 01 02 A1 05 04 03 61 64 32 A1 3D 30 3B A0 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A1 03 02 01 05 A2 03 02 01 10 A3 13 30 11 A0 03 02 01 01 A1 0A 04 08 63 6B 73 75 6D 6B 64 63 A2 3D 30 3B A0 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A1 03 02 01 05 A2 03 02 01 10 A3 13 30 11 A0 03 02 01 01 A1 0A 04 08 63 6B 73 75 6D 73 76 63 A3 52 30 50 30 13 A3 11 30 0F A0 03 02 01 01 A1 08 04 06 63 6B 73 75 6D 31 30 39 A0 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61 A1 03 02 01 05 A2 03 02 01 10 A3 11 30 0F A0 03 02 01 01 A1 08 04 06 63 6B 73 75 6D 32",decode_krb5_cammac,ktest_equal_cammac,k5_free_cammac);
1101 ktest_empty_cammac(&ref);
1102 }
1103
1104 /****************************************************************/
1105 /* decode_krb5_secure_cookie */
1106 {
1107 setup(krb5_secure_cookie,ktest_make_sample_secure_cookie);
1108 decode_run("secure_cookie","","30 2C 02 04 2D F8 02 25 30 24 30 10 A1 03 02 01 0D A2 09 04 07 70 61 2D 64 61 74 61 30 10 A1 03 02 01 0D A2 09 04 07 70 61 2D 64 61 74 61",decode_krb5_secure_cookie,ktest_equal_secure_cookie,k5_free_secure_cookie);
1109 ktest_empty_secure_cookie(&ref);
1110 }
1111
1112 /****************************************************************/
1113 /* decode_krb5_spake_factor */
1114 {
1115 setup(krb5_spake_factor,ktest_make_minimal_spake_factor);
1116 decode_run("spake_factor","(optionals NULL)","30 05 A0 03 02 01 01",decode_krb5_spake_factor,ktest_equal_spake_factor,k5_free_spake_factor);
1117 ktest_empty_spake_factor(&ref);
1118 }
1119 {
1120 setup(krb5_spake_factor,ktest_make_maximal_spake_factor);
1121 decode_run("spake_factor","","30 0E A0 03 02 01 02 A1 07 04 05 66 64 61 74 61",decode_krb5_spake_factor,ktest_equal_spake_factor,k5_free_spake_factor);
1122 ktest_empty_spake_factor(&ref);
1123 }
1124
1125 /****************************************************************/
1126 /* decode_krb5_pa_spake */
1127 {
1128 setup(krb5_pa_spake,ktest_make_support_pa_spake);
1129 decode_run("pa_spake","(support)","A0 0C 30 0A A0 08 30 06 02 01 01 02 01 02",decode_krb5_pa_spake,ktest_equal_pa_spake,k5_free_pa_spake);
1130 ktest_empty_pa_spake(&ref);
1131 }
1132 {
1133 setup(krb5_pa_spake,ktest_make_challenge_pa_spake);
1134 decode_run("pa_spake","(challenge)","A1 2D 30 2B A0 03 02 01 01 A1 09 04 07 54 20 76 61 6C 75 65 A2 19 30 17 30 05 A0 03 02 01 01 30 0E A0 03 02 01 02 A1 07 04 05 66 64 61 74 61",decode_krb5_pa_spake,ktest_equal_pa_spake,k5_free_pa_spake);
1135 ktest_empty_pa_spake(&ref);
1136 }
1137 {
1138 setup(krb5_pa_spake,ktest_make_response_pa_spake);
1139 decode_run("pa_spake","(response)","A2 34 30 32 A0 09 04 07 53 20 76 61 6C 75 65 A1 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65",decode_krb5_pa_spake,ktest_equal_pa_spake,k5_free_pa_spake);
1140 ktest_empty_pa_spake(&ref);
1141 }
1142 {
1143 setup(krb5_pa_spake,ktest_make_encdata_pa_spake);
1144 decode_run("pa_spake","(encdata)","A3 25 30 23 A0 03 02 01 00 A1 03 02 01 05 A2 17 04 15 6B 72 62 41 53 4E 2E 31 20 74 65 73 74 20 6D 65 73 73 61 67 65",decode_krb5_pa_spake,ktest_equal_pa_spake,k5_free_pa_spake);
1145 ktest_empty_pa_spake(&ref);
1146 }
1147
1148 #ifndef DISABLE_PKINIT
1149
1150 /****************************************************************/
1151 /* decode_krb5_pa_pk_as_req */
1152 {
1153 setup(krb5_pa_pk_as_req,ktest_make_sample_pa_pk_as_req);
1154 decode_run("krb5_pa_pk_as_req","","30 38 80 08 6B 72 62 35 64 61 74 61 A1 22 30 20 30 1E 80 08 6B 72 62 35 64 61 74 61 81 08 6B 72 62 35 64 61 74 61 82 08 6B 72 62 35 64 61 74 61 82 08 6B 72 62 35 64 61 74 61",
1155 acc.decode_krb5_pa_pk_as_req,
1156 ktest_equal_pa_pk_as_req,ktest_free_pa_pk_as_req);
1157 ktest_empty_pa_pk_as_req(&ref);
1158 }
1159
1160 /****************************************************************/
1161 /* decode_krb5_pa_pk_as_rep */
1162 {
1163 setup(krb5_pa_pk_as_rep,ktest_make_sample_pa_pk_as_rep_dhInfo);
1164 decode_run("krb5_pa_pk_as_rep","(dhInfo)","A0 28 30 26 80 08 6B 72 62 35 64 61 74 61 A1 0A 04 08 6B 72 62 35 64 61 74 61 A2 0E 30 0C A0 0A 06 08 6B 72 62 35 64 61 74 61",
1165 acc.decode_krb5_pa_pk_as_rep,
1166 ktest_equal_pa_pk_as_rep,ktest_free_pa_pk_as_rep);
1167 ktest_empty_pa_pk_as_rep(&ref);
1168 }
1169 {
1170 setup(krb5_pa_pk_as_rep,ktest_make_sample_pa_pk_as_rep_encKeyPack);
1171 decode_run("krb5_pa_pk_as_rep","(encKeyPack)","81 08 6B 72 62 35 64 61 74 61",
1172 acc.decode_krb5_pa_pk_as_rep,
1173 ktest_equal_pa_pk_as_rep,ktest_free_pa_pk_as_rep);
1174 ktest_empty_pa_pk_as_rep(&ref);
1175 }
1176
1177 /****************************************************************/
1178 /* decode_krb5_auth_pack */
1179 {
1180 setup(krb5_auth_pack,ktest_make_sample_auth_pack);
1181 decode_run("krb5_auth_pack","","30 81 89 A0 39 30 37 A0 05 02 03 01 E2 40 A1 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A2 03 02 01 2A A3 0A 04 08 6B 72 62 35 64 61 74 61 A4 0A 04 08 6B 72 62 35 64 61 74 61 A1 08 04 06 70 76 61 6C 75 65 A2 24 30 22 30 13 06 09 2A 86 48 86 F7 12 01 02 02 04 06 70 61 72 61 6D 73 30 0B 06 09 2A 86 48 86 F7 12 01 02 02 A3 0A 04 08 6B 72 62 35 64 61 74 61 A4 10 30 0E 30 0C A0 0A 06 08 6B 72 62 35 64 61 74 61",
1182 acc.decode_krb5_auth_pack,
1183 ktest_equal_auth_pack,ktest_free_auth_pack);
1184 ktest_empty_auth_pack(&ref);
1185 }
1186
1187 /****************************************************************/
1188 /* decode_krb5_kdc_dh_key_info */
1189 {
1190 setup(krb5_kdc_dh_key_info,ktest_make_sample_kdc_dh_key_info);
1191 decode_run("krb5_kdc_dh_key_info","","30 25 A0 0B 03 09 00 6B 72 62 35 64 61 74 61 A1 03 02 01 2A A2 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A",
1192 acc.decode_krb5_kdc_dh_key_info,
1193 ktest_equal_kdc_dh_key_info,ktest_free_kdc_dh_key_info);
1194 ktest_empty_kdc_dh_key_info(&ref);
1195 }
1196
1197 /****************************************************************/
1198 /* decode_krb5_reply_key_pack */
1199 {
1200 setup(krb5_reply_key_pack,ktest_make_sample_reply_key_pack);
1201 decode_run("krb5_reply_key_pack","","30 26 A0 13 30 11 A0 03 02 01 01 A1 0A 04 08 31 32 33 34 35 36 37 38 A1 0F 30 0D A0 03 02 01 01 A1 06 04 04 31 32 33 34",
1202 acc.decode_krb5_reply_key_pack,
1203 ktest_equal_reply_key_pack,ktest_free_reply_key_pack);
1204 ktest_empty_reply_key_pack(&ref);
1205 }
1206
1207 /****************************************************************/
1208 /* decode_krb5_principal_name */
1209 /* We have no encoder for this type (KerberosName from RFC 4556); the
1210 * encoding is hand-generated. */
1211 {
1212 krb5_principal ref, var;
1213
1214 ktest_make_sample_principal(&ref);
1215 decode_run("krb5_principal_name","","30 2E A0 10 1B 0E 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 A1 1A 30 18 A0 03 02 01 01 A1 11 30 0F 1B 06 68 66 74 73 61 69 1B 05 65 78 74 72 61",
1216 acc.decode_krb5_principal_name,equal_principal,krb5_free_principal);
1217 ktest_destroy_principal(&ref);
1218 }
1219
1220 #endif /* not DISABLE_PKINIT */
1221
1222 #ifdef ENABLE_LDAP
1223 /* ldap sequence_of_keys */
1224 {
1225 setup(ldap_seqof_key_data,ktest_make_sample_ldap_seqof_key_data);
1226 decode_run("ldap_seqof_key_data","","30 81 87 A0 03 02 01 01 A1 03 02 01 01 A2 03 02 01 2A A3 03 02 01 0E A4 71 30 6F 30 23 A0 10 30 0E A0 03 02 01 00 A1 07 04 05 73 61 6C 74 30 A1 0F 30 0D A0 03 02 01 02 A1 06 04 04 6B 65 79 30 30 23 A0 10 30 0E A0 03 02 01 01 A1 07 04 05 73 61 6C 74 31 A1 0F 30 0D A0 03 02 01 02 A1 06 04 04 6B 65 79 31 30 23 A0 10 30 0E A0 03 02 01 02 A1 07 04 05 73 61 6C 74 32 A1 0F 30 0D A0 03 02 01 02 A1 06 04 04 6B 65 79 32",acc.asn1_ldap_decode_sequence_of_keys,ktest_equal_ldap_sequence_of_keys,ktest_free_ldap_seqof_key_data);
1227 ktest_empty_ldap_seqof_key_data(&ref);
1228 }
1229
1230 #endif
1231
1232 krb5_free_context(test_context);
1233 exit(error_count);
1234 return(error_count);
1235 }
1236
1237
krb5_ktest_free_enc_data(krb5_context context,krb5_enc_data * val)1238 void krb5_ktest_free_enc_data(krb5_context context, krb5_enc_data *val)
1239 {
1240 if (val) {
1241 krb5_free_data_contents(context, &(val->ciphertext));
1242 free(val);
1243 }
1244 }
1245
1246 #ifndef DISABLE_PKINIT
1247
1248 /* Glue function to make ktest_equal_principal_data look like what decode_run
1249 * expects. */
1250 static int
equal_principal(krb5_principal * ref,krb5_principal var)1251 equal_principal(krb5_principal *ref, krb5_principal var)
1252 {
1253 return ktest_equal_principal_data(*ref, var);
1254 }
1255
1256 static void
ktest_free_auth_pack(krb5_context context,krb5_auth_pack * val)1257 ktest_free_auth_pack(krb5_context context, krb5_auth_pack *val)
1258 {
1259 if (val)
1260 ktest_empty_auth_pack(val);
1261 free(val);
1262 }
1263
1264 static void
ktest_free_kdc_dh_key_info(krb5_context context,krb5_kdc_dh_key_info * val)1265 ktest_free_kdc_dh_key_info(krb5_context context, krb5_kdc_dh_key_info *val)
1266 {
1267 if (val)
1268 ktest_empty_kdc_dh_key_info(val);
1269 free(val);
1270 }
1271
1272 static void
ktest_free_pa_pk_as_req(krb5_context context,krb5_pa_pk_as_req * val)1273 ktest_free_pa_pk_as_req(krb5_context context, krb5_pa_pk_as_req *val)
1274 {
1275 if (val)
1276 ktest_empty_pa_pk_as_req(val);
1277 free(val);
1278 }
1279
1280 static void
ktest_free_pa_pk_as_rep(krb5_context context,krb5_pa_pk_as_rep * val)1281 ktest_free_pa_pk_as_rep(krb5_context context, krb5_pa_pk_as_rep *val)
1282 {
1283 if (val)
1284 ktest_empty_pa_pk_as_rep(val);
1285 free(val);
1286 }
1287
1288 static void
ktest_free_reply_key_pack(krb5_context context,krb5_reply_key_pack * val)1289 ktest_free_reply_key_pack(krb5_context context, krb5_reply_key_pack *val)
1290 {
1291 if (val)
1292 ktest_empty_reply_key_pack(val);
1293 free(val);
1294 }
1295
1296 #endif /* not DISABLE_PKINIT */
1297
1298 #ifdef ENABLE_LDAP
1299 static void
ktest_free_ldap_seqof_key_data(krb5_context context,ldap_seqof_key_data * val)1300 ktest_free_ldap_seqof_key_data(krb5_context context, ldap_seqof_key_data *val)
1301 {
1302 if (val)
1303 ktest_empty_ldap_seqof_key_data(val);
1304 free(val);
1305 }
1306 #endif /* ENABLE_LDAP */
1307
1308 static void
ktest_free_kkdcp_message(krb5_context context,krb5_kkdcp_message * val)1309 ktest_free_kkdcp_message(krb5_context context,
1310 krb5_kkdcp_message *val)
1311 {
1312 if (val)
1313 ktest_empty_kkdcp_message(val);
1314 free(val);
1315 }
1316