diff options
Diffstat (limited to 'sal/workben/t_digest.c')
-rw-r--r-- | sal/workben/t_digest.c | 378 |
1 files changed, 378 insertions, 0 deletions
diff --git a/sal/workben/t_digest.c b/sal/workben/t_digest.c new file mode 100644 index 000000000000..ab6acf11572b --- /dev/null +++ b/sal/workben/t_digest.c @@ -0,0 +1,378 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +#include <rtl/digest.h> + +static const char *digest_in_MD[] = +{ + "", + "a", + "abc", + "message digest", + "abcdefghijklmnopqrstuvwxyz", + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", + "12345678901234567890123456789012345678901234567890123456789012345678901234567890", + NULL, +}; + +static const char *digest_out_MD2[]= +{ + "8350e5a3e24c153df2275c9f80692773", + "32ec01ec4a6dac72c0ab96fb34c0b5d1", + "da853b0d3f88d99b30283a69e6ded6bb", + "ab4f496bfb2a530b219ff33031fe06b0", + "4e8ddff3650292ab5a4108c3aa47940b", + "da33def2a42df13975352846c30338cd", + "d5976f79d83d3a0dc9806c3c66f3efd8", +}; + +static const char *digest_out_MD5[]= +{ + "d41d8cd98f00b204e9800998ecf8427e", + "0cc175b9c0f1b6a831c399e269772661", + "900150983cd24fb0d6963f7d28e17f72", + "f96b697d7cb7938d525a2f31aaf161d0", + "c3fcd3d76192e4007dfb496cca67e13b", + "d174ab98d277d9f5a5611c2c9f419d9f", + "57edf4a22be3c955ac49da2e2107b67a", +}; + +static const char *digest_in_SHA[]= +{ + "abc", + "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", + NULL, +}; + +static const char *digest_out_SHA_0[]= +{ + "0164b8a914cd2a5e74c4f7ff082c4d97f1edf880", + "d2516ee1acfa5baf33dfc1c471e438449ef134c8", +}; + +static const char *digest_out_SHA_1[]= +{ + "a9993e364706816aba3e25717850c26c9cd0d89d", + "84983e441c3bd26ebaae4aa1f95129e5e54670f1", +}; + +static const char *digest_bigout_SHA_0= + "3232affa48628a26653b5aaa44541fd90d690603"; + +static const char *digest_bigout_SHA_1= + "34aa973cd4c4daa4f61eeb2bdbad27316534016f"; + + +static const char digest_key_HMAC_MD5_1[] = +{ + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x00 +}; +static const char digest_key_HMAC_MD5_2[] = +{ + /* "Jefe" */ + 'J', 'e', 'f', 'e', + 0x00 +}; +static const unsigned char digest_key_HMAC_MD5_3[] = +{ + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0x00 +}; +static const char *digest_key_HMAC_MD5[] = +{ + (const char*)&digest_key_HMAC_MD5_1, + (const char*)&digest_key_HMAC_MD5_2, /* "Jefe", */ + (const char*)&digest_key_HMAC_MD5_3, + NULL +}; + +static const unsigned char digest_in_HMAC_MD5_3[] = +{ + 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, + 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, + 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, + 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, + 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, + 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, + 0xDD, 0xDD, + 0x00 +}; +static const char *digest_in_HMAC_MD5[] = +{ + "Hi There", + "what do ya want for nothing?", + (const char*)&digest_in_HMAC_MD5_3, + NULL +}; + +static const char *digest_out_HMAC_MD5[] = +{ + "9294727a3638bb1c13f48ef8158bfc9d", + "750c783e6ab0b503eaa86e310a5db738", + "56be34521d144c88dbb8c733f0e8b3f6", + NULL +}; +static const char *digest_out_HMAC_SHA1[] = +{ + /* unofficial, i.e. not verified */ + "675b0b3a1b4ddf4e124872da6c2f632bfed957e9", + "effcdf6ae5eb2fa2d27416d5f184df9c259a7c79", + "d730594d167e35d5956fd8003d0db3d3f46dc7bb", + NULL +}; + + +static char *pt (unsigned char *md, int length) +{ + int i; + static char buf[80]; + + for (i=0; i<length; i++) + sprintf(&(buf[i*2]),"%02x",md[i]); + + return(buf); +} + +int SAL_CALL main (int argc, char **argv) +{ + const char **P,**R, **Q; + char *p; + int i=1, err=0; + + unsigned char md[80]; + unsigned char buffer[1000]; + + rtlDigest Digest; + + P=digest_in_MD; + R=digest_out_MD2; + i = 1; + while (*P) + { + rtl_digest_MD2 (*P, strlen(*P), md, sizeof(md)); + + p=pt (md, RTL_DIGEST_LENGTH_MD2); + if (strcmp (p, *R)) + { + printf("error calculating MD2 on '%s'\n",*P); + printf("got %s instead of %s\n",p,*R); + err++; + } + else + printf("test (MD2) %d ok\n",i); + i++; + R++; + P++; + } + + P=digest_in_MD; + R=digest_out_MD5; + i=1; + while (*P) + { + rtl_digest_MD5 (*P, strlen(*P), md, sizeof(md)); + + p=pt (md, RTL_DIGEST_LENGTH_MD5); + if (strcmp (p, *R)) + { + printf("error calculating MD5 on '%s'\n",*P); + printf("got %s instead of %s\n",p,*R); + err++; + } + else + printf("test (MD5) %d ok\n",i); + i++; + R++; + P++; + } + + P=digest_in_SHA; + R=digest_out_SHA_0; + i=1; + while (*P) + { + rtl_digest_SHA (*P, strlen(*P), md, sizeof(md)); + + p=pt (md, RTL_DIGEST_LENGTH_SHA); + if (strcmp (p, *R)) + { + printf("error calculating SHA-0 on '%s'\n",*P); + printf("got %s instead of %s\n",p,*R); + err++; + } + else + printf("test (SHA-0) %d ok\n",i); + i++; + R++; + P++; + } + + memset (buffer, 'a', sizeof(buffer)); + R = &digest_bigout_SHA_0; + + Digest = rtl_digest_createSHA(); + for (i=0; i<1000; i++) + rtl_digest_updateSHA (Digest, buffer, sizeof(buffer)); + + rtl_digest_getSHA (Digest, md, sizeof(md)); + rtl_digest_destroySHA (Digest); + + p=pt (md, RTL_DIGEST_LENGTH_SHA); + if (strcmp (p, *R)) + { + printf("error calculating SHA-0 on '%s'\n",p); + printf("got %s instead of %s\n",p,*R); + err++; + } + else + printf("test (SHA-0) n ok\n"); + + P=digest_in_SHA; + R=digest_out_SHA_1; + i=1; + while (*P) + { + rtl_digest_SHA1 (*P, strlen(*P), md, sizeof(md)); + + p=pt (md, RTL_DIGEST_LENGTH_SHA1); + if (strcmp (p, *R)) + { + printf("error calculating SHA-1 on '%s'\n",*P); + printf("got %s instead of %s\n",p,*R); + err++; + } + else + printf("test (SHA-1) %d ok\n",i); + i++; + R++; + P++; + } + + memset (buffer, 'a', sizeof(buffer)); + R = &digest_bigout_SHA_1; + + Digest = rtl_digest_createSHA1(); + for (i=0; i<1000; i++) + rtl_digest_updateSHA1 (Digest, buffer, sizeof(buffer)); + + rtl_digest_getSHA1 (Digest, md, sizeof(md)); + rtl_digest_destroySHA1 (Digest); + + p=pt (md, RTL_DIGEST_LENGTH_SHA1); + if (strcmp (p, *R)) + { + printf("error calculating SHA-1 on '%s'\n",p); + printf("got %s instead of %s\n",p,*R); + err++; + } + else + printf("test (SHA-1) n ok\n"); + + + P=digest_in_HMAC_MD5; + Q=digest_key_HMAC_MD5; + R=digest_out_HMAC_MD5; + Digest = rtl_digest_createHMAC_MD5(); + i = 1; + while (*P) + { + rtl_digest_initHMAC_MD5 (Digest, *Q, strlen(*Q)); + rtl_digest_updateHMAC_MD5 (Digest, *P, strlen(*P)); + rtl_digest_getHMAC_MD5 (Digest, md, sizeof(md)); + + p=pt (md, RTL_DIGEST_LENGTH_HMAC_MD5); + if (strcmp (p, *R)) + { + printf("error calculating HMAC-MD5 on '%s'\n",*P); + printf("got %s instead of %s\n",p,*R); + err++; + } + else + printf("test (HMAC-MD5) %d ok\n",i); + i++; + R++; + P++; + Q++; + } + rtl_digest_destroyHMAC_MD5 (Digest); + + + P=digest_in_HMAC_MD5; + Q=digest_key_HMAC_MD5; + R=digest_out_HMAC_SHA1; + Digest = rtl_digest_createHMAC_SHA1(); + i = 1; + while (*P) + { + rtl_digest_initHMAC_SHA1 (Digest, *Q, strlen(*Q)); + rtl_digest_updateHMAC_SHA1 (Digest, *P, strlen(*P)); + rtl_digest_getHMAC_SHA1 (Digest, md, sizeof(md)); + + p=pt (md, RTL_DIGEST_LENGTH_HMAC_SHA1); + if (strcmp (p, *R)) + { + printf("error calculating HMAC-SHA-1 on '%s'\n",*P); + printf("got %s instead of %s\n",p,*R); + err++; + } + else + printf("test (HMAC-SHA-1) %d ok\n",i); + i++; + P++; + Q++; + R++; + } + rtl_digest_destroyHMAC_SHA1 (Digest); + + + P=digest_in_HMAC_MD5; + Q=digest_key_HMAC_MD5; + rtl_digest_PBKDF2 ( + md, RTL_DIGEST_LENGTH_MD5, /* [out] derived key */ + Q[1], strlen(Q[1]), /* [in] password */ + P[1], strlen(P[1]), /* [in] salt */ + 1000); /* [in] iteration count */ + + p=pt (md, RTL_DIGEST_LENGTH_MD5); + if (strcmp (p, "6349e09cb6b8c1485cfa9780ee3264df")) + { + printf("error calculating PBKDF2 on '%s'\n", P[1]); + err++; + } + else + printf("test (PBKDF2) %d ok\n", 1); + + return (err); +} + |