FastRC4 Source Code
Optimized implementation of RC4 (Rivest Cipher 4, ARCFOUR) in ASMx64.
Brought to you by:
mauricelambert
File | Date | Author | Commit |
---|---|---|---|
LICENSE.txt | 2023-03-11 |
![]() |
[2dd4b0] LICENSE |
README.md | 2024-02-24 |
![]() |
[844e91] Update README.md |
librc4.py | 2024-02-24 |
![]() |
[ce5fac] [0.0.2] Add test with lddgo.net to check RC4 al... |
rc4.asm | 2024-06-18 |
![]() |
[e62bd8] Fix: Calling convention non volatile registers |
rc4_win.asm | 2024-06-18 |
![]() |
[e62bd8] Fix: Calling convention non volatile registers |
test.c | 2023-05-05 |
![]() |
[3ef70d] [0.0.1] FastRC4 for Windows |
This RC4 implementation is not secure, it is a POC for an optimized RC4 implementation in ASM. You should never use this implementation for TLS, WEP, ... or other old protocols using RC4. You should never use it to encrypt secrets or very large file.
The RC4 algorithm validity is checked with lddgo.net API to be sure is correct.
This repository implements RC4 encryption with IV, written in ASM with few optimizations.
nasm -felf64 ARC4.asm
ld -shared ARC4.o -o librc4.so
strip librc4.so
nasm -fwin64 rc4_win.asm
gcc -shared rc4_win.obj -o librc4.dll
strip librc4.dll
char *get_iv();
void *encrypt(char *key, char *data, unsigned long long length);
void *decrypt(char *key, char iv[256], char *data, unsigned long long length);
void *generate_iv();
void *xor_key_iv();
void *generate_key(char *key);
void *arc4_null_byte(char *data);
void *arc4(char *data, unsigned long long length);
void *reset_key();
void *set_iv(char *iv);
arc4_null_byte([IN/OUT] char *data) -> NULL
arc4([IN/OUT] char *data, [IN] unsigned long long length) -> NULL
generate_iv() -> NULL
xor_key_iv() -> NULL
generate_key(char *key) -> NULL
reset_key() -> NULL
get_iv() -> char[256] // null byte terminate string
set_iv([IN] char iv[256]) -> NULL
encrypt([IN] char *key, [IN/OUT] char *data, [IN] unsigned long long length) -> NULL // if length is 0 call arc4_null_byte
decrypt([IN] char *key, [IN] char iv[256], [IN/OUT] char *data, [IN] unsigned long long length) -> NULL // there is no way to decrypt string terminating by null byte because encrypted data can contains null byte
from librc4 import RC4
rc4 = RC4(b'my key')
cipher = rc4.encrypt(b'my data')
secret = rc4.decrypt(cipher)
Licensed under the GPL, version 3.