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