Imported Upstream version 1.20.1
[platform/upstream/krb5.git] / src / tests / asn.1 / krb5_encode_test.c
1 /* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2 /* tests/asn.1/krb5_encode_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 "com_err.h"
29 #include "utility.h"
30
31 #include "ktest.h"
32 #include "debug.h"
33
34 extern int current_appl_type;
35
36 krb5_context test_context;
37 int error_count = 0;
38 int do_trval = 0;
39 int first_trval = 1;
40 int trval2();
41
42 static void
43 encoder_print_results(krb5_data *code, char *typestring, char *description)
44 {
45     char        *code_string = NULL;
46     int r, rlen;
47
48     if (do_trval) {
49         if (first_trval)
50             first_trval = 0;
51         else
52             printf("\n");
53         printf("encode_krb5_%s%s:\n", typestring, description);
54         r = trval2(stdout, code->data, code->length, 0, &rlen);
55         printf("\n");
56         if (rlen < 0 || (unsigned int) rlen != code->length) {
57             printf("Error: length mismatch: was %d, parsed %d\n",
58                    code->length, rlen);
59             exit(1);
60         }
61         if (r != 0) {
62             printf("Error: Return from trval2 is %d.\n", r);
63             exit(1);
64         }
65         current_appl_type = -1; /* Reset type */
66     } else {
67         asn1_krb5_data_unparse(code,&(code_string));
68         printf("encode_krb5_%s%s: %s\n", typestring, description,
69                code_string);
70         free(code_string);
71     }
72     ktest_destroy_data(&code);
73 }
74
75 static void PRS(argc, argv)
76     int argc;
77     char        **argv;
78 {
79     extern char *optarg;
80     int optchar;
81     extern int print_types, print_krb5_types, print_id_and_len,
82         print_constructed_length, print_skip_context,
83         print_skip_tagnum, print_context_shortcut;
84
85     while ((optchar = getopt(argc, argv, "tp:")) != -1) {
86         switch(optchar) {
87         case 't':
88             do_trval = 1;
89             break;
90         case 'p':
91             sample_principal_name = optarg;
92             break;
93         case '?':
94         default:
95             fprintf(stderr, "Usage: %s [-t] [-p principal]\n",
96                     argv[0]);
97             exit(1);
98         }
99     }
100     print_types = 1;
101     print_krb5_types = 1;
102     print_id_and_len = 0;
103     print_constructed_length = 0;
104     print_skip_context = 1;
105     print_skip_tagnum = 1;
106     print_context_shortcut = 1;
107 }
108
109 int
110 main(argc, argv)
111     int argc;
112     char        **argv;
113 {
114     krb5_data *code;
115     krb5_error_code retval;
116
117     PRS(argc, argv);
118
119     retval = krb5_init_context(&test_context);
120     if (retval) {
121         com_err(argv[0], retval, "while initializing krb5");
122         exit(1);
123     }
124     init_access(argv[0]);
125
126 #define encode_run(value,typestring,description,encoder)                \
127     retval = encoder(&(value),&(code));                                 \
128     if (retval) {                                                       \
129         com_err("krb5_encode_test", retval,"while encoding %s", typestring); \
130         exit(1);                                                        \
131     }                                                                   \
132     encoder_print_results(code, typestring, description);
133
134     /****************************************************************/
135     /* encode_krb5_authenticator */
136     {
137         krb5_authenticator authent;
138         ktest_make_sample_authenticator(&authent);
139
140         encode_run(authent, "authenticator", "", encode_krb5_authenticator);
141
142         ktest_destroy_checksum(&(authent.checksum));
143         ktest_destroy_keyblock(&(authent.subkey));
144         authent.seq_number = 0;
145         ktest_empty_authorization_data(authent.authorization_data);
146         encode_run(authent, "authenticator", "(optionals empty)",
147                    encode_krb5_authenticator);
148
149         ktest_destroy_authorization_data(&(authent.authorization_data));
150         encode_run(authent, "authenticator", "(optionals NULL)",
151                    encode_krb5_authenticator);
152         ktest_empty_authenticator(&authent);
153     }
154
155     /****************************************************************/
156     /* encode_krb5_ticket */
157     {
158         krb5_ticket tkt;
159         ktest_make_sample_ticket(&tkt);
160         encode_run(tkt, "ticket", "", encode_krb5_ticket);
161         ktest_empty_ticket(&tkt);
162     }
163
164     /****************************************************************/
165     /* encode_krb5_encryption_key */
166     {
167         krb5_keyblock keyblk;
168         ktest_make_sample_keyblock(&keyblk);
169         current_appl_type = 1005;
170         encode_run(keyblk, "keyblock", "", encode_krb5_encryption_key);
171         ktest_empty_keyblock(&keyblk);
172     }
173
174     /****************************************************************/
175     /* encode_krb5_enc_tkt_part */
176     {
177         krb5_ticket tkt;
178         memset(&tkt, 0, sizeof(krb5_ticket));
179         tkt.enc_part2 = ealloc(sizeof(krb5_enc_tkt_part));
180         ktest_make_sample_enc_tkt_part(tkt.enc_part2);
181
182         encode_run(*tkt.enc_part2, "enc_tkt_part", "",
183                    encode_krb5_enc_tkt_part);
184
185         tkt.enc_part2->times.starttime = 0;
186         tkt.enc_part2->times.renew_till = 0;
187         ktest_destroy_address(&(tkt.enc_part2->caddrs[1]));
188         ktest_destroy_address(&(tkt.enc_part2->caddrs[0]));
189         ktest_destroy_authdata(&(tkt.enc_part2->authorization_data[1]));
190         ktest_destroy_authdata(&(tkt.enc_part2->authorization_data[0]));
191
192         /* ISODE version fails on the empty caddrs field */
193         ktest_destroy_addresses(&(tkt.enc_part2->caddrs));
194         ktest_destroy_authorization_data(&(tkt.enc_part2->authorization_data));
195
196         encode_run(*tkt.enc_part2, "enc_tkt_part", "(optionals NULL)",
197                    encode_krb5_enc_tkt_part);
198         ktest_empty_ticket(&tkt);
199     }
200
201     /****************************************************************/
202     /* encode_krb5_enc_kdc_rep_part */
203     {
204         krb5_kdc_rep kdcr;
205
206         memset(&kdcr, 0, sizeof(kdcr));
207
208         kdcr.enc_part2 = ealloc(sizeof(krb5_enc_kdc_rep_part));
209         ktest_make_sample_enc_kdc_rep_part(kdcr.enc_part2);
210
211         encode_run(*kdcr.enc_part2, "enc_kdc_rep_part", "",
212                    encode_krb5_enc_kdc_rep_part);
213
214         kdcr.enc_part2->key_exp = 0;
215         kdcr.enc_part2->times.starttime = 0;
216         kdcr.enc_part2->flags &= ~TKT_FLG_RENEWABLE;
217         ktest_destroy_addresses(&(kdcr.enc_part2->caddrs));
218
219         encode_run(*kdcr.enc_part2, "enc_kdc_rep_part", "(optionals NULL)",
220                    encode_krb5_enc_kdc_rep_part);
221
222         ktest_empty_kdc_rep(&kdcr);
223     }
224
225     /****************************************************************/
226     /* encode_krb5_as_rep */
227     {
228         krb5_kdc_rep kdcr;
229         ktest_make_sample_kdc_rep(&kdcr);
230
231 /*    kdcr.msg_type = KRB5_TGS_REP;
232       test(encode_krb5_as_rep(&kdcr,&code) == KRB5_BADMSGTYPE,
233       "encode_krb5_as_rep type check\n");
234       ktest_destroy_data(&code);*/
235
236         kdcr.msg_type = KRB5_AS_REP;
237         encode_run(kdcr, "as_rep", "", encode_krb5_as_rep);
238
239         ktest_destroy_pa_data_array(&(kdcr.padata));
240         encode_run(kdcr, "as_rep", "(optionals NULL)", encode_krb5_as_rep);
241
242         ktest_empty_kdc_rep(&kdcr);
243
244     }
245
246     /****************************************************************/
247     /* encode_krb5_tgs_rep */
248     {
249         krb5_kdc_rep kdcr;
250         ktest_make_sample_kdc_rep(&kdcr);
251
252 /*    kdcr.msg_type = KRB5_AS_REP;
253       test(encode_krb5_tgs_rep(&kdcr,&code) == KRB5_BADMSGTYPE,
254       "encode_krb5_tgs_rep type check\n");*/
255
256         kdcr.msg_type = KRB5_TGS_REP;
257         encode_run(kdcr, "tgs_rep", "", encode_krb5_tgs_rep);
258
259         ktest_destroy_pa_data_array(&(kdcr.padata));
260         encode_run(kdcr, "tgs_rep", "(optionals NULL)", encode_krb5_tgs_rep);
261
262         ktest_empty_kdc_rep(&kdcr);
263
264     }
265
266     /****************************************************************/
267     /* encode_krb5_ap_req */
268     {
269         krb5_ap_req apreq;
270         ktest_make_sample_ap_req(&apreq);
271         encode_run(apreq, "ap_req", "", encode_krb5_ap_req);
272         ktest_empty_ap_req(&apreq);
273     }
274
275     /****************************************************************/
276     /* encode_krb5_ap_rep */
277     {
278         krb5_ap_rep aprep;
279         ktest_make_sample_ap_rep(&aprep);
280         encode_run(aprep, "ap_rep", "", encode_krb5_ap_rep);
281         ktest_empty_ap_rep(&aprep);
282     }
283
284     /****************************************************************/
285     /* encode_krb5_ap_rep_enc_part */
286     {
287         krb5_ap_rep_enc_part apenc;
288         ktest_make_sample_ap_rep_enc_part(&apenc);
289         encode_run(apenc, "ap_rep_enc_part", "", encode_krb5_ap_rep_enc_part);
290
291         ktest_destroy_keyblock(&(apenc.subkey));
292         apenc.seq_number = 0;
293         encode_run(apenc, "ap_rep_enc_part", "(optionals NULL)",
294                    encode_krb5_ap_rep_enc_part);
295         ktest_empty_ap_rep_enc_part(&apenc);
296     }
297
298     /****************************************************************/
299     /* encode_krb5_as_req */
300     {
301         krb5_kdc_req asreq;
302         ktest_make_sample_kdc_req(&asreq);
303         asreq.msg_type = KRB5_AS_REQ;
304         asreq.kdc_options &= ~KDC_OPT_ENC_TKT_IN_SKEY;
305         encode_run(asreq, "as_req", "", encode_krb5_as_req);
306
307         ktest_destroy_pa_data_array(&(asreq.padata));
308         ktest_destroy_principal(&(asreq.client));
309 #ifndef ISODE_SUCKS
310         ktest_destroy_principal(&(asreq.server));
311 #endif
312         asreq.kdc_options |= KDC_OPT_ENC_TKT_IN_SKEY;
313         asreq.from = 0;
314         asreq.rtime = 0;
315         ktest_destroy_addresses(&(asreq.addresses));
316         ktest_destroy_enc_data(&(asreq.authorization_data));
317         encode_run(asreq, "as_req", "(optionals NULL except second_ticket)",
318                    encode_krb5_as_req);
319         ktest_destroy_sequence_of_ticket(&(asreq.second_ticket));
320 #ifndef ISODE_SUCKS
321         ktest_make_sample_principal(&(asreq.server));
322 #endif
323         asreq.kdc_options &= ~KDC_OPT_ENC_TKT_IN_SKEY;
324         encode_run(asreq, "as_req", "(optionals NULL except server)",
325                    encode_krb5_as_req);
326         ktest_empty_kdc_req(&asreq);
327     }
328
329     /****************************************************************/
330     /* encode_krb5_tgs_req */
331     {
332         krb5_kdc_req tgsreq;
333         ktest_make_sample_kdc_req(&tgsreq);
334         tgsreq.msg_type = KRB5_TGS_REQ;
335         tgsreq.kdc_options &= ~KDC_OPT_ENC_TKT_IN_SKEY;
336         encode_run(tgsreq, "tgs_req", "", encode_krb5_tgs_req);
337
338         ktest_destroy_pa_data_array(&(tgsreq.padata));
339         ktest_destroy_principal(&(tgsreq.client));
340 #ifndef ISODE_SUCKS
341         ktest_destroy_principal(&(tgsreq.server));
342 #endif
343         tgsreq.kdc_options |= KDC_OPT_ENC_TKT_IN_SKEY;
344         tgsreq.from = 0;
345         tgsreq.rtime = 0;
346         ktest_destroy_addresses(&(tgsreq.addresses));
347         ktest_destroy_enc_data(&(tgsreq.authorization_data));
348         encode_run(tgsreq, "tgs_req", "(optionals NULL except second_ticket)",
349                    encode_krb5_tgs_req);
350
351         ktest_destroy_sequence_of_ticket(&(tgsreq.second_ticket));
352 #ifndef ISODE_SUCKS
353         ktest_make_sample_principal(&(tgsreq.server));
354 #endif
355         tgsreq.kdc_options &= ~KDC_OPT_ENC_TKT_IN_SKEY;
356         encode_run(tgsreq, "tgs_req", "(optionals NULL except server)",
357                    encode_krb5_tgs_req);
358
359         ktest_empty_kdc_req(&tgsreq);
360     }
361
362     /****************************************************************/
363     /* encode_krb5_kdc_req_body */
364     {
365         krb5_kdc_req kdcrb;
366         memset(&kdcrb, 0, sizeof(kdcrb));
367         ktest_make_sample_kdc_req_body(&kdcrb);
368         kdcrb.kdc_options &= ~KDC_OPT_ENC_TKT_IN_SKEY;
369         current_appl_type = 1007;       /* Force interpretation as kdc-req-body */
370         encode_run(kdcrb, "kdc_req_body", "", encode_krb5_kdc_req_body);
371
372         ktest_destroy_principal(&(kdcrb.client));
373 #ifndef ISODE_SUCKS
374         ktest_destroy_principal(&(kdcrb.server));
375 #endif
376         kdcrb.kdc_options |= KDC_OPT_ENC_TKT_IN_SKEY;
377         kdcrb.from = 0;
378         kdcrb.rtime = 0;
379         ktest_destroy_addresses(&(kdcrb.addresses));
380         ktest_destroy_enc_data(&(kdcrb.authorization_data));
381         current_appl_type = 1007;       /* Force interpretation as kdc-req-body */
382         encode_run(kdcrb, "kdc_req_body",
383                    "(optionals NULL except second_ticket)",
384                    encode_krb5_kdc_req_body);
385
386         ktest_destroy_sequence_of_ticket(&(kdcrb.second_ticket));
387 #ifndef ISODE_SUCKS
388         ktest_make_sample_principal(&(kdcrb.server));
389 #endif
390         kdcrb.kdc_options &= ~KDC_OPT_ENC_TKT_IN_SKEY;
391         current_appl_type = 1007;       /* Force interpretation as kdc-req-body */
392         encode_run(kdcrb, "kdc_req_body", "(optionals NULL except server)",
393                    encode_krb5_kdc_req_body);
394
395         ktest_empty_kdc_req(&kdcrb);
396     }
397
398     /****************************************************************/
399     /* encode_krb5_safe */
400     {
401         krb5_safe s;
402         ktest_make_sample_safe(&s);
403         encode_run(s, "safe", "", encode_krb5_safe);
404
405         s.timestamp = 0;
406         /* s.usec should be opted out by the timestamp */
407         s.seq_number = 0;
408         ktest_destroy_address(&(s.r_address));
409         encode_run(s, "safe", "(optionals NULL)", encode_krb5_safe);
410
411         ktest_empty_safe(&s);
412     }
413
414     /****************************************************************/
415     /* encode_krb5_priv */
416     {
417         krb5_priv p;
418         ktest_make_sample_priv(&p);
419         encode_run(p, "priv", "", encode_krb5_priv);
420         ktest_empty_priv(&p);
421     }
422
423     /****************************************************************/
424     /* encode_krb5_enc_priv_part */
425     {
426         krb5_priv_enc_part ep;
427         ktest_make_sample_priv_enc_part(&ep);
428         encode_run(ep, "enc_priv_part", "", encode_krb5_enc_priv_part);
429
430         ep.timestamp = 0;
431         /* ep.usec should be opted out along with timestamp */
432         ep.seq_number = 0;
433         ktest_destroy_address(&(ep.r_address));
434         encode_run(ep, "enc_priv_part", "(optionals NULL)",
435                    encode_krb5_enc_priv_part);
436
437         ktest_empty_priv_enc_part(&ep);
438     }
439
440     /****************************************************************/
441     /* encode_krb5_cred */
442     {
443         krb5_cred c;
444         ktest_make_sample_cred(&c);
445         encode_run(c, "cred", "", encode_krb5_cred);
446         ktest_empty_cred(&c);
447     }
448
449     /****************************************************************/
450     /* encode_krb5_enc_cred_part */
451     {
452         krb5_cred_enc_part cep;
453         ktest_make_sample_cred_enc_part(&cep);
454         encode_run(cep, "enc_cred_part", "", encode_krb5_enc_cred_part);
455
456         ktest_destroy_principal(&(cep.ticket_info[0]->client));
457         ktest_destroy_principal(&(cep.ticket_info[0]->server));
458         cep.ticket_info[0]->flags = 0;
459         cep.ticket_info[0]->times.authtime = 0;
460         cep.ticket_info[0]->times.starttime = 0;
461         cep.ticket_info[0]->times.endtime = 0;
462         cep.ticket_info[0]->times.renew_till = 0;
463         ktest_destroy_addresses(&(cep.ticket_info[0]->caddrs));
464         cep.nonce = 0;
465         cep.timestamp = 0;
466         ktest_destroy_address(&(cep.s_address));
467         ktest_destroy_address(&(cep.r_address));
468         encode_run(cep, "enc_cred_part", "(optionals NULL)",
469                    encode_krb5_enc_cred_part);
470
471         ktest_empty_cred_enc_part(&cep);
472     }
473
474     /****************************************************************/
475     /* encode_krb5_error */
476     {
477         krb5_error kerr;
478         ktest_make_sample_error(&kerr);
479         encode_run(kerr, "error", "", encode_krb5_error);
480
481         kerr.ctime = 0;
482         ktest_destroy_principal(&(kerr.client));
483         ktest_empty_data(&(kerr.text));
484         ktest_empty_data(&(kerr.e_data));
485         encode_run(kerr, "error", "(optionals NULL)", encode_krb5_error);
486
487         ktest_empty_error(&kerr);
488     }
489
490     /****************************************************************/
491     /* encode_krb5_authdata */
492     {
493         krb5_authdata **ad;
494         ktest_make_sample_authorization_data(&ad);
495
496         retval = encode_krb5_authdata(ad,&(code));
497         if (retval) {
498             com_err("encoding authorization_data",retval,"");
499             exit(1);
500         }
501         current_appl_type = 1004;       /* Force type to be authdata */
502         encoder_print_results(code, "authorization_data", "");
503
504         ktest_destroy_authorization_data(&ad);
505     }
506
507     /****************************************************************/
508     /* encode_padata_sequence and encode_krb5_typed_data */
509     {
510         krb5_pa_data **pa;
511
512         ktest_make_sample_pa_data_array(&pa);
513         encode_run(*pa, "padata_sequence", "", encode_krb5_padata_sequence);
514         encode_run(*pa, "typed_data", "", encode_krb5_typed_data);
515         ktest_destroy_pa_data_array(&pa);
516
517         ktest_make_sample_empty_pa_data_array(&pa);
518         encode_run(*pa, "padata_sequence", "(empty)",
519                    encode_krb5_padata_sequence);
520         ktest_destroy_pa_data_array(&pa);
521     }
522
523     /****************************************************************/
524     /* encode_etype_info */
525     {
526         krb5_etype_info_entry **info;
527
528         ktest_make_sample_etype_info(&info);
529         encode_run(*info, "etype_info", "", encode_krb5_etype_info);
530
531         ktest_destroy_etype_info_entry(info[2]);      info[2] = 0;
532         ktest_destroy_etype_info_entry(info[1]);      info[1] = 0;
533         encode_run(*info, "etype_info", "(only 1)", encode_krb5_etype_info);
534
535         ktest_destroy_etype_info_entry(info[0]);      info[0] = 0;
536         encode_run(*info, "etype_info", "(no info)", encode_krb5_etype_info);
537
538         ktest_destroy_etype_info(info);
539     }
540
541     /* encode_etype_info2 */
542     {
543         krb5_etype_info_entry **info;
544
545         ktest_make_sample_etype_info2(&info);
546         encode_run(*info, "etype_info2", "", encode_krb5_etype_info2);
547
548         ktest_destroy_etype_info_entry(info[2]);      info[2] = 0;
549         ktest_destroy_etype_info_entry(info[1]);      info[1] = 0;
550         encode_run(*info, "etype_info2", "(only 1)", encode_krb5_etype_info2);
551
552         /* etype_info2 sequences aren't allowed to be empty. */
553
554         ktest_destroy_etype_info(info);
555     }
556
557     /****************************************************************/
558     /* encode_pa_enc_ts */
559     {
560         krb5_pa_enc_ts pa_enc;
561         ktest_make_sample_pa_enc_ts(&pa_enc);
562         encode_run(pa_enc, "pa_enc_ts", "", encode_krb5_pa_enc_ts);
563         pa_enc.pausec = 0;
564         encode_run(pa_enc, "pa_enc_ts (no usec)", "", encode_krb5_pa_enc_ts);
565     }
566
567     /****************************************************************/
568     /* encode_enc_data */
569     {
570         krb5_enc_data enc_data;
571         ktest_make_sample_enc_data(&enc_data);
572         current_appl_type = 1001;
573         encode_run(enc_data, "enc_data", "", encode_krb5_enc_data);
574         enc_data.kvno = 0xFF000000;
575         current_appl_type = 1001;
576         encode_run(enc_data, "enc_data", "(MSB-set kvno)",
577                    encode_krb5_enc_data);
578         enc_data.kvno = 0xFFFFFFFF;
579         current_appl_type = 1001;
580         encode_run(enc_data, "enc_data", "(kvno=-1)", encode_krb5_enc_data);
581         ktest_destroy_enc_data(&enc_data);
582     }
583     /****************************************************************/
584     /* encode_krb5_sam_challenge_2 */
585     {
586         krb5_sam_challenge_2 sam_ch2;
587         ktest_make_sample_sam_challenge_2(&sam_ch2);
588         encode_run(sam_ch2, "sam_challenge_2", "",
589                    encode_krb5_sam_challenge_2);
590         ktest_empty_sam_challenge_2(&sam_ch2);
591     }
592     /****************************************************************/
593     /* encode_krb5_sam_challenge_2_body */
594     {
595         krb5_sam_challenge_2_body body;
596         ktest_make_sample_sam_challenge_2_body(&body);
597         encode_run(body, "sam_challenge_2_body", "",
598                    encode_krb5_sam_challenge_2_body);
599         ktest_empty_sam_challenge_2_body(&body);
600     }
601     /****************************************************************/
602     /* encode_krb5_sam_response_2 */
603     {
604         krb5_sam_response_2 sam_ch2;
605         ktest_make_sample_sam_response_2(&sam_ch2);
606         encode_run(sam_ch2, "sam_response_2", "", encode_krb5_sam_response_2);
607         ktest_empty_sam_response_2(&sam_ch2);
608     }
609     /****************************************************************/
610     /* encode_krb5_sam_response_enc_2 */
611     {
612         krb5_enc_sam_response_enc_2 sam_ch2;
613         ktest_make_sample_enc_sam_response_enc_2(&sam_ch2);
614         encode_run(sam_ch2, "enc_sam_response_enc_2", "",
615                    encode_krb5_enc_sam_response_enc_2);
616         ktest_empty_enc_sam_response_enc_2(&sam_ch2);
617     }
618     /****************************************************************/
619     /* encode_krb5_pa_for_user */
620     {
621         krb5_pa_for_user s4u;
622         ktest_make_sample_pa_for_user(&s4u);
623         encode_run(s4u, "pa_for_user", "", encode_krb5_pa_for_user);
624         ktest_empty_pa_for_user(&s4u);
625     }
626     /****************************************************************/
627     /* encode_krb5_pa_s4u_x509_user */
628     {
629         krb5_pa_s4u_x509_user s4u;
630         ktest_make_sample_pa_s4u_x509_user(&s4u);
631         encode_run(s4u, "pa_s4u_x509_user", "", encode_krb5_pa_s4u_x509_user);
632         ktest_empty_pa_s4u_x509_user(&s4u);
633     }
634     /****************************************************************/
635     /* encode_krb5_ad_kdcissued */
636     {
637         krb5_ad_kdcissued kdci;
638         ktest_make_sample_ad_kdcissued(&kdci);
639         encode_run(kdci, "ad_kdcissued", "", encode_krb5_ad_kdcissued);
640         ktest_empty_ad_kdcissued(&kdci);
641     }
642     /****************************************************************/
643     /* encode_krb5_iakerb_header */
644     {
645         krb5_iakerb_header ih;
646         ktest_make_sample_iakerb_header(&ih);
647         encode_run(ih, "iakerb_header", "", encode_krb5_iakerb_header);
648         ktest_empty_iakerb_header(&ih);
649     }
650     /****************************************************************/
651     /* encode_krb5_iakerb_finished */
652     {
653         krb5_iakerb_finished ih;
654         ktest_make_sample_iakerb_finished(&ih);
655         encode_run(ih, "iakerb_finished", "", encode_krb5_iakerb_finished);
656         ktest_empty_iakerb_finished(&ih);
657     }
658     /****************************************************************/
659     /* encode_krb5_fast_response */
660     {
661         krb5_fast_response fr;
662         ktest_make_sample_fast_response(&fr);
663         encode_run(fr, "fast_response", "", encode_krb5_fast_response);
664         ktest_empty_fast_response(&fr);
665     }
666     /****************************************************************/
667     /* encode_krb5_pa_fx_fast_reply */
668     {
669         krb5_enc_data enc_data;
670         ktest_make_sample_enc_data(&enc_data);
671         encode_run(enc_data, "pa_fx_fast_reply", "",
672                    encode_krb5_pa_fx_fast_reply);
673         ktest_destroy_enc_data(&enc_data);
674     }
675     /****************************************************************/
676     /* encode_krb5_otp_tokeninfo */
677     {
678         krb5_otp_tokeninfo ti;
679         ktest_make_minimal_otp_tokeninfo(&ti);
680         encode_run(ti, "otp_tokeninfo", "(optionals NULL)",
681                    encode_krb5_otp_tokeninfo);
682         ktest_empty_otp_tokeninfo(&ti);
683         ktest_make_maximal_otp_tokeninfo(&ti);
684         encode_run(ti, "otp_tokeninfo", "", encode_krb5_otp_tokeninfo);
685         ktest_empty_otp_tokeninfo(&ti);
686     }
687     /****************************************************************/
688     /* encode_krb5_pa_otp_challenge */
689     {
690         krb5_pa_otp_challenge ch;
691         ktest_make_minimal_pa_otp_challenge(&ch);
692         encode_run(ch, "pa_otp_challenge", "(optionals NULL)",
693                    encode_krb5_pa_otp_challenge);
694         ktest_empty_pa_otp_challenge(&ch);
695         ktest_make_maximal_pa_otp_challenge(&ch);
696         encode_run(ch, "pa_otp_challenge", "", encode_krb5_pa_otp_challenge);
697         ktest_empty_pa_otp_challenge(&ch);
698     }
699     /****************************************************************/
700     /* encode_krb5_pa_otp_req */
701     {
702         krb5_pa_otp_req req;
703         ktest_make_minimal_pa_otp_req(&req);
704         encode_run(req, "pa_otp_req", "(optionals NULL)",
705                    encode_krb5_pa_otp_req);
706         ktest_empty_pa_otp_req(&req);
707         ktest_make_maximal_pa_otp_req(&req);
708         encode_run(req, "pa_otp_req", "", encode_krb5_pa_otp_req);
709         ktest_empty_pa_otp_req(&req);
710     }
711     /****************************************************************/
712     /* encode_krb5_pa_otp_enc_request */
713     {
714         krb5_data d;
715         ktest_make_sample_data(&d);
716         encode_run(d, "pa_otp_enc_req", "", encode_krb5_pa_otp_enc_req);
717         ktest_empty_data(&d);
718     }
719     /****************************************************************/
720     /* encode_krb5_kkdcp_message */
721     {
722         krb5_kkdcp_message info;
723         ktest_make_sample_kkdcp_message(&info);
724         encode_run(info, "kkdcp_message", "", encode_krb5_kkdcp_message);
725         ktest_empty_kkdcp_message(&info);
726     }
727     /* encode_krb5_cammac */
728     {
729         krb5_cammac req;
730         ktest_make_minimal_cammac(&req);
731         encode_run(req, "cammac", "(optionals NULL)", encode_krb5_cammac);
732         ktest_empty_cammac(&req);
733         ktest_make_maximal_cammac(&req);
734         encode_run(req, "cammac", "", encode_krb5_cammac);
735         ktest_empty_cammac(&req);
736     }
737     /****************************************************************/
738     /* encode_krb5_secure_cookie */
739     {
740         krb5_secure_cookie cookie;
741         ktest_make_sample_secure_cookie(&cookie);
742         encode_run(cookie, "secure_cookie", "", encode_krb5_secure_cookie);
743         ktest_empty_secure_cookie(&cookie);
744     }
745     /****************************************************************/
746     /* encode_krb5_spake_factor */
747     {
748         krb5_spake_factor factor;
749         ktest_make_minimal_spake_factor(&factor);
750         encode_run(factor, "spake_factor", "(optionals NULL)",
751                    encode_krb5_spake_factor);
752         ktest_empty_spake_factor(&factor);
753         ktest_make_maximal_spake_factor(&factor);
754         encode_run(factor, "spake_factor", "", encode_krb5_spake_factor);
755         ktest_empty_spake_factor(&factor);
756     }
757     /****************************************************************/
758     /* encode_krb5_pa_spake */
759     {
760         krb5_pa_spake pa_spake;
761         ktest_make_support_pa_spake(&pa_spake);
762         encode_run(pa_spake, "pa_spake", "(support)", encode_krb5_pa_spake);
763         ktest_empty_pa_spake(&pa_spake);
764         ktest_make_challenge_pa_spake(&pa_spake);
765         encode_run(pa_spake, "pa_spake", "(challenge)", encode_krb5_pa_spake);
766         ktest_empty_pa_spake(&pa_spake);
767         ktest_make_response_pa_spake(&pa_spake);
768         encode_run(pa_spake, "pa_spake", "(response)", encode_krb5_pa_spake);
769         ktest_empty_pa_spake(&pa_spake);
770         ktest_make_encdata_pa_spake(&pa_spake);
771         encode_run(pa_spake, "pa_spake", "(encdata)", encode_krb5_pa_spake);
772         ktest_empty_pa_spake(&pa_spake);
773     }
774 #ifndef DISABLE_PKINIT
775     /****************************************************************/
776     /* encode_krb5_pa_pk_as_req */
777     {
778         krb5_pa_pk_as_req req;
779         ktest_make_sample_pa_pk_as_req(&req);
780         encode_run(req, "pa_pk_as_req", "", acc.encode_krb5_pa_pk_as_req);
781         ktest_empty_pa_pk_as_req(&req);
782     }
783     /****************************************************************/
784     /* encode_krb5_pa_pk_as_rep */
785     {
786         krb5_pa_pk_as_rep rep;
787         ktest_make_sample_pa_pk_as_rep_dhInfo(&rep);
788         encode_run(rep, "pa_pk_as_rep", "(dhInfo)",
789                    acc.encode_krb5_pa_pk_as_rep);
790         ktest_empty_pa_pk_as_rep(&rep);
791         ktest_make_sample_pa_pk_as_rep_encKeyPack(&rep);
792         encode_run(rep, "pa_pk_as_rep", "(encKeyPack)",
793                    acc.encode_krb5_pa_pk_as_rep);
794         ktest_empty_pa_pk_as_rep(&rep);
795     }
796     /****************************************************************/
797     /* encode_krb5_auth_pack */
798     {
799         krb5_auth_pack pack;
800         ktest_make_sample_auth_pack(&pack);
801         encode_run(pack, "auth_pack", "", acc.encode_krb5_auth_pack);
802         ktest_empty_auth_pack(&pack);
803     }
804     /****************************************************************/
805     /* encode_krb5_kdc_dh_key_info */
806     {
807         krb5_kdc_dh_key_info ki;
808         ktest_make_sample_kdc_dh_key_info(&ki);
809         encode_run(ki, "kdc_dh_key_info", "", acc.encode_krb5_kdc_dh_key_info);
810         ktest_empty_kdc_dh_key_info(&ki);
811     }
812     /****************************************************************/
813     /* encode_krb5_reply_key_pack */
814     {
815         krb5_reply_key_pack pack;
816         ktest_make_sample_reply_key_pack(&pack);
817         encode_run(pack, "reply_key_pack", "", acc.encode_krb5_reply_key_pack);
818         ktest_empty_reply_key_pack(&pack);
819     }
820     /****************************************************************/
821     /* encode_krb5_sp80056a_other_info */
822     {
823         krb5_sp80056a_other_info info;
824         ktest_make_sample_sp80056a_other_info(&info);
825         encode_run(info, "sp80056a_other_info", "",
826                    encode_krb5_sp80056a_other_info);
827         ktest_empty_sp80056a_other_info(&info);
828     }
829     /****************************************************************/
830     /* encode_krb5_pkinit_supp_pub_info */
831     {
832         krb5_pkinit_supp_pub_info info;
833         ktest_make_sample_pkinit_supp_pub_info(&info);
834         encode_run(info, "pkinit_supp_pub_info", "",
835                    encode_krb5_pkinit_supp_pub_info);
836         ktest_empty_pkinit_supp_pub_info(&info);
837     }
838 #endif /* not DISABLE_PKINIT */
839 #ifdef ENABLE_LDAP
840     {
841         ldap_seqof_key_data skd;
842
843         ktest_make_sample_ldap_seqof_key_data(&skd);
844         encode_run(skd, "ldap_seqof_key_data", "",
845                    acc.asn1_ldap_encode_sequence_of_keys);
846         ktest_empty_ldap_seqof_key_data(test_context, &skd);
847     }
848 #endif
849
850     krb5_free_context(test_context);
851     exit(error_count);
852     return(error_count);
853 }