OLD | NEW |
1 /* | 1 /* |
2 * desblapi.c | 2 * desblapi.c |
3 * | 3 * |
4 * core source file for DES-150 library | 4 * core source file for DES-150 library |
5 * Implement DES Modes of Operation and Triple-DES. | 5 * Implement DES Modes of Operation and Triple-DES. |
6 * Adapt DES-150 to blapi API. | 6 * Adapt DES-150 to blapi API. |
7 * | 7 * |
8 * This Source Code Form is subject to the terms of the Mozilla Public | 8 * This Source Code Form is subject to the terms of the Mozilla Public |
9 * License, v. 2.0. If a copy of the MPL was not distributed with this | 9 * License, v. 2.0. If a copy of the MPL was not distributed with this |
10 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | 10 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
11 | 11 |
12 #ifdef FREEBL_NO_DEPEND | 12 #ifdef FREEBL_NO_DEPEND |
13 #include "stubs.h" | 13 #include "stubs.h" |
14 #endif | 14 #endif |
15 | 15 |
16 #include "des.h" | 16 #include "des.h" |
17 #include <stddef.h> | 17 #include <stddef.h> |
18 #include "secerr.h" | 18 #include "secerr.h" |
19 | 19 |
20 #if defined(NSS_X86_OR_X64) | 20 #if defined(NSS_X86_OR_X64) |
21 /* Intel X86 CPUs do unaligned loads and stores without complaint. */ | 21 /* Intel X86 CPUs do unaligned loads and stores without complaint. */ |
22 #define COPY8B(to, from, ptr) \ | 22 #define COPY8B(to, from, ptr) \ |
23 HALFPTR(to)[0] = HALFPTR(from)[0]; \ | 23 HALFPTR(to)[0] = HALFPTR(from)[0]; \ |
24 HALFPTR(to)[1] = HALFPTR(from)[1]; | 24 HALFPTR(to)[1] = HALFPTR(from)[1]; |
25 #elif defined(USE_MEMCPY) | 25 #else |
26 #define COPY8B(to, from, ptr) memcpy(to, from, 8) | 26 #define COPY8B(to, from, ptr) memcpy(to, from, 8) |
27 #else | |
28 #define COPY8B(to, from, ptr) \ | |
29 if (((ptrdiff_t)(ptr) & 0x3) == 0) { \ | |
30 HALFPTR(to)[0] = HALFPTR(from)[0]; \ | |
31 HALFPTR(to)[1] = HALFPTR(from)[1]; \ | |
32 } else if (((ptrdiff_t)(ptr) & 0x1) == 0) { \ | |
33 SHORTPTR(to)[0] = SHORTPTR(from)[0]; \ | |
34 SHORTPTR(to)[1] = SHORTPTR(from)[1]; \ | |
35 SHORTPTR(to)[2] = SHORTPTR(from)[2]; \ | |
36 SHORTPTR(to)[3] = SHORTPTR(from)[3]; \ | |
37 } else { \ | |
38 BYTEPTR(to)[0] = BYTEPTR(from)[0]; \ | |
39 BYTEPTR(to)[1] = BYTEPTR(from)[1]; \ | |
40 BYTEPTR(to)[2] = BYTEPTR(from)[2]; \ | |
41 BYTEPTR(to)[3] = BYTEPTR(from)[3]; \ | |
42 BYTEPTR(to)[4] = BYTEPTR(from)[4]; \ | |
43 BYTEPTR(to)[5] = BYTEPTR(from)[5]; \ | |
44 BYTEPTR(to)[6] = BYTEPTR(from)[6]; \ | |
45 BYTEPTR(to)[7] = BYTEPTR(from)[7]; \ | |
46 } | |
47 #endif | 27 #endif |
48 #define COPY8BTOHALF(to, from) COPY8B(to, from, from) | 28 #define COPY8BTOHALF(to, from) COPY8B(to, from, from) |
49 #define COPY8BFROMHALF(to, from) COPY8B(to, from, to) | 29 #define COPY8BFROMHALF(to, from) COPY8B(to, from, to) |
50 | 30 |
51 static void | 31 static void |
52 DES_ECB(DESContext *cx, BYTE *out, const BYTE *in, unsigned int len) | 32 DES_ECB(DESContext *cx, BYTE *out, const BYTE *in, unsigned int len) |
53 { | 33 { |
54 while (len) { | 34 while (len) { |
55 DES_Do1Block(cx->ks0, in, out); | 35 DES_Do1Block(cx->ks0, in, out); |
56 len -= 8; | 36 len -= 8; |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
264 cx->direction != DES_DECRYPT) { | 244 cx->direction != DES_DECRYPT) { |
265 PORT_SetError(SEC_ERROR_INVALID_ARGS); | 245 PORT_SetError(SEC_ERROR_INVALID_ARGS); |
266 return SECFailure; | 246 return SECFailure; |
267 } | 247 } |
268 | 248 |
269 cx->worker(cx, out, in, inLen); | 249 cx->worker(cx, out, in, inLen); |
270 if (outLen) | 250 if (outLen) |
271 *outLen = inLen; | 251 *outLen = inLen; |
272 return SECSuccess; | 252 return SECSuccess; |
273 } | 253 } |
OLD | NEW |