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