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