1 /* ISC license. */
2 /* Thanks to Thomas Pornin <pornin@bolet.org> */
3 
4 #include <skalibs/bytestr.h>
5 #include <skalibs/rc4.h>
6 
rc4(RC4Schedule * r,char const * in,char * out,size_t n)7 void rc4 (RC4Schedule *r, char const *in, char *out, size_t n)
8 {
9   size_t i = 0 ;
10   for (; i < n ; i++)
11   {
12     unsigned char t ;
13     r->x = T8(r->x + 1) ;
14     t = r->tab[r->x] ;
15     r->y = T8(r->y + t) ;
16     r->tab[r->x] = r->tab[r->y] ;
17     r->tab[r->y] = t ;
18     out[i] = (unsigned char)in[i] ^ T8(r->tab[r->x] + r->tab[r->y]) ;
19   }
20 }
21