deuterium - A modern cryptography library.
Yawning Angel (yawning at schwanenlied dot me)
A modern cryptography library for the D language, mostly written because I'm
rage-quitting Go for my pet projects. This is being used primarily as an
excuse to learn D well.
Supported Primitives:
- Cryptographic pseudo-random number generation
- ChaCha20 based CSPRNG backed by OS entropy
- Raw OS entropy
- ECC
- Message Authentication Codes
- Stream ciphers
Planned Primitives:
- Block ciphers
- ECC
- Ed25519
- (Maybe) X448
- (Maybe) P-256
- Hash functions
- Stream ciphers
- AE
- NaCl style boxes (Poly1305/XChaCha20)
- AEAD
- AEZv5
- HS1-SIV
- Poly1305ChaCha20
- PQ Primitives
- NewHope-Simple
- SPHINCS-256
Notes:
- Most people will probably be happier calling OpenSSL or libsodium.
- All primitives are written to be immune to timing side-channel attacks,
though some utility functions are not.
- Correct, maintainable, fast in decreasing order of importance.
- Where possible, established implementations have been used as the basis
of deuterium's implementations.
- Performance tuning is centered around the assumption that LDC is used
when building for performance, and that a modern 64 bit Intel system with
at least SSSE3 is the target. In particular the library makes liberal use
of LDC's capability to inline LLVM IR.
- I do not have and therefore do not care about OSX or Windows.
- A modest amount of effort will be made to avoid breaking API changes without
a major version bump, however API stability while the the project is in the
0.0.x
series is not guaranteed.