Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "arc4.h"
- void arc4_init(arc4_state *state, const uint8_t *key, size_t keylen) {
- for (int_fast16_t i = 0; i < 256; i++) {
- state->s[i] = (uint8_t)i;
- }
- state->x = 0;
- state->y = 0;
- uint8_t j = 0;
- for (int_fast16_t i = 0; i < 256; i++) {
- j += state->s[i] + key[i % keylen];
- uint8_t k = state->s[i];
- state->s[i] = state->s[j];
- state->s[j] = k;
- }
- }
- void arc4_crypt(arc4_state *state, uint8_t *buf, size_t buflen) {
- uint8_t x = state->x;
- uint8_t y = state->y;
- uint8_t *s = state->s;
- for (size_t i = 0; i < buflen; i++) {
- x++;
- y += s[x];
- uint8_t sx = s[x];
- uint8_t sy = s[y];
- s[x] = sy;
- s[y] = sx;
- buf[i] ^= s[(sx + sy) & 0xFF];
- }
- state->x = x;
- state->y = y;
- }
Add Comment
Please, Sign In to add comment