View Source
CtrDrbg
A pure Elixir implementation of the CTR_DRBG PRNG algorithm.
Supported Functionality
- Ciphers
- [x] AES-128
- [ ] AES-192
- [ ] AES-256
- [ ] Triple DES
- [x] Personalization string
- [ ] Reseeding counter
- [ ] Prediction resistance
- [ ] Derivation function
- [ ] Security strength option
Installation
Add ctr_drbg
to your list of dependencies in mix.exs
:
def deps do
[
{:ctr_drbg, "~> 0.1.0"}
]
end
Docs can be found at https://hexdocs.pm/ctr_drbg.
Tests
The test vectors under text/fixtures
were retrieved from the NIST's Cryptographic
Algorithm Validation Program (drbgvectors_pr_false/CTR_DRBG.rsp
in the drbgtestvectors.zip
archive).
Benchmarks
$> mix benchmark
Generated ctr_drbg app
Operating System: macOS
CPU Information: Apple M1 Max
Number of Available Cores: 10
Available memory: 32 GB
Elixir 1.15.4
Erlang 26.0.2
Benchmark suite executing with the following configuration:
warmup: 2 s
time: 5 s
memory time: 0 ns
reduction time: 0 ns
parallel: 1
inputs: 16 bytes, 32 bytes, 64 bytes
Estimated total run time: 21 s
Benchmarking CtrDrbg.generate/2 with input 16 bytes ...
Benchmarking CtrDrbg.generate/2 with input 32 bytes ...
Benchmarking CtrDrbg.generate/2 with input 64 bytes ...
##### With input 16 bytes #####
Name ips average deviation median 99th %
CtrDrbg.generate/2 427.59 K 2.34 μs ±2044.84% 1.54 μs 3.58 μs
##### With input 32 bytes #####
Name ips average deviation median 99th %
CtrDrbg.generate/2 401.58 K 2.49 μs ±978.15% 1.92 μs 4.79 μs
##### With input 64 bytes #####
Name ips average deviation median 99th %
CtrDrbg.generate/2 278.11 K 3.60 μs ±558.63% 2.83 μs 7.25 μs