diff options
Diffstat (limited to 'keyexchange/isakmpd-20041012/regress/prf')
-rw-r--r-- | keyexchange/isakmpd-20041012/regress/prf/.cvsignore | 2 | ||||
-rw-r--r-- | keyexchange/isakmpd-20041012/regress/prf/Makefile | 16 | ||||
-rw-r--r-- | keyexchange/isakmpd-20041012/regress/prf/prftest.c | 116 |
3 files changed, 134 insertions, 0 deletions
diff --git a/keyexchange/isakmpd-20041012/regress/prf/.cvsignore b/keyexchange/isakmpd-20041012/regress/prf/.cvsignore new file mode 100644 index 0000000..023b310 --- /dev/null +++ b/keyexchange/isakmpd-20041012/regress/prf/.cvsignore @@ -0,0 +1,2 @@ +prftest +obj diff --git a/keyexchange/isakmpd-20041012/regress/prf/Makefile b/keyexchange/isakmpd-20041012/regress/prf/Makefile new file mode 100644 index 0000000..5d9b1fa --- /dev/null +++ b/keyexchange/isakmpd-20041012/regress/prf/Makefile @@ -0,0 +1,16 @@ +# $OpenBSD: Makefile,v 1.7 2004/02/25 16:01:29 hshoexer Exp $ +# $EOM: Makefile,v 1.6 2000/03/28 21:22:07 ho Exp $ + +# Test PRF: + +PROG= prftest +SRCS= prf.c hash.c log.c prftest.c conf.c sysdep.c util.c +TOPSRC= ${.CURDIR}/../.. +TOPOBJ!= cd ${TOPSRC}; printf "all:\n\t@pwd\n" |${MAKE} -f- +OS!= awk '/^OS=/ { print $$2 }' ${.CURDIR}/../../Makefile +.PATH: ${TOPSRC} ${TOPSRC}/sysdep/${OS} ${TOPOBJ} +CFLAGS+= -I${TOPSRC} -I${TOPSRC}/sysdep/${OS} -I${TOPOBJ} -Wall +NOMAN= +DEBUG= -g + +.include <bsd.prog.mk> diff --git a/keyexchange/isakmpd-20041012/regress/prf/prftest.c b/keyexchange/isakmpd-20041012/regress/prf/prftest.c new file mode 100644 index 0000000..15d7578 --- /dev/null +++ b/keyexchange/isakmpd-20041012/regress/prf/prftest.c @@ -0,0 +1,116 @@ +/* $OpenBSD: prftest.c,v 1.7 2003/06/03 14:39:51 ho Exp $ */ +/* $EOM: prftest.c,v 1.2 1998/10/07 16:40:50 niklas Exp $ */ + +/* + * Copyright (c) 1998 Niels Provos. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This code was written under funding by Ericsson Radio Systems. + */ + +#include <sys/param.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +#include "hash.h" +#include "prf.h" + +int test_prf (char *, enum hashes, char *, int, char *, int, char *); + +#define nibble2c(x) ((x) >= 10 ? ('a'-10+(x)) : ('0' + (x))) + +/* + * Basically the same as the HMAC regress, but to keep with modularity + * prf seems to be useful. So here we just check the HMAC test cases, + * until there are more PRFs. + */ + +int +main (void) +{ + char key[100]; + + memset (key, 11, 20); + test_prf ("PRF MD5 Test Case 1", HASH_MD5, + key, 16, "Hi There", 8, "9294727a3638bb1c13f48ef8158bfc9d"); + test_prf ("PRF MD5 Test Case 2", HASH_MD5, + "Jefe", 4, + "what do ya want for nothing?", 28, + "750c783e6ab0b503eaa86e310a5db738"); + test_prf ("PRF SHA1 Test Case 1", HASH_SHA1, + key, 20, "Hi There", 8, + "b617318655057264e28bc0b6fb378c8ef146be00"); + test_prf ("PRF SHA1 Test Case 2", HASH_SHA1, + "Jefe", 4, "what do ya want for nothing?", 28, + "effcdf6ae5eb2fa2d27416d5f184df9c259a7c79"); + test_prf ("PRF SHA1 Test Case 3", HASH_SHA1, + "Bloody long key, this one, eben longer than the blocksize " + "of ordinary keyed HMAC functions", 90, + "what do ya want for nothing?", 28, + "52ca5fbcd7d4821bc6bf8b6e95e131109dff901b"); + + return 0; +} + +int +test_prf (char *test, enum hashes hash, char *key, int klen, + char *data, int dlen, char *cmp) +{ + char output[2*HASH_MAX+1]; + char digest[HASH_MAX]; + struct prf *prf; + int i; + + printf ("Testing %s: ", test); + + prf = prf_alloc (PRF_HMAC, hash, key, klen); + if (!prf) + { + printf("prf_alloc () failed\n"); + return 0; + } + + prf->Init (prf->prfctx); + prf->Update (prf->prfctx, data, dlen); + prf->Final (digest, prf->prfctx); + + prf_free (prf); + + for (i = 0; i < prf->blocksize; i++) + { + output[2 * i] = nibble2c ((digest[i] >> 4) & 0xf); + output[2 * i + 1] = nibble2c (digest[i] & 0xf); + } + output[2 * i] = 0; + + if (strcmp (output, cmp) == 0) + { + printf ("OKAY\n"); + return 1; + } + + printf ("%s <-> %s\n", output, cmp); + return 0; +} |