void rc4()

in rc4.c [9:32]


void rc4(const uint8_t *key, size_t key_len, uint8_t *data, size_t data_len) {
  uint8_t S[256];
  uint32_t i = 0;
  uint32_t j = 0;
  uint32_t t = 0;
  uint32_t k = 0;

  for (i = 0; i < 256; i++) {
    S[i] = i;
  }

  for (i = j = 0; i < 256; i++) {
    j = (j + S[i] + key[i % key_len]) % 256;
    swap(&S[i], &S[j]);
  }

  for (i = j = t = 0; t < data_len; t++) {
    i = (i + 1) % 256;
    j = (j + S[i]) % 256;
    swap(&S[i], &S[j]);
    k = S[(S[i] + S[j]) % 256];
    data[t] ^= k;
  }
}