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