1 /* $OpenBSD: dhtest.c,v 1.2 2010/06/29 19:50:16 reyk Exp $ */
2 /* $EOM: dhtest.c,v 1.1 1998/07/18 21:14:20 provos Exp $ */
3
4 /*
5 * Copyright (c) 2010 Reyk Floeter <reyk@vantronix.net>
6 * Copyright (c) 1998 Niels Provos. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29 /*
30 * This code was written under funding by Ericsson Radio Systems.
31 */
32
33 /*
34 * This module does a Diffie-Hellman Exchange
35 */
36
37 #include <stdlib.h>
38 #include <string.h>
39 #include <stdio.h>
40
41 #include "dh.h"
42
43 int
main(void)44 main(void)
45 {
46 int len, id;
47 char buf[DH_MAXSZ], buf2[DH_MAXSZ];
48 char sec[DH_MAXSZ], sec2[DH_MAXSZ];
49 struct group *group, *group2;
50 const char *name[] = { "MODP", "EC2N", "ECP" };
51
52 group_init();
53
54 for (id = 0; id < 0xff; id++) {
55 if ((group = group_get(id)) == NULL ||
56 (group2 = group_get(id)) == NULL)
57 continue;
58
59 printf ("Testing group %d (%s%d): ", id,
60 name[group->spec->type],
61 group->spec->bits);
62
63 len = dh_getlen(group);
64
65 dh_create_exchange(group, buf);
66 dh_create_exchange(group2, buf2);
67
68 dh_create_shared(group, sec, buf2);
69 dh_create_shared(group2, sec2, buf);
70
71 if (memcmp (sec, sec2, len)) {
72 printf("FAILED\n");
73 return (1);
74 } else
75 printf("OKAY\n");
76
77 group_free(group);
78 group_free(group2);
79 }
80
81 return (0);
82 }
83