Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/crypto/krb5/src/tests/asn.1/ktest_equal.c
34890 views
1
/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
/* tests/asn.1/ktest_equal.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 <stdlib.h>
28
#include <stdio.h>
29
#include "ktest_equal.h"
30
31
#define FALSE 0
32
#define TRUE 1
33
34
#define struct_equal(field,comparator) \
35
comparator(&(ref->field),&(var->field))
36
37
#define ptr_equal(field,comparator) \
38
comparator(ref->field,var->field)
39
40
#define scalar_equal(field) \
41
((ref->field) == (var->field))
42
43
#define len_equal(length,field,comparator) \
44
((ref->length == var->length) && \
45
comparator(ref->length,ref->field,var->field))
46
47
int
48
ktest_equal_authenticator(krb5_authenticator *ref, krb5_authenticator *var)
49
{
50
int p = TRUE;
51
52
if (ref == var) return TRUE;
53
else if (ref == NULL || var == NULL) return FALSE;
54
p = p && ptr_equal(client,ktest_equal_principal_data);
55
p = p && ptr_equal(checksum,ktest_equal_checksum);
56
p = p && scalar_equal(cusec);
57
p = p && scalar_equal(ctime);
58
p = p && ptr_equal(subkey,ktest_equal_keyblock);
59
p = p && scalar_equal(seq_number);
60
p = p && ptr_equal(authorization_data,ktest_equal_authorization_data);
61
return p;
62
}
63
64
int
65
ktest_equal_principal_data(krb5_principal_data *ref, krb5_principal_data *var)
66
{
67
if (ref == var) return TRUE;
68
else if (ref == NULL || var == NULL) return FALSE;
69
return(struct_equal(realm,ktest_equal_data) &&
70
len_equal(length,data,ktest_equal_array_of_data) &&
71
scalar_equal(type));
72
}
73
74
int
75
ktest_equal_authdata(krb5_authdata *ref, krb5_authdata *var)
76
{
77
if (ref == var) return TRUE;
78
else if (ref == NULL || var == NULL) return FALSE;
79
return(scalar_equal(ad_type) &&
80
len_equal(length,contents,ktest_equal_array_of_octet));
81
}
82
83
int
84
ktest_equal_checksum(krb5_checksum *ref, krb5_checksum *var)
85
{
86
if (ref == var) return TRUE;
87
else if (ref == NULL || var == NULL) return FALSE;
88
return(scalar_equal(checksum_type) && len_equal(length,contents,ktest_equal_array_of_octet));
89
}
90
91
int
92
ktest_equal_keyblock(krb5_keyblock *ref, krb5_keyblock *var)
93
{
94
if (ref == var) return TRUE;
95
else if (ref == NULL || var == NULL) return FALSE;
96
return(scalar_equal(enctype) && len_equal(length,contents,ktest_equal_array_of_octet));
97
}
98
99
int
100
ktest_equal_data(krb5_data *ref, krb5_data *var)
101
{
102
if (ref == var) return TRUE;
103
else if (ref == NULL || var == NULL) return FALSE;
104
return(len_equal(length,data,ktest_equal_array_of_char));
105
}
106
107
int
108
ktest_equal_ticket(krb5_ticket *ref, krb5_ticket *var)
109
{
110
int p = TRUE;
111
if (ref == var) return TRUE;
112
else if (ref == NULL || var == NULL) return FALSE;
113
p = p && ptr_equal(server,ktest_equal_principal_data);
114
p = p && struct_equal(enc_part,ktest_equal_enc_data);
115
/* enc_part2 is irrelevant, as far as the ASN.1 code is concerned */
116
return p;
117
}
118
119
int
120
ktest_equal_enc_data(krb5_enc_data *ref, krb5_enc_data *var)
121
{
122
int p = TRUE;
123
if (ref == var) return TRUE;
124
else if (ref == NULL || var == NULL) return FALSE;
125
p = p && scalar_equal(enctype);
126
p = p && scalar_equal(kvno);
127
p = p && struct_equal(ciphertext,ktest_equal_data);
128
return p;
129
}
130
131
int
132
ktest_equal_encryption_key(krb5_keyblock *ref, krb5_keyblock *var)
133
{
134
int p = TRUE;
135
if (ref == var) return TRUE;
136
else if (ref == NULL || var == NULL) return FALSE;
137
p = p && scalar_equal(enctype);
138
p = p && len_equal(length,contents,ktest_equal_array_of_octet);
139
return p;
140
}
141
142
int
143
ktest_equal_enc_tkt_part(krb5_enc_tkt_part *ref, krb5_enc_tkt_part *var)
144
{
145
int p = TRUE;
146
if (ref == var) return TRUE;
147
else if (ref == NULL || var == NULL) return FALSE;
148
p = p && scalar_equal(flags);
149
p = p && ptr_equal(session,ktest_equal_encryption_key);
150
p = p && ptr_equal(client,ktest_equal_principal_data);
151
p = p && struct_equal(transited,ktest_equal_transited);
152
p = p && struct_equal(times,ktest_equal_ticket_times);
153
p = p && ptr_equal(caddrs,ktest_equal_addresses);
154
p = p && ptr_equal(authorization_data,ktest_equal_authorization_data);
155
return p;
156
}
157
158
int
159
ktest_equal_transited(krb5_transited *ref, krb5_transited *var)
160
{
161
int p = TRUE;
162
if (ref == var) return TRUE;
163
else if (ref == NULL || var == NULL) return FALSE;
164
p = p && scalar_equal(tr_type);
165
p = p && struct_equal(tr_contents,ktest_equal_data);
166
return p;
167
}
168
169
int
170
ktest_equal_ticket_times(krb5_ticket_times *ref, krb5_ticket_times *var)
171
{
172
int p = TRUE;
173
if (ref == var) return TRUE;
174
else if (ref == NULL || var == NULL) return FALSE;
175
p = p && scalar_equal(authtime);
176
p = p && scalar_equal(starttime);
177
p = p && scalar_equal(endtime);
178
p = p && scalar_equal(renew_till);
179
return p;
180
}
181
182
int
183
ktest_equal_address(krb5_address *ref, krb5_address *var)
184
{
185
int p = TRUE;
186
if (ref == var) return TRUE;
187
else if (ref == NULL || var == NULL) return FALSE;
188
p = p && scalar_equal(addrtype);
189
p = p && len_equal(length,contents,ktest_equal_array_of_octet);
190
return p;
191
}
192
193
int
194
ktest_equal_enc_kdc_rep_part(krb5_enc_kdc_rep_part *ref,
195
krb5_enc_kdc_rep_part *var)
196
{
197
int p = TRUE;
198
if (ref == var) return TRUE;
199
else if (ref == NULL || var == NULL) return FALSE;
200
p = p && ptr_equal(session,ktest_equal_keyblock);
201
p = p && ptr_equal(last_req,ktest_equal_last_req);
202
p = p && scalar_equal(nonce);
203
p = p && scalar_equal(key_exp);
204
p = p && scalar_equal(flags);
205
p = p && struct_equal(times,ktest_equal_ticket_times);
206
p = p && ptr_equal(server,ktest_equal_principal_data);
207
p = p && ptr_equal(caddrs,ktest_equal_addresses);
208
return p;
209
}
210
211
int
212
ktest_equal_priv(krb5_priv *ref, krb5_priv *var)
213
{
214
int p = TRUE;
215
if (ref == var) return TRUE;
216
else if (ref == NULL || var == NULL) return FALSE;
217
p = p && struct_equal(enc_part,ktest_equal_enc_data);
218
return p;
219
}
220
221
int
222
ktest_equal_cred(krb5_cred *ref, krb5_cred *var)
223
{
224
int p = TRUE;
225
if (ref == var) return TRUE;
226
else if (ref == NULL || var == NULL) return FALSE;
227
p = p && ptr_equal(tickets,ktest_equal_sequence_of_ticket);
228
p = p && struct_equal(enc_part,ktest_equal_enc_data);
229
return p;
230
}
231
232
int
233
ktest_equal_error(krb5_error *ref, krb5_error *var)
234
{
235
int p = TRUE;
236
if (ref == var) return TRUE;
237
else if (ref == NULL || var == NULL) return FALSE;
238
p = p && scalar_equal(ctime);
239
p = p && scalar_equal(cusec);
240
p = p && scalar_equal(susec);
241
p = p && scalar_equal(stime);
242
p = p && scalar_equal(error);
243
p = p && ptr_equal(client,ktest_equal_principal_data);
244
p = p && ptr_equal(server,ktest_equal_principal_data);
245
p = p && struct_equal(text,ktest_equal_data);
246
p = p && struct_equal(e_data,ktest_equal_data);
247
return p;
248
}
249
250
int
251
ktest_equal_ap_req(krb5_ap_req *ref, krb5_ap_req *var)
252
{
253
int p = TRUE;
254
if (ref == var) return TRUE;
255
else if (ref == NULL || var == NULL) return FALSE;
256
p = p && scalar_equal(ap_options);
257
p = p && ptr_equal(ticket,ktest_equal_ticket);
258
p = p && struct_equal(authenticator,ktest_equal_enc_data);
259
return p;
260
}
261
262
int
263
ktest_equal_ap_rep(krb5_ap_rep *ref, krb5_ap_rep *var)
264
{
265
int p = TRUE;
266
if (ref == var) return TRUE;
267
else if (ref == NULL || var == NULL) return FALSE;
268
p = p && struct_equal(enc_part,ktest_equal_enc_data);
269
return p;
270
}
271
272
int
273
ktest_equal_ap_rep_enc_part(krb5_ap_rep_enc_part *ref,
274
krb5_ap_rep_enc_part *var)
275
{
276
int p = TRUE;
277
if (ref == var) return TRUE;
278
else if (ref == NULL || var == NULL) return FALSE;
279
p = p && scalar_equal(ctime);
280
p = p && scalar_equal(cusec);
281
p = p && ptr_equal(subkey,ktest_equal_encryption_key);
282
p = p && scalar_equal(seq_number);
283
return p;
284
}
285
286
int
287
ktest_equal_safe(krb5_safe *ref, krb5_safe *var)
288
{
289
int p = TRUE;
290
if (ref == var) return TRUE;
291
else if (ref == NULL || var == NULL) return FALSE;
292
p = p && struct_equal(user_data,ktest_equal_data);
293
p = p && scalar_equal(timestamp);
294
p = p && scalar_equal(usec);
295
p = p && scalar_equal(seq_number);
296
p = p && ptr_equal(s_address,ktest_equal_address);
297
p = p && ptr_equal(r_address,ktest_equal_address);
298
p = p && ptr_equal(checksum,ktest_equal_checksum);
299
return p;
300
}
301
302
303
int
304
ktest_equal_enc_cred_part(krb5_cred_enc_part *ref, krb5_cred_enc_part *var)
305
{
306
int p = TRUE;
307
if (ref == var) return TRUE;
308
else if (ref == NULL || var == NULL) return FALSE;
309
p = p && scalar_equal(nonce);
310
p = p && scalar_equal(timestamp);
311
p = p && scalar_equal(usec);
312
p = p && ptr_equal(s_address,ktest_equal_address);
313
p = p && ptr_equal(r_address,ktest_equal_address);
314
p = p && ptr_equal(ticket_info,ktest_equal_sequence_of_cred_info);
315
return p;
316
}
317
318
int
319
ktest_equal_enc_priv_part(krb5_priv_enc_part *ref, krb5_priv_enc_part *var)
320
{
321
int p = TRUE;
322
if (ref == var) return TRUE;
323
else if (ref == NULL || var == NULL) return FALSE;
324
p = p && struct_equal(user_data,ktest_equal_data);
325
p = p && scalar_equal(timestamp);
326
p = p && scalar_equal(usec);
327
p = p && scalar_equal(seq_number);
328
p = p && ptr_equal(s_address,ktest_equal_address);
329
p = p && ptr_equal(r_address,ktest_equal_address);
330
return p;
331
}
332
333
int
334
ktest_equal_as_rep(krb5_kdc_rep *ref, krb5_kdc_rep *var)
335
{
336
int p = TRUE;
337
if (ref == var) return TRUE;
338
else if (ref == NULL || var == NULL) return FALSE;
339
p = p && scalar_equal(msg_type);
340
p = p && ptr_equal(padata,ktest_equal_sequence_of_pa_data);
341
p = p && ptr_equal(client,ktest_equal_principal_data);
342
p = p && ptr_equal(ticket,ktest_equal_ticket);
343
p = p && struct_equal(enc_part,ktest_equal_enc_data);
344
p = p && ptr_equal(enc_part2,ktest_equal_enc_kdc_rep_part);
345
return p;
346
}
347
348
int
349
ktest_equal_tgs_rep(krb5_kdc_rep *ref, krb5_kdc_rep *var)
350
{
351
return ktest_equal_as_rep(ref,var);
352
}
353
354
int
355
ktest_equal_as_req(krb5_kdc_req *ref, krb5_kdc_req *var)
356
{
357
int p = TRUE;
358
if (ref == var) return TRUE;
359
else if (ref == NULL || var == NULL) return FALSE;
360
p = p && scalar_equal(msg_type);
361
p = p && ptr_equal(padata,ktest_equal_sequence_of_pa_data);
362
p = p && scalar_equal(kdc_options);
363
p = p && ptr_equal(client,ktest_equal_principal_data);
364
p = p && ptr_equal(server,ktest_equal_principal_data);
365
p = p && scalar_equal(from);
366
p = p && scalar_equal(till);
367
p = p && scalar_equal(rtime);
368
p = p && scalar_equal(nonce);
369
p = p && len_equal(nktypes,ktype,ktest_equal_array_of_enctype);
370
p = p && ptr_equal(addresses,ktest_equal_addresses);
371
p = p && struct_equal(authorization_data,ktest_equal_enc_data);
372
/* This field isn't actually in the ASN.1 encoding. */
373
/* p = p && ptr_equal(unenc_authdata,ktest_equal_authorization_data); */
374
return p;
375
}
376
377
int
378
ktest_equal_tgs_req(krb5_kdc_req *ref, krb5_kdc_req *var)
379
{
380
return ktest_equal_as_req(ref,var);
381
}
382
383
int
384
ktest_equal_kdc_req_body(krb5_kdc_req *ref, krb5_kdc_req *var)
385
{
386
int p = TRUE;
387
if (ref == var) return TRUE;
388
else if (ref == NULL || var == NULL) return FALSE;
389
p = p && scalar_equal(kdc_options);
390
p = p && ptr_equal(client,ktest_equal_principal_data);
391
p = p && ptr_equal(server,ktest_equal_principal_data);
392
p = p && scalar_equal(from);
393
p = p && scalar_equal(till);
394
p = p && scalar_equal(rtime);
395
p = p && scalar_equal(nonce);
396
p = p && len_equal(nktypes,ktype,ktest_equal_array_of_enctype);
397
p = p && ptr_equal(addresses,ktest_equal_addresses);
398
p = p && struct_equal(authorization_data,ktest_equal_enc_data);
399
/* This isn't part of the ASN.1 encoding. */
400
/* p = p && ptr_equal(unenc_authdata,ktest_equal_authorization_data); */
401
return p;
402
}
403
404
int
405
ktest_equal_last_req_entry(krb5_last_req_entry *ref, krb5_last_req_entry *var)
406
{
407
int p = TRUE;
408
if (ref == var) return TRUE;
409
else if (ref == NULL || var == NULL) return FALSE;
410
p = p && scalar_equal(lr_type);
411
p = p && scalar_equal(value);
412
return p;
413
}
414
415
int
416
ktest_equal_pa_data(krb5_pa_data *ref, krb5_pa_data *var)
417
{
418
int p = TRUE;
419
if (ref == var) return TRUE;
420
else if (ref == NULL || var == NULL) return FALSE;
421
p = p && scalar_equal(pa_type);
422
p = p && len_equal(length,contents,ktest_equal_array_of_octet);
423
return p;
424
}
425
426
int
427
ktest_equal_cred_info(krb5_cred_info *ref, krb5_cred_info *var)
428
{
429
int p = TRUE;
430
if (ref == var) return TRUE;
431
else if (ref == NULL || var == NULL) return FALSE;
432
p = p && ptr_equal(session,ktest_equal_keyblock);
433
p = p && ptr_equal(client,ktest_equal_principal_data);
434
p = p && ptr_equal(server,ktest_equal_principal_data);
435
p = p && scalar_equal(flags);
436
p = p && struct_equal(times,ktest_equal_ticket_times);
437
p = p && ptr_equal(caddrs,ktest_equal_addresses);
438
439
return p;
440
}
441
442
int
443
ktest_equal_krb5_etype_info_entry(krb5_etype_info_entry *ref,
444
krb5_etype_info_entry *var)
445
{
446
if (ref->etype != var->etype)
447
return FALSE;
448
if (ref->length != var->length)
449
return FALSE;
450
if (ref->length > 0 && ref->length != KRB5_ETYPE_NO_SALT)
451
if (memcmp(ref->salt, var->salt, ref->length) != 0)
452
return FALSE;
453
return TRUE;
454
}
455
456
int
457
ktest_equal_krb5_pa_enc_ts(krb5_pa_enc_ts *ref, krb5_pa_enc_ts *var)
458
{
459
int p = TRUE;
460
if (ref == var) return TRUE;
461
else if (ref == NULL || var == NULL) return FALSE;
462
p = p && scalar_equal(patimestamp);
463
p = p && scalar_equal(pausec);
464
return p;
465
}
466
467
#define equal_str(f) struct_equal(f,ktest_equal_data)
468
469
int
470
ktest_equal_sam_challenge_2_body(krb5_sam_challenge_2_body *ref,
471
krb5_sam_challenge_2_body *var)
472
{
473
int p = TRUE;
474
if (ref == var) return TRUE;
475
else if (ref == NULL || var == NULL) return FALSE;
476
p = p && scalar_equal(sam_type);
477
p = p && scalar_equal(sam_flags);
478
p = p && equal_str(sam_type_name);
479
p = p && equal_str(sam_track_id);
480
p = p && equal_str(sam_challenge_label);
481
p = p && equal_str(sam_challenge);
482
p = p && equal_str(sam_response_prompt);
483
p = p && equal_str(sam_pk_for_sad);
484
p = p && scalar_equal(sam_nonce);
485
p = p && scalar_equal(sam_etype);
486
return p;
487
}
488
489
int
490
ktest_equal_sam_challenge_2(krb5_sam_challenge_2 *ref,
491
krb5_sam_challenge_2 *var)
492
{
493
int p = TRUE;
494
if (ref == var) return TRUE;
495
else if (ref == NULL || var == NULL) return FALSE;
496
p = p && equal_str(sam_challenge_2_body);
497
p = p && ptr_equal(sam_cksum,ktest_equal_sequence_of_checksum);
498
return p;
499
}
500
501
int
502
ktest_equal_pa_for_user(krb5_pa_for_user *ref, krb5_pa_for_user *var)
503
{
504
int p = TRUE;
505
if (ref == var) return TRUE;
506
else if (ref == NULL || var == NULL) return FALSE;
507
p = p && ptr_equal(user, ktest_equal_principal_data);
508
p = p && struct_equal(cksum, ktest_equal_checksum);
509
p = p && equal_str(auth_package);
510
return p;
511
}
512
513
int
514
ktest_equal_pa_s4u_x509_user(krb5_pa_s4u_x509_user *ref,
515
krb5_pa_s4u_x509_user *var)
516
{
517
int p = TRUE;
518
if (ref == var) return TRUE;
519
else if (ref == NULL || var == NULL) return FALSE;
520
p = p && scalar_equal(user_id.nonce);
521
p = p && ptr_equal(user_id.user,ktest_equal_principal_data);
522
p = p && struct_equal(user_id.subject_cert,ktest_equal_data);
523
p = p && scalar_equal(user_id.options);
524
p = p && struct_equal(cksum,ktest_equal_checksum);
525
return p;
526
}
527
528
int
529
ktest_equal_ad_kdcissued(krb5_ad_kdcissued *ref, krb5_ad_kdcissued *var)
530
{
531
int p = TRUE;
532
if (ref == var) return TRUE;
533
else if (ref == NULL || var == NULL) return FALSE;
534
p = p && struct_equal(ad_checksum,ktest_equal_checksum);
535
p = p && ptr_equal(i_principal,ktest_equal_principal_data);
536
p = p && ptr_equal(elements,ktest_equal_authorization_data);
537
return p;
538
}
539
540
int
541
ktest_equal_iakerb_header(krb5_iakerb_header *ref, krb5_iakerb_header *var)
542
{
543
int p = TRUE;
544
if (ref == var) return TRUE;
545
else if (ref == NULL || var == NULL) return FALSE;
546
p = p && struct_equal(target_realm,ktest_equal_data);
547
p = p && ptr_equal(cookie,ktest_equal_data);
548
return p;
549
}
550
551
int
552
ktest_equal_iakerb_finished(krb5_iakerb_finished *ref,
553
krb5_iakerb_finished *var)
554
{
555
int p = TRUE;
556
if (ref == var) return TRUE;
557
else if (ref == NULL || var == NULL) return FALSE;
558
p = p && struct_equal(checksum,ktest_equal_checksum);
559
return p;
560
}
561
562
static int
563
ktest_equal_fast_finished(krb5_fast_finished *ref, krb5_fast_finished *var)
564
{
565
int p = TRUE;
566
if (ref == var) return TRUE;
567
else if (ref == NULL || var == NULL) return FALSE;
568
p = p && scalar_equal(timestamp);
569
p = p && scalar_equal(usec);
570
p = p && ptr_equal(client, ktest_equal_principal_data);
571
p = p && struct_equal(ticket_checksum, ktest_equal_checksum);
572
return p;
573
}
574
575
int
576
ktest_equal_fast_response(krb5_fast_response *ref, krb5_fast_response *var)
577
{
578
int p = TRUE;
579
if (ref == var) return TRUE;
580
else if (ref == NULL || var == NULL) return FALSE;
581
p = p && ptr_equal(padata, ktest_equal_sequence_of_pa_data);
582
p = p && ptr_equal(strengthen_key, ktest_equal_keyblock);
583
p = p && ptr_equal(finished, ktest_equal_fast_finished);
584
p = p && scalar_equal(nonce);
585
return p;
586
}
587
588
static int
589
ktest_equal_algorithm_identifier(krb5_algorithm_identifier *ref,
590
krb5_algorithm_identifier *var)
591
{
592
int p = TRUE;
593
if (ref == var) return TRUE;
594
else if (ref == NULL || var == NULL) return FALSE;
595
p = p && equal_str(algorithm);
596
p = p && equal_str(parameters);
597
return p;
598
}
599
600
int
601
ktest_equal_otp_tokeninfo(krb5_otp_tokeninfo *ref, krb5_otp_tokeninfo *var)
602
{
603
int p = TRUE;
604
if (ref == var) return TRUE;
605
else if (ref == NULL || var == NULL) return FALSE;
606
p = p && scalar_equal(flags);
607
p = p && equal_str(vendor);
608
p = p && equal_str(challenge);
609
p = p && scalar_equal(length);
610
p = p && scalar_equal(format);
611
p = p && equal_str(token_id);
612
p = p && equal_str(alg_id);
613
p = p && ptr_equal(supported_hash_alg,
614
ktest_equal_sequence_of_algorithm_identifier);
615
p = p && scalar_equal(iteration_count);
616
return p;
617
}
618
619
int
620
ktest_equal_pa_otp_challenge(krb5_pa_otp_challenge *ref,
621
krb5_pa_otp_challenge *var)
622
{
623
int p = TRUE;
624
if (ref == var) return TRUE;
625
else if (ref == NULL || var == NULL) return FALSE;
626
p = p && equal_str(nonce);
627
p = p && equal_str(service);
628
p = p && ptr_equal(tokeninfo, ktest_equal_sequence_of_otp_tokeninfo);
629
p = p && equal_str(salt);
630
p = p && equal_str(s2kparams);
631
return p;
632
}
633
634
int
635
ktest_equal_pa_otp_req(krb5_pa_otp_req *ref, krb5_pa_otp_req *var)
636
{
637
int p = TRUE;
638
if (ref == var) return TRUE;
639
else if (ref == NULL || var == NULL) return FALSE;
640
p = p && scalar_equal(flags);
641
p = p && equal_str(nonce);
642
p = p && struct_equal(enc_data, ktest_equal_enc_data);
643
p = p && ptr_equal(hash_alg, ktest_equal_algorithm_identifier);
644
p = p && scalar_equal(iteration_count);
645
p = p && equal_str(otp_value);
646
p = p && equal_str(pin);
647
p = p && equal_str(challenge);
648
p = p && scalar_equal(time);
649
p = p && equal_str(counter);
650
p = p && scalar_equal(format);
651
p = p && equal_str(token_id);
652
p = p && equal_str(alg_id);
653
p = p && equal_str(vendor);
654
return p;
655
}
656
657
#ifdef ENABLE_LDAP
658
static int
659
equal_key_data(krb5_key_data *ref, krb5_key_data *var)
660
{
661
int p = TRUE;
662
if (ref == var) return TRUE;
663
else if (ref == NULL || var == NULL) return FALSE;
664
p = p && scalar_equal(key_data_type[0]);
665
p = p && scalar_equal(key_data_type[1]);
666
p = p && len_equal(key_data_length[0],key_data_contents[0],
667
ktest_equal_array_of_octet);
668
p = p && len_equal(key_data_length[1],key_data_contents[1],
669
ktest_equal_array_of_octet);
670
return p;
671
}
672
673
static int
674
equal_key_data_array(int n, krb5_key_data *ref, krb5_key_data *val)
675
{
676
int i, p = TRUE;
677
for (i = 0; i < n; i++) {
678
p = p && equal_key_data(ref+i, val+i);
679
}
680
return p;
681
}
682
683
int
684
ktest_equal_ldap_sequence_of_keys(ldap_seqof_key_data *ref,
685
ldap_seqof_key_data *var)
686
{
687
int p = TRUE;
688
if (ref == var) return TRUE;
689
else if (ref == NULL || var == NULL) return FALSE;
690
p = p && scalar_equal(mkvno);
691
p = p && scalar_equal(kvno);
692
p = p && len_equal(n_key_data,key_data,equal_key_data_array);
693
return p;
694
}
695
#endif
696
697
/**** arrays ****************************************************************/
698
699
int
700
ktest_equal_array_of_data(int length, krb5_data *ref, krb5_data *var)
701
{
702
int i,p = TRUE;
703
704
if (length == 0 || ref == var) return TRUE;
705
else if (ref == NULL || var == NULL) return FALSE;
706
for (i=0; i<(length); i++) {
707
p = p && ktest_equal_data(&(ref[i]),&(var[i]));
708
}
709
return p;
710
}
711
712
int
713
ktest_equal_array_of_octet(unsigned int length, krb5_octet *ref,
714
krb5_octet *var)
715
{
716
unsigned int i, p = TRUE;
717
718
if (length == 0 || ref == var) return TRUE;
719
else if (ref == NULL || var == NULL) return FALSE;
720
for (i=0; i<length; i++)
721
p = p && (ref[i] == var[i]);
722
return p;
723
}
724
725
int
726
ktest_equal_array_of_char(unsigned int length, char *ref, char *var)
727
{
728
unsigned int i, p = TRUE;
729
730
if (length == 0 || ref == var) return TRUE;
731
else if (ref == NULL || var == NULL) return FALSE;
732
for (i=0; i<length; i++)
733
p = p && (ref[i] == var[i]);
734
return p;
735
}
736
737
int
738
ktest_equal_array_of_enctype(int length, krb5_enctype *ref, krb5_enctype *var)
739
{
740
int i, p = TRUE;
741
742
if (length == 0 || ref == var) return TRUE;
743
else if (ref == NULL || var == NULL) return FALSE;
744
for (i=0; i<length; i++)
745
p = p && (ref[i] == var[i]);
746
return p;
747
}
748
749
#define array_compare(comparator) \
750
int i,p = TRUE; \
751
if (ref == var) return TRUE; \
752
if (!ref || !ref[0]) \
753
return (!var || !var[0]); \
754
if (!var || !var[0]) return FALSE; \
755
for (i=0; ref[i] != NULL && var[i] != NULL; i++) \
756
p = p && comparator(ref[i],var[i]); \
757
if (ref[i] == NULL && var[i] == NULL) return p; \
758
else return FALSE
759
760
int
761
ktest_equal_authorization_data(krb5_authdata **ref, krb5_authdata **var)
762
{
763
array_compare(ktest_equal_authdata);
764
}
765
766
int
767
ktest_equal_addresses(krb5_address **ref, krb5_address **var)
768
{
769
array_compare(ktest_equal_address);
770
}
771
772
int
773
ktest_equal_last_req(krb5_last_req_entry **ref, krb5_last_req_entry **var)
774
{
775
array_compare(ktest_equal_last_req_entry);
776
}
777
778
int
779
ktest_equal_sequence_of_ticket(krb5_ticket **ref, krb5_ticket **var)
780
{
781
array_compare(ktest_equal_ticket);
782
}
783
784
int
785
ktest_equal_sequence_of_pa_data(krb5_pa_data **ref, krb5_pa_data **var)
786
{
787
array_compare(ktest_equal_pa_data);
788
}
789
790
int
791
ktest_equal_sequence_of_cred_info(krb5_cred_info **ref, krb5_cred_info **var)
792
{
793
array_compare(ktest_equal_cred_info);
794
}
795
796
int
797
ktest_equal_sequence_of_principal(krb5_principal *ref, krb5_principal *var)
798
{
799
array_compare(ktest_equal_principal_data);
800
}
801
802
int
803
ktest_equal_etype_info(krb5_etype_info_entry **ref, krb5_etype_info_entry **var)
804
{
805
array_compare(ktest_equal_krb5_etype_info_entry);
806
}
807
808
int
809
ktest_equal_sequence_of_checksum(krb5_checksum **ref, krb5_checksum **var)
810
{
811
array_compare(ktest_equal_checksum);
812
}
813
814
int
815
ktest_equal_sequence_of_algorithm_identifier(krb5_algorithm_identifier **ref,
816
krb5_algorithm_identifier **var)
817
{
818
array_compare(ktest_equal_algorithm_identifier);
819
}
820
821
int
822
ktest_equal_sequence_of_otp_tokeninfo(krb5_otp_tokeninfo **ref,
823
krb5_otp_tokeninfo **var)
824
{
825
array_compare(ktest_equal_otp_tokeninfo);
826
}
827
828
int
829
ktest_equal_sequence_of_spake_factor(krb5_spake_factor **ref,
830
krb5_spake_factor **var)
831
{
832
array_compare(ktest_equal_spake_factor);
833
}
834
835
#ifndef DISABLE_PKINIT
836
837
static int
838
ktest_equal_pk_authenticator(krb5_pk_authenticator *ref,
839
krb5_pk_authenticator *var)
840
{
841
int p = TRUE;
842
if (ref == var) return TRUE;
843
else if (ref == NULL || var == NULL) return FALSE;
844
p = p && scalar_equal(cusec);
845
p = p && scalar_equal(ctime);
846
p = p && scalar_equal(nonce);
847
p = p && data_eq(ref->paChecksum, var->paChecksum);
848
return p;
849
}
850
851
static int
852
ktest_equal_external_principal_identifier(
853
krb5_external_principal_identifier *ref,
854
krb5_external_principal_identifier *var)
855
{
856
int p = TRUE;
857
if (ref == var) return TRUE;
858
else if (ref == NULL || var == NULL) return FALSE;
859
p = p && equal_str(subjectName);
860
p = p && equal_str(issuerAndSerialNumber);
861
p = p && equal_str(subjectKeyIdentifier);
862
return p;
863
}
864
865
static int
866
ktest_equal_sequence_of_external_principal_identifier(
867
krb5_external_principal_identifier **ref,
868
krb5_external_principal_identifier **var)
869
{
870
array_compare(ktest_equal_external_principal_identifier);
871
}
872
873
int
874
ktest_equal_pa_pk_as_req(krb5_pa_pk_as_req *ref, krb5_pa_pk_as_req *var)
875
{
876
int p = TRUE;
877
if (ref == var) return TRUE;
878
else if (ref == NULL || var == NULL) return FALSE;
879
p = p && equal_str(signedAuthPack);
880
p = p && ptr_equal(trustedCertifiers,
881
ktest_equal_sequence_of_external_principal_identifier);
882
p = p && equal_str(kdcPkId);
883
return p;
884
}
885
886
static int
887
ktest_equal_dh_rep_info(krb5_dh_rep_info *ref, krb5_dh_rep_info *var)
888
{
889
int p = TRUE;
890
if (ref == var) return TRUE;
891
else if (ref == NULL || var == NULL) return FALSE;
892
p = p && equal_str(dhSignedData);
893
p = p && equal_str(serverDHNonce);
894
p = p && ptr_equal(kdfID, ktest_equal_data);
895
return p;
896
}
897
898
int
899
ktest_equal_pa_pk_as_rep(krb5_pa_pk_as_rep *ref, krb5_pa_pk_as_rep *var)
900
{
901
int p = TRUE;
902
if (ref == var) return TRUE;
903
else if (ref == NULL || var == NULL) return FALSE;
904
if (ref->choice != var->choice) return FALSE;
905
if (ref->choice == choice_pa_pk_as_rep_dhInfo)
906
p = p && struct_equal(u.dh_Info, ktest_equal_dh_rep_info);
907
else if (ref->choice == choice_pa_pk_as_rep_encKeyPack)
908
p = p && equal_str(u.encKeyPack);
909
return p;
910
}
911
912
static int
913
ktest_equal_sequence_of_data(krb5_data **ref, krb5_data **var)
914
{
915
array_compare(ktest_equal_data);
916
}
917
918
int
919
ktest_equal_auth_pack(krb5_auth_pack *ref, krb5_auth_pack *var)
920
{
921
int p = TRUE;
922
if (ref == var) return TRUE;
923
else if (ref == NULL || var == NULL) return FALSE;
924
p = p && struct_equal(pkAuthenticator, ktest_equal_pk_authenticator);
925
p = p && equal_str(clientPublicValue);
926
p = p && ptr_equal(supportedCMSTypes,
927
ktest_equal_sequence_of_algorithm_identifier);
928
p = p && equal_str(clientDHNonce);
929
p = p && ptr_equal(supportedKDFs, ktest_equal_sequence_of_data);
930
return p;
931
}
932
933
int
934
ktest_equal_kdc_dh_key_info(krb5_kdc_dh_key_info *ref,
935
krb5_kdc_dh_key_info *var)
936
{
937
int p = TRUE;
938
if (ref == var) return TRUE;
939
else if (ref == NULL || var == NULL) return FALSE;
940
p = p && equal_str(subjectPublicKey);
941
p = p && scalar_equal(nonce);
942
p = p && scalar_equal(dhKeyExpiration);
943
return p;
944
}
945
946
int
947
ktest_equal_reply_key_pack(krb5_reply_key_pack *ref, krb5_reply_key_pack *var)
948
{
949
int p = TRUE;
950
if (ref == var) return TRUE;
951
else if (ref == NULL || var == NULL) return FALSE;
952
p = p && struct_equal(replyKey, ktest_equal_keyblock);
953
p = p && struct_equal(asChecksum, ktest_equal_checksum);
954
return p;
955
}
956
957
#endif /* not DISABLE_PKINIT */
958
959
int
960
ktest_equal_kkdcp_message(krb5_kkdcp_message *ref, krb5_kkdcp_message *var)
961
{
962
int p = TRUE;
963
if (ref == var) return TRUE;
964
else if (ref == NULL || var == NULL) return FALSE;
965
p = p && data_eq(ref->kerb_message, var->kerb_message);
966
p = p && data_eq(ref->target_domain, var->target_domain);
967
p = p && scalar_equal(dclocator_hint);
968
return p;
969
}
970
971
static int
972
vmac_eq(krb5_verifier_mac *ref, krb5_verifier_mac *var)
973
{
974
int p = TRUE;
975
if (ref == var) return TRUE;
976
else if (ref == NULL || var == NULL) return FALSE;
977
p = p && ptr_equal(princ, ktest_equal_principal_data);
978
p = p && scalar_equal(kvno);
979
p = p && scalar_equal(enctype);
980
p = p && struct_equal(checksum, ktest_equal_checksum);
981
return p;
982
}
983
984
static int
985
vmac_list_eq(krb5_verifier_mac **ref, krb5_verifier_mac **var)
986
{
987
array_compare(vmac_eq);
988
}
989
990
int
991
ktest_equal_cammac(krb5_cammac *ref, krb5_cammac *var)
992
{
993
int p = TRUE;
994
if (ref == var) return TRUE;
995
else if (ref == NULL || var == NULL) return FALSE;
996
p = p && ptr_equal(elements, ktest_equal_authorization_data);
997
p = p && ptr_equal(kdc_verifier, vmac_eq);
998
p = p && ptr_equal(svc_verifier, vmac_eq);
999
p = p && ptr_equal(other_verifiers, vmac_list_eq);
1000
return p;
1001
}
1002
1003
int
1004
ktest_equal_secure_cookie(krb5_secure_cookie *ref, krb5_secure_cookie *var)
1005
{
1006
int p = TRUE;
1007
if (ref == var) return TRUE;
1008
else if (ref == NULL || var == NULL) return FALSE;
1009
p = p && ktest_equal_sequence_of_pa_data(ref->data, var->data);
1010
p = p && scalar_equal(time);
1011
return p;
1012
}
1013
1014
int
1015
ktest_equal_spake_factor(krb5_spake_factor *ref, krb5_spake_factor *var)
1016
{
1017
int p = TRUE;
1018
if (ref == var) return TRUE;
1019
else if (ref == NULL || var == NULL) return FALSE;
1020
p = p && scalar_equal(type);
1021
p = p && ptr_equal(data,ktest_equal_data);
1022
return p;
1023
}
1024
1025
int
1026
ktest_equal_pa_spake(krb5_pa_spake *ref, krb5_pa_spake *var)
1027
{
1028
int p = TRUE;
1029
if (ref == var) return TRUE;
1030
else if (ref == NULL || var == NULL) return FALSE;
1031
else if (ref->choice != var->choice) return FALSE;
1032
switch (ref->choice) {
1033
case SPAKE_MSGTYPE_SUPPORT:
1034
p = p && scalar_equal(u.support.ngroups);
1035
p = p && (memcmp(ref->u.support.groups,var->u.support.groups,
1036
ref->u.support.ngroups * sizeof(int32_t)) == 0);
1037
break;
1038
case SPAKE_MSGTYPE_CHALLENGE:
1039
p = p && struct_equal(u.challenge.pubkey,ktest_equal_data);
1040
p = p && ptr_equal(u.challenge.factors,
1041
ktest_equal_sequence_of_spake_factor);
1042
break;
1043
case SPAKE_MSGTYPE_RESPONSE:
1044
p = p && struct_equal(u.response.pubkey,ktest_equal_data);
1045
p = p && struct_equal(u.response.factor,ktest_equal_enc_data);
1046
break;
1047
case SPAKE_MSGTYPE_ENCDATA:
1048
p = p && struct_equal(u.encdata,ktest_equal_enc_data);
1049
break;
1050
default:
1051
break;
1052
}
1053
return p;
1054
}
1055
1056