From aa4d426b4d3527d7e166df1a05058c9a4a0f6683 Mon Sep 17 00:00:00 2001 From: Wojtek Kosior Date: Fri, 30 Apr 2021 00:33:56 +0200 Subject: initial/final commit --- openssl-1.1.0h/crypto/rc4/rc4_enc.c | 86 +++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 openssl-1.1.0h/crypto/rc4/rc4_enc.c (limited to 'openssl-1.1.0h/crypto/rc4/rc4_enc.c') diff --git a/openssl-1.1.0h/crypto/rc4/rc4_enc.c b/openssl-1.1.0h/crypto/rc4/rc4_enc.c new file mode 100644 index 0000000..be11bad --- /dev/null +++ b/openssl-1.1.0h/crypto/rc4/rc4_enc.c @@ -0,0 +1,86 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include +#include "rc4_locl.h" + +/*- + * RC4 as implemented from a posting from + * Newsgroups: sci.crypt + * From: sterndark@netcom.com (David Sterndark) + * Subject: RC4 Algorithm revealed. + * Message-ID: + * Date: Wed, 14 Sep 1994 06:35:31 GMT + */ + +void RC4(RC4_KEY *key, size_t len, const unsigned char *indata, + unsigned char *outdata) +{ + register RC4_INT *d; + register RC4_INT x, y, tx, ty; + size_t i; + + x = key->x; + y = key->y; + d = key->data; + +#define LOOP(in,out) \ + x=((x+1)&0xff); \ + tx=d[x]; \ + y=(tx+y)&0xff; \ + d[x]=ty=d[y]; \ + d[y]=tx; \ + (out) = d[(tx+ty)&0xff]^ (in); + + i = len >> 3; + if (i) { + for (;;) { + LOOP(indata[0], outdata[0]); + LOOP(indata[1], outdata[1]); + LOOP(indata[2], outdata[2]); + LOOP(indata[3], outdata[3]); + LOOP(indata[4], outdata[4]); + LOOP(indata[5], outdata[5]); + LOOP(indata[6], outdata[6]); + LOOP(indata[7], outdata[7]); + indata += 8; + outdata += 8; + if (--i == 0) + break; + } + } + i = len & 0x07; + if (i) { + for (;;) { + LOOP(indata[0], outdata[0]); + if (--i == 0) + break; + LOOP(indata[1], outdata[1]); + if (--i == 0) + break; + LOOP(indata[2], outdata[2]); + if (--i == 0) + break; + LOOP(indata[3], outdata[3]); + if (--i == 0) + break; + LOOP(indata[4], outdata[4]); + if (--i == 0) + break; + LOOP(indata[5], outdata[5]); + if (--i == 0) + break; + LOOP(indata[6], outdata[6]); + if (--i == 0) + break; + } + } + key->x = x; + key->y = y; +} -- cgit v1.2.3