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