xref: /netbsd-src/crypto/external/bsd/heimdal/dist/lib/hcrypto/rctest.c (revision d3273b5b76f5afaafe308cead5511dbb8df8c5e9)
1 /*	$NetBSD: rctest.c,v 1.2 2017/01/28 21:31:47 christos Exp $	*/
2 
3 /*
4  * Copyright (c) 2004 Kungliga Tekniska Högskolan
5  * (Royal Institute of Technology, Stockholm, Sweden).
6  * 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  *
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the distribution.
18  *
19  * 3. Neither the name of the Institute nor the names of its contributors
20  *    may be used to endorse or promote products derived from this software
21  *    without specific prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
24  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
27  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33  * SUCH DAMAGE.
34  */
35 
36 #include <config.h>
37 #include <krb5/roken.h>
38 #include <rc4.h>
39 
40 static unsigned char plain1[8] =
41     { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
42 static unsigned char key1[8] =
43     { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF };
44 static unsigned char cipher1[8] =
45     { 0x74, 0x94, 0xC2, 0xE7, 0x10, 0x4B, 0x08, 0x79 };
46 
47 static unsigned char plain2[5] =
48     { 0xdc, 0xee, 0x4c, 0xf9, 0x2c };
49 static unsigned char key2[5] =
50     { 0x61, 0x8a, 0x63, 0xd2, 0xfb };
51 static unsigned char cipher2[5] =
52     { 0xf1, 0x38, 0x29, 0xc9, 0xde };
53 
54 static unsigned char plain3[] =
55     {
56 	0x52, 0x75, 0x69, 0x73, 0x6c, 0x69, 0x6e, 0x6e,
57 	0x75, 0x6e, 0x20, 0x6c, 0x61, 0x75, 0x6c, 0x75,
58 	0x20, 0x6b, 0x6f, 0x72, 0x76, 0x69, 0x73, 0x73,
59 	0x73, 0x61, 0x6e, 0x69, 0x2c, 0x20, 0x74, 0xe4,
60 	0x68, 0x6b, 0xe4, 0x70, 0xe4, 0x69, 0x64, 0x65,
61 	0x6e, 0x20, 0x70, 0xe4, 0xe4, 0x6c, 0x6c, 0xe4,
62 	0x20, 0x74, 0xe4, 0x79, 0x73, 0x69, 0x6b, 0x75,
63 	0x75, 0x2e, 0x20, 0x4b, 0x65, 0x73, 0xe4, 0x79,
64 	0xf6, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x6f, 0x6e,
65 	0x6e, 0x69, 0x20, 0x6f, 0x6d, 0x61, 0x6e, 0x61,
66 	0x6e, 0x69, 0x2c, 0x20, 0x6b, 0x61, 0x73, 0x6b,
67 	0x69, 0x73, 0x61, 0x76, 0x75, 0x75, 0x6e, 0x20,
68 	0x6c, 0x61, 0x61, 0x6b, 0x73, 0x6f, 0x74, 0x20,
69 	0x76, 0x65, 0x72, 0x68, 0x6f, 0x75, 0x75, 0x2e,
70 	0x20, 0x45, 0x6e, 0x20, 0x6d, 0x61, 0x20, 0x69,
71 	0x6c, 0x6f, 0x69, 0x74, 0x73, 0x65, 0x2c, 0x20,
72 	0x73, 0x75, 0x72, 0x65, 0x20, 0x68, 0x75, 0x6f,
73 	0x6b, 0x61, 0x61, 0x2c, 0x20, 0x6d, 0x75, 0x74,
74 	0x74, 0x61, 0x20, 0x6d, 0x65, 0x74, 0x73, 0xe4,
75 	0x6e, 0x20, 0x74, 0x75, 0x6d, 0x6d, 0x75, 0x75,
76 	0x73, 0x20, 0x6d, 0x75, 0x6c, 0x6c, 0x65, 0x20,
77 	0x74, 0x75, 0x6f, 0x6b, 0x61, 0x61, 0x2e, 0x20,
78 	0x50, 0x75, 0x75, 0x6e, 0x74, 0x6f, 0x20, 0x70,
79 	0x69, 0x6c, 0x76, 0x65, 0x6e, 0x2c, 0x20, 0x6d,
80 	0x69, 0x20, 0x68, 0x75, 0x6b, 0x6b, 0x75, 0x75,
81 	0x2c, 0x20, 0x73, 0x69, 0x69, 0x6e, 0x74, 0x6f,
82 	0x20, 0x76, 0x61, 0x72, 0x61, 0x6e, 0x20, 0x74,
83 	0x75, 0x75, 0x6c, 0x69, 0x73, 0x65, 0x6e, 0x2c,
84 	0x20, 0x6d, 0x69, 0x20, 0x6e, 0x75, 0x6b, 0x6b,
85 	0x75, 0x75, 0x2e, 0x20, 0x54, 0x75, 0x6f, 0x6b,
86 	0x73, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6e, 0x61,
87 	0x6d, 0x6f, 0x6e, 0x20, 0x6a, 0x61, 0x20, 0x76,
88 	0x61, 0x72, 0x6a, 0x6f, 0x74, 0x20, 0x76, 0x65,
89 	0x65, 0x6e, 0x2c, 0x20, 0x6e, 0x69, 0x69, 0x73,
90 	0x74, 0xe4, 0x20, 0x73, 0x79, 0x64, 0xe4, 0x6d,
91 	0x65, 0x6e, 0x69, 0x20, 0x6c, 0x61, 0x75, 0x6c,
92 	0x75, 0x6e, 0x20, 0x74, 0x65, 0x65, 0x6e, 0x2e,
93 	0x20, 0x2d, 0x20, 0x45, 0x69, 0x6e, 0x6f, 0x20,
94 	0x4c, 0x65, 0x69, 0x6e, 0x6f };
95 
96 static unsigned char key3[16] =
97     { 0x29, 0x04, 0x19, 0x72, 0xfb, 0x42, 0xba, 0x5f,
98       0xc7, 0x12, 0x77, 0x12, 0xf1, 0x38, 0x29, 0xc9 };
99 
100 const unsigned char cipher3[] =
101     { 0x35, 0x81, 0x86, 0x99, 0x90, 0x01, 0xe6, 0xb5,
102       0xda, 0xf0, 0x5e, 0xce, 0xeb, 0x7e, 0xee, 0x21,
103       0xe0, 0x68, 0x9c, 0x1f, 0x00, 0xee, 0xa8, 0x1f,
104       0x7d, 0xd2, 0xca, 0xae, 0xe1, 0xd2, 0x76, 0x3e,
105       0x68, 0xaf, 0x0e, 0xad, 0x33, 0xd6, 0x6c, 0x26,
106       0x8b, 0xc9, 0x46, 0xc4, 0x84, 0xfb, 0xe9, 0x4c,
107       0x5f, 0x5e, 0x0b, 0x86, 0xa5, 0x92, 0x79, 0xe4,
108       0xf8, 0x24, 0xe7, 0xa6, 0x40, 0xbd, 0x22, 0x32,
109       0x10, 0xb0, 0xa6, 0x11, 0x60, 0xb7, 0xbc, 0xe9,
110       0x86, 0xea, 0x65, 0x68, 0x80, 0x03, 0x59, 0x6b,
111       0x63, 0x0a, 0x6b, 0x90, 0xf8, 0xe0, 0xca, 0xf6,
112       0x91, 0x2a, 0x98, 0xeb, 0x87, 0x21, 0x76, 0xe8,
113       0x3c, 0x20, 0x2c, 0xaa, 0x64, 0x16, 0x6d, 0x2c,
114       0xce, 0x57, 0xff, 0x1b, 0xca, 0x57, 0xb2, 0x13,
115       0xf0, 0xed, 0x1a, 0xa7, 0x2f, 0xb8, 0xea, 0x52,
116       0xb0, 0xbe, 0x01, 0xcd, 0x1e, 0x41, 0x28, 0x67,
117       0x72, 0x0b, 0x32, 0x6e, 0xb3, 0x89, 0xd0, 0x11,
118       0xbd, 0x70, 0xd8, 0xaf, 0x03, 0x5f, 0xb0, 0xd8,
119       0x58, 0x9d, 0xbc, 0xe3, 0xc6, 0x66, 0xf5, 0xea,
120       0x8d, 0x4c, 0x79, 0x54, 0xc5, 0x0c, 0x3f, 0x34,
121       0x0b, 0x04, 0x67, 0xf8, 0x1b, 0x42, 0x59, 0x61,
122       0xc1, 0x18, 0x43, 0x07, 0x4d, 0xf6, 0x20, 0xf2,
123       0x08, 0x40, 0x4b, 0x39, 0x4c, 0xf9, 0xd3, 0x7f,
124       0xf5, 0x4b, 0x5f, 0x1a, 0xd8, 0xf6, 0xea, 0x7d,
125       0xa3, 0xc5, 0x61, 0xdf, 0xa7, 0x28, 0x1f, 0x96,
126       0x44, 0x63, 0xd2, 0xcc, 0x35, 0xa4, 0xd1, 0xb0,
127       0x34, 0x90, 0xde, 0xc5, 0x1b, 0x07, 0x11, 0xfb,
128       0xd6, 0xf5, 0x5f, 0x79, 0x23, 0x4d, 0x5b, 0x7c,
129       0x76, 0x66, 0x22, 0xa6, 0x6d, 0xe9, 0x2b, 0xe9,
130       0x96, 0x46, 0x1d, 0x5e, 0x4d, 0xc8, 0x78, 0xef,
131       0x9b, 0xca, 0x03, 0x05, 0x21, 0xe8, 0x35, 0x1e,
132       0x4b, 0xae, 0xd2, 0xfd, 0x04, 0xf9, 0x46, 0x73,
133       0x68, 0xc4, 0xad, 0x6a, 0xc1, 0x86, 0xd0, 0x82,
134       0x45, 0xb2, 0x63, 0xa2, 0x66, 0x6d, 0x1f, 0x6c,
135       0x54, 0x20, 0xf1, 0x59, 0x9d, 0xfd, 0x9f, 0x43,
136       0x89, 0x21, 0xc2, 0xf5, 0xa4, 0x63, 0x93, 0x8c,
137       0xe0, 0x98, 0x22, 0x65, 0xee, 0xf7, 0x01, 0x79,
138       0xbc, 0x55, 0x3f, 0x33, 0x9e, 0xb1, 0xa4, 0xc1,
139       0xaf, 0x5f, 0x6a, 0x54, 0x7f };
140 
141 int
main(void)142 main (void)
143 {
144     unsigned char buf[1024];
145     RC4_KEY key;
146 
147     RC4_set_key(&key, 8, key1);
148     RC4(&key, 8, plain1, buf);
149     if (memcmp(buf, cipher1, 8) != 0)
150 	return 1;
151 
152     RC4_set_key(&key, 5, key2);
153     RC4(&key, 5, plain2, buf);
154     if (memcmp(buf, cipher2, 5) != 0)
155 	return 1;
156 
157     RC4_set_key(&key, 16, key3);
158     RC4(&key, 309, plain3, buf);
159     if (memcmp(buf, cipher3, 309) != 0)
160 	return 1;
161 
162     return 0;
163 }
164