diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libcrypto/rc4/rc4_enc.c | 64 |
1 files changed, 1 insertions, 63 deletions
diff --git a/src/lib/libcrypto/rc4/rc4_enc.c b/src/lib/libcrypto/rc4/rc4_enc.c index 57975a95ae..4dacf3f708 100644 --- a/src/lib/libcrypto/rc4/rc4_enc.c +++ b/src/lib/libcrypto/rc4/rc4_enc.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: rc4_enc.c,v 1.14 2015/10/20 15:50:13 jsing Exp $ */ | 1 | /* $OpenBSD: rc4_enc.c,v 1.15 2015/10/21 16:36:50 jsing Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -168,37 +168,6 @@ RC4(RC4_KEY *key, size_t len, const unsigned char *indata, | |||
| 168 | indata += sizeof(RC4_CHUNK); | 168 | indata += sizeof(RC4_CHUNK); |
| 169 | outdata += sizeof(RC4_CHUNK); | 169 | outdata += sizeof(RC4_CHUNK); |
| 170 | } | 170 | } |
| 171 | if (len) { | ||
| 172 | RC4_CHUNK mask = (RC4_CHUNK) - 1, ochunk; | ||
| 173 | |||
| 174 | ichunk = *(RC4_CHUNK *)indata; | ||
| 175 | ochunk = *(RC4_CHUNK *)outdata; | ||
| 176 | otp = 0; | ||
| 177 | i = BESHFT(0); | ||
| 178 | mask <<= (sizeof(RC4_CHUNK) - len) << 3; | ||
| 179 | switch (len & (sizeof(RC4_CHUNK) - 1)) { | ||
| 180 | case 7: | ||
| 181 | otp = RC4_STEP << i, i -= 8; | ||
| 182 | case 6: | ||
| 183 | otp |= RC4_STEP << i, i -= 8; | ||
| 184 | case 5: | ||
| 185 | otp |= RC4_STEP << i, i -= 8; | ||
| 186 | case 4: | ||
| 187 | otp |= RC4_STEP << i, i -= 8; | ||
| 188 | case 3: | ||
| 189 | otp |= RC4_STEP << i, i -= 8; | ||
| 190 | case 2: | ||
| 191 | otp |= RC4_STEP << i, i -= 8; | ||
| 192 | case 1: | ||
| 193 | otp |= RC4_STEP << i, i -= 8; | ||
| 194 | } | ||
| 195 | ochunk &= ~mask; | ||
| 196 | ochunk |= (otp ^ ichunk) & mask; | ||
| 197 | *(RC4_CHUNK *)outdata = ochunk; | ||
| 198 | } | ||
| 199 | key->x = x; | ||
| 200 | key->y = y; | ||
| 201 | return; | ||
| 202 | } else { /* LITTLE-ENDIAN CASE */ | 171 | } else { /* LITTLE-ENDIAN CASE */ |
| 203 | # define LESHFT(c) (((c)*8)&(sizeof(RC4_CHUNK)*8-1)) | 172 | # define LESHFT(c) (((c)*8)&(sizeof(RC4_CHUNK)*8-1)) |
| 204 | for (; len & (0 - sizeof(RC4_CHUNK)); len -= sizeof(RC4_CHUNK)) { | 173 | for (; len & (0 - sizeof(RC4_CHUNK)); len -= sizeof(RC4_CHUNK)) { |
| @@ -217,37 +186,6 @@ RC4(RC4_KEY *key, size_t len, const unsigned char *indata, | |||
| 217 | indata += sizeof(RC4_CHUNK); | 186 | indata += sizeof(RC4_CHUNK); |
| 218 | outdata += sizeof(RC4_CHUNK); | 187 | outdata += sizeof(RC4_CHUNK); |
| 219 | } | 188 | } |
| 220 | if (len) { | ||
| 221 | RC4_CHUNK mask = (RC4_CHUNK) - 1, ochunk; | ||
| 222 | |||
| 223 | ichunk = *(RC4_CHUNK *)indata; | ||
| 224 | ochunk = *(RC4_CHUNK *)outdata; | ||
| 225 | otp = 0; | ||
| 226 | i = 0; | ||
| 227 | mask >>= (sizeof(RC4_CHUNK) - len) << 3; | ||
| 228 | switch (len&(sizeof(RC4_CHUNK) - 1)) { | ||
| 229 | case 7: | ||
| 230 | otp = RC4_STEP, i += 8; | ||
| 231 | case 6: | ||
| 232 | otp |= RC4_STEP << i, i += 8; | ||
| 233 | case 5: | ||
| 234 | otp |= RC4_STEP << i, i += 8; | ||
| 235 | case 4: | ||
| 236 | otp |= RC4_STEP << i, i += 8; | ||
| 237 | case 3: | ||
| 238 | otp |= RC4_STEP << i, i += 8; | ||
| 239 | case 2: | ||
| 240 | otp |= RC4_STEP << i, i += 8; | ||
| 241 | case 1: | ||
| 242 | otp |= RC4_STEP << i, i += 8; | ||
| 243 | } | ||
| 244 | ochunk &= ~mask; | ||
| 245 | ochunk |= (otp ^ ichunk) & mask; | ||
| 246 | *(RC4_CHUNK *)outdata = ochunk; | ||
| 247 | } | ||
| 248 | key->x = x; | ||
| 249 | key->y = y; | ||
| 250 | return; | ||
| 251 | } | 189 | } |
| 252 | } | 190 | } |
| 253 | #endif | 191 | #endif |
