Coverage Report

Created: 2025-12-10 06:24

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/openssl/crypto/rc2/rc2_skey.c
Line
Count
Source
1
/*
2
 * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved.
3
 *
4
 * Licensed under the Apache License 2.0 (the "License").  You may not use
5
 * this file except in compliance with the License.  You can obtain a copy
6
 * in the file LICENSE in the source distribution or at
7
 * https://www.openssl.org/source/license.html
8
 */
9
10
/*
11
 * RC2 low level APIs are deprecated for public use, but still ok for internal
12
 * use.
13
 */
14
#include "internal/deprecated.h"
15
16
#include <openssl/rc2.h>
17
#include "rc2_local.h"
18
19
static const unsigned char key_table[256] = {
20
    0xd9,
21
    0x78,
22
    0xf9,
23
    0xc4,
24
    0x19,
25
    0xdd,
26
    0xb5,
27
    0xed,
28
    0x28,
29
    0xe9,
30
    0xfd,
31
    0x79,
32
    0x4a,
33
    0xa0,
34
    0xd8,
35
    0x9d,
36
    0xc6,
37
    0x7e,
38
    0x37,
39
    0x83,
40
    0x2b,
41
    0x76,
42
    0x53,
43
    0x8e,
44
    0x62,
45
    0x4c,
46
    0x64,
47
    0x88,
48
    0x44,
49
    0x8b,
50
    0xfb,
51
    0xa2,
52
    0x17,
53
    0x9a,
54
    0x59,
55
    0xf5,
56
    0x87,
57
    0xb3,
58
    0x4f,
59
    0x13,
60
    0x61,
61
    0x45,
62
    0x6d,
63
    0x8d,
64
    0x09,
65
    0x81,
66
    0x7d,
67
    0x32,
68
    0xbd,
69
    0x8f,
70
    0x40,
71
    0xeb,
72
    0x86,
73
    0xb7,
74
    0x7b,
75
    0x0b,
76
    0xf0,
77
    0x95,
78
    0x21,
79
    0x22,
80
    0x5c,
81
    0x6b,
82
    0x4e,
83
    0x82,
84
    0x54,
85
    0xd6,
86
    0x65,
87
    0x93,
88
    0xce,
89
    0x60,
90
    0xb2,
91
    0x1c,
92
    0x73,
93
    0x56,
94
    0xc0,
95
    0x14,
96
    0xa7,
97
    0x8c,
98
    0xf1,
99
    0xdc,
100
    0x12,
101
    0x75,
102
    0xca,
103
    0x1f,
104
    0x3b,
105
    0xbe,
106
    0xe4,
107
    0xd1,
108
    0x42,
109
    0x3d,
110
    0xd4,
111
    0x30,
112
    0xa3,
113
    0x3c,
114
    0xb6,
115
    0x26,
116
    0x6f,
117
    0xbf,
118
    0x0e,
119
    0xda,
120
    0x46,
121
    0x69,
122
    0x07,
123
    0x57,
124
    0x27,
125
    0xf2,
126
    0x1d,
127
    0x9b,
128
    0xbc,
129
    0x94,
130
    0x43,
131
    0x03,
132
    0xf8,
133
    0x11,
134
    0xc7,
135
    0xf6,
136
    0x90,
137
    0xef,
138
    0x3e,
139
    0xe7,
140
    0x06,
141
    0xc3,
142
    0xd5,
143
    0x2f,
144
    0xc8,
145
    0x66,
146
    0x1e,
147
    0xd7,
148
    0x08,
149
    0xe8,
150
    0xea,
151
    0xde,
152
    0x80,
153
    0x52,
154
    0xee,
155
    0xf7,
156
    0x84,
157
    0xaa,
158
    0x72,
159
    0xac,
160
    0x35,
161
    0x4d,
162
    0x6a,
163
    0x2a,
164
    0x96,
165
    0x1a,
166
    0xd2,
167
    0x71,
168
    0x5a,
169
    0x15,
170
    0x49,
171
    0x74,
172
    0x4b,
173
    0x9f,
174
    0xd0,
175
    0x5e,
176
    0x04,
177
    0x18,
178
    0xa4,
179
    0xec,
180
    0xc2,
181
    0xe0,
182
    0x41,
183
    0x6e,
184
    0x0f,
185
    0x51,
186
    0xcb,
187
    0xcc,
188
    0x24,
189
    0x91,
190
    0xaf,
191
    0x50,
192
    0xa1,
193
    0xf4,
194
    0x70,
195
    0x39,
196
    0x99,
197
    0x7c,
198
    0x3a,
199
    0x85,
200
    0x23,
201
    0xb8,
202
    0xb4,
203
    0x7a,
204
    0xfc,
205
    0x02,
206
    0x36,
207
    0x5b,
208
    0x25,
209
    0x55,
210
    0x97,
211
    0x31,
212
    0x2d,
213
    0x5d,
214
    0xfa,
215
    0x98,
216
    0xe3,
217
    0x8a,
218
    0x92,
219
    0xae,
220
    0x05,
221
    0xdf,
222
    0x29,
223
    0x10,
224
    0x67,
225
    0x6c,
226
    0xba,
227
    0xc9,
228
    0xd3,
229
    0x00,
230
    0xe6,
231
    0xcf,
232
    0xe1,
233
    0x9e,
234
    0xa8,
235
    0x2c,
236
    0x63,
237
    0x16,
238
    0x01,
239
    0x3f,
240
    0x58,
241
    0xe2,
242
    0x89,
243
    0xa9,
244
    0x0d,
245
    0x38,
246
    0x34,
247
    0x1b,
248
    0xab,
249
    0x33,
250
    0xff,
251
    0xb0,
252
    0xbb,
253
    0x48,
254
    0x0c,
255
    0x5f,
256
    0xb9,
257
    0xb1,
258
    0xcd,
259
    0x2e,
260
    0xc5,
261
    0xf3,
262
    0xdb,
263
    0x47,
264
    0xe5,
265
    0xa5,
266
    0x9c,
267
    0x77,
268
    0x0a,
269
    0xa6,
270
    0x20,
271
    0x68,
272
    0xfe,
273
    0x7f,
274
    0xc1,
275
    0xad,
276
};
277
278
#if defined(_MSC_VER) && defined(_ARM_)
279
#pragma optimize("g", off)
280
#endif
281
282
/*
283
 * It has come to my attention that there are 2 versions of the RC2 key
284
 * schedule.  One which is normal, and another which has a hook to use a
285
 * reduced key length. BSAFE uses the latter version.  What I previously
286
 * shipped is the same as specifying 1024 for the 'bits' parameter.  Bsafe
287
 * uses a version where the bits parameter is the same as len*8
288
 */
289
void RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, int bits)
290
0
{
291
0
    int i, j;
292
0
    unsigned char *k;
293
0
    RC2_INT *ki;
294
0
    unsigned int c, d;
295
296
0
    k = (unsigned char *)&(key->data[0]);
297
0
    *k = 0; /* for if there is a zero length key */
298
299
0
    if (len > 128)
300
0
        len = 128;
301
0
    if (bits <= 0)
302
0
        bits = 1024;
303
0
    if (bits > 1024)
304
0
        bits = 1024;
305
306
0
    for (i = 0; i < len; i++)
307
0
        k[i] = data[i];
308
309
    /* expand table */
310
0
    d = k[len - 1];
311
0
    j = 0;
312
0
    for (i = len; i < 128; i++, j++) {
313
0
        d = key_table[(k[j] + d) & 0xff];
314
0
        k[i] = d;
315
0
    }
316
317
    /* hmm.... key reduction to 'bits' bits */
318
319
0
    j = (bits + 7) >> 3;
320
0
    i = 128 - j;
321
0
    c = (0xff >> (-bits & 0x07));
322
323
0
    d = key_table[k[i] & c];
324
0
    k[i] = d;
325
0
    while (i--) {
326
0
        d = key_table[k[i + j] ^ d];
327
0
        k[i] = d;
328
0
    }
329
330
    /* copy from bytes into RC2_INT's */
331
0
    ki = &(key->data[63]);
332
0
    for (i = 127; i >= 0; i -= 2)
333
0
        *(ki--) = ((k[i] << 8) | k[i - 1]) & 0xffff;
334
0
}
335
336
#if defined(_MSC_VER)
337
#pragma optimize("", on)
338
#endif