📄 rc4_enc.c.org
字号:
/* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING * * Always modify rc4_enc.org since rc4_enc.c is automatically generated from * it during SSLeay configuration. * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING */#include "rc4.h"/* if this is defined data[i] is used instead of *data, this is a %20 * speedup on x86 */#define RC4_INDEXchar *RC4_version="RC4 part of SSLeay 0.8.1 19-Jul-1997";char *RC4_options() {#ifdef RC4_INDEX if (sizeof(RC4_INT) == 1) return("rc4(idx,char)"); else return("rc4(idx,int)");#else if (sizeof(RC4_INT) == 1) return("rc4(ptr,char)"); else return("rc4(ptr,int)");#endif }/* RC4 as implemented from a posting from * Newsgroups: sci.crypt * From: sterndark@netcom.com (David Sterndark) * Subject: RC4 Algorithm revealed. * Message-ID: <sternCvKL4B.Hyy@netcom.com> * Date: Wed, 14 Sep 1994 06:35:31 GMT */void RC4_set_key(key, len, data)RC4_KEY *key;int len;register unsigned char *data; { register RC4_INT tmp; register int id1,id2; register RC4_INT *d; unsigned int i; d= &(key->data[0]); for (i=0; i<256; i++) d[i]=i; key->x = 0; key->y = 0; id1=id2=0; #define SK_LOOP(n) { \ tmp=d[(n)]; \ id2 = (data[id1] + tmp + id2) & 0xff; \ if (++id1 == len) id1=0; \ d[(n)]=d[id2]; \ d[id2]=tmp; } for (i=0; i < 256; i+=4) { SK_LOOP(i+0); SK_LOOP(i+1); SK_LOOP(i+2); SK_LOOP(i+3); } } void RC4(key, len, indata, outdata)RC4_KEY *key;unsigned long len;unsigned char *indata;unsigned char *outdata; { register RC4_INT *d; register RC4_INT x,y,tx,ty; int 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);#ifndef RC4_INDEX#define RC4_LOOP(a,b,i) LOOP(*((a)++),*((b)++))#else#define RC4_LOOP(a,b,i) LOOP(a[i],b[i])#endif i= -(int)len; i=(int)(len>>3L); if (i) { for (;;) { RC4_LOOP(indata,outdata,0); RC4_LOOP(indata,outdata,1); RC4_LOOP(indata,outdata,2); RC4_LOOP(indata,outdata,3); RC4_LOOP(indata,outdata,4); RC4_LOOP(indata,outdata,5); RC4_LOOP(indata,outdata,6); RC4_LOOP(indata,outdata,7);#ifdef RC4_INDEX indata+=8; outdata+=8;#endif if (--i == 0) break; } } i=(int)len&0x07; if (i) { for (;;) { RC4_LOOP(indata,outdata,0); if (--i == 0) break; RC4_LOOP(indata,outdata,1); if (--i == 0) break; RC4_LOOP(indata,outdata,2); if (--i == 0) break; RC4_LOOP(indata,outdata,3); if (--i == 0) break; RC4_LOOP(indata,outdata,4); if (--i == 0) break; RC4_LOOP(indata,outdata,5); if (--i == 0) break; RC4_LOOP(indata,outdata,6); if (--i == 0) break; } } key->x=x; key->y=y; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -