xref: /openbsd/regress/sbin/isakmpd/dh/dhtest.c (revision 09467b48)
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
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