https://github.com/jedisct1/aes-stream
A fast AES-PRF based secure random-number generator
https://github.com/jedisct1/aes-stream
aes aes-128 aes-256 csprng drbg prg random
Last synced: 11 months ago
JSON representation
A fast AES-PRF based secure random-number generator
- Host: GitHub
- URL: https://github.com/jedisct1/aes-stream
- Owner: jedisct1
- License: bsd-2-clause
- Created: 2017-10-28T23:34:17.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2023-07-15T18:57:54.000Z (over 2 years ago)
- Last Synced: 2025-03-28T20:46:44.886Z (12 months ago)
- Topics: aes, aes-128, aes-256, csprng, drbg, prg, random
- Language: C
- Homepage:
- Size: 18.6 KB
- Stars: 19
- Watchers: 3
- Forks: 6
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-cpp - aes-stream - A fast AES-based stream cipher for C. [ISC] (Cryptography)
- fucking-awesome-cpp - aes-stream - A fast AES-based stream cipher for C. [ISC] (Cryptography)
- awesome-cpp-with-stars - aes-stream - based stream cipher for C. [ISC] | 2023-07-15 | (Cryptography)
README
AES-STREAM
==========
A simple, but fast AES-PRF-based random number generator.
Fast, designed to fill large buffers with random data.
Does fast key erasure.
Requires a modern Intel or AMD CPU with AES-NI support.
API
===
Pretty straightforward:
```c
#include "aes-stream.h"
#define AES_STREAM_SEEDBYTES 32
void aes_stream_init(aes_stream_state *st, const unsigned char seed[AES_STREAM_SEEDBYTES]);
void aes_stream(aes_stream_state *st, unsigned char *buf, size_t buf_len);
```
Call `aes_stream_init()` with a seed, then `aes_stream()` to fill
`buf` with `buf_len` random bytes.
`aes_stream()` can be called indefinitely without having to reseed the
generator.
Compilation
===========
Do not forget to tell your compiler to enable support for AES opcodes
with the `-maes` flag.
Recommended: `-Ofast -maes -march=native`
Clang 7 appears to produce faster code than gcc 8.
Key erasure is performed after every call to `stream()`. If you are
dealing with many short keys, implement a pool on top of this.
Uses AES-128 by default. Define `AES_STREAM_ROUNDS=14` in order to use
AES-256 instead.
References
==========
* [Cryptanalysis of AES-PRF and its Dual](https://tosc.iacr.org/index.php/ToSC/article/view/892/843)
(Patrick Derbez, Tetsu Iwata, Ling Sun, Siwei Sun, Yosuke Todo, Haoyang Wang and Meiqin Wang)
* [Optimal PRFs from blockcipher designs](https://eprint.iacr.org/2017/812.pdf)
(Bart Mennink and Samuel Neves)
* [Fast-key-erasure random-number generators](https://blog.cr.yp.to/20170723-random.html)
(Daniel J. Bernstein)