xref: /freebsd/crypto/krb5/src/tests/asn.1/krb5_decode_test.c (revision f1c4c3daccbaf3820f0e2224de53df12fc952fcc)
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