1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* crypto/hmac/hmactest.c */
2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * All rights reserved.
4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This package is an SSL implementation written
6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * by Eric Young (eay@cryptsoft.com).
7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The implementation was written so as to conform with Netscapes SSL.
8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This library is free for commercial and non-commercial use as long as
10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the following conditions are aheared to.  The following conditions
11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * apply to all code found in this distribution, be it the RC4, RSA,
12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * included with this distribution is covered by the same copyright terms
14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Copyright remains Eric Young's, and as such any Copyright notices in
17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the code are not to be removed.
18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * If this package is used in a product, Eric Young should be given attribution
19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * as the author of the parts of the library used.
20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This can be in the form of a textual message at program startup or
21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * in documentation (online or textual) provided with the package.
22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Redistribution and use in source and binary forms, with or without
24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * modification, are permitted provided that the following conditions
25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * are met:
26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 1. Redistributions of source code must retain the copyright
27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    notice, this list of conditions and the following disclaimer.
28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    documentation and/or other materials provided with the distribution.
31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 3. All advertising materials mentioning features or use of this software
32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    must display the following acknowledgement:
33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    "This product includes cryptographic software written by
34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *     Eric Young (eay@cryptsoft.com)"
35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    The word 'cryptographic' can be left out if the rouines from the library
36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    being used are not cryptographic related :-).
37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 4. If you include any Windows specific code (or a derivative thereof) from
38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    the apps directory (application code) you must include an acknowledgement:
39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SUCH DAMAGE.
52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The licence and distribution terms for any publically available version or
54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * derivative of this code cannot be changed.  i.e. this code cannot simply be
55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * copied and put under another distribution licence
56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * [including the GNU Public Licence.]
57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdio.h>
60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <string.h>
61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdlib.h>
62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "../e_os.h"
64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef OPENSSL_NO_HMAC
66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint main(int argc, char *argv[])
67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{
68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    printf("No HMAC support\n");
69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    return(0);
70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}
71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else
72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/hmac.h>
73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef OPENSSL_NO_MD5
74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/md5.h>
75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef CHARSET_EBCDIC
78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/ebcdic.h>
79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef OPENSSL_NO_MD5
82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic struct test_st
83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char key[16];
85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	int key_len;
86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char data[64];
87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	int data_len;
88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char *digest;
89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	} test[4]={
90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{	"",
91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		0,
92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		"More text test vectors to stuff up EBCDIC machines :-)",
93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		54,
94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		(unsigned char *)"e9139d1e6ee064ef8cf514fc7dc83e86",
95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	},{	{0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,
96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		 0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,},
97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		16,
98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		"Hi There",
99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		8,
100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		(unsigned char *)"9294727a3638bb1c13f48ef8158bfc9d",
101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	},{	"Jefe",
102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		4,
103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		"what do ya want for nothing?",
104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		28,
105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		(unsigned char *)"750c783e6ab0b503eaa86e310a5db738",
106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	},{
107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,},
109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		16,
110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,
111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		 0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,
112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		 0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,
113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		 0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,
114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		 0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,
115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		 0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,
116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		 0xdd,0xdd},
117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		50,
118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		(unsigned char *)"56be34521d144c88dbb8c733f0e8b3f6",
119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	},
120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	};
121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic char *pt(unsigned char *md);
124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint main(int argc, char *argv[])
125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef OPENSSL_NO_MD5
127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	int i;
128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	char *p;
129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	int err=0;
131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef OPENSSL_NO_MD5
133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	printf("test skipped: MD5 disabled\n");
134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else
135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef CHARSET_EBCDIC
137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ebcdic2ascii(test[0].data, test[0].data, test[0].data_len);
138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ebcdic2ascii(test[1].data, test[1].data, test[1].data_len);
139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ebcdic2ascii(test[2].key,  test[2].key,  test[2].key_len);
140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ebcdic2ascii(test[2].data, test[2].data, test[2].data_len);
141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	for (i=0; i<4; i++)
144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		p=pt(HMAC(EVP_md5(),
146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			test[i].key, test[i].key_len,
147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			test[i].data, test[i].data_len,
148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			NULL,NULL));
149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		if (strcmp(p,(char *)test[i].digest) != 0)
151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			{
152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			printf("error calculating HMAC on %d entry'\n",i);
153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			printf("got %s instead of %s\n",p,test[i].digest);
154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			err++;
155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			}
156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		else
157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			printf("test %d ok\n",i);
158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif /* OPENSSL_NO_MD5 */
160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	EXIT(err);
161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return(0);
162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef OPENSSL_NO_MD5
165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic char *pt(unsigned char *md)
166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	int i;
168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	static char buf[80];
169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	for (i=0; i<MD5_DIGEST_LENGTH; i++)
171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		sprintf(&(buf[i*2]),"%02x",md[i]);
172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return(buf);
173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
176