1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * (C) Copyright 2015 Google, Inc 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * (C) Copyright 2008-2014 Rockchip Electronics 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * Rivest Cipher 4 (RC4) implementation 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 9*4882a593Smuzhiyun */ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #ifndef USE_HOSTCC 12*4882a593Smuzhiyun #include <common.h> 13*4882a593Smuzhiyun #endif 14*4882a593Smuzhiyun #include <rc4.h> 15*4882a593Smuzhiyun rc4_encode(unsigned char * buf,unsigned int len,unsigned char key[16])16*4882a593Smuzhiyunvoid rc4_encode(unsigned char *buf, unsigned int len, unsigned char key[16]) 17*4882a593Smuzhiyun { 18*4882a593Smuzhiyun unsigned char s[256], k[256], temp; 19*4882a593Smuzhiyun unsigned short i, j, t; 20*4882a593Smuzhiyun int ptr; 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun j = 0; 23*4882a593Smuzhiyun for (i = 0; i < 256; i++) { 24*4882a593Smuzhiyun s[i] = (unsigned char)i; 25*4882a593Smuzhiyun j &= 0x0f; 26*4882a593Smuzhiyun k[i] = key[j]; 27*4882a593Smuzhiyun j++; 28*4882a593Smuzhiyun } 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun j = 0; 31*4882a593Smuzhiyun for (i = 0; i < 256; i++) { 32*4882a593Smuzhiyun j = (j + s[i] + k[i]) % 256; 33*4882a593Smuzhiyun temp = s[i]; 34*4882a593Smuzhiyun s[i] = s[j]; 35*4882a593Smuzhiyun s[j] = temp; 36*4882a593Smuzhiyun } 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun i = 0; 39*4882a593Smuzhiyun j = 0; 40*4882a593Smuzhiyun for (ptr = 0; ptr < len; ptr++) { 41*4882a593Smuzhiyun i = (i + 1) % 256; 42*4882a593Smuzhiyun j = (j + s[i]) % 256; 43*4882a593Smuzhiyun temp = s[i]; 44*4882a593Smuzhiyun s[i] = s[j]; 45*4882a593Smuzhiyun s[j] = temp; 46*4882a593Smuzhiyun t = (s[i] + (s[j] % 256)) % 256; 47*4882a593Smuzhiyun buf[ptr] = buf[ptr] ^ s[t]; 48*4882a593Smuzhiyun } 49*4882a593Smuzhiyun } 50