@hackage / entropy
A platform independent entropy source
About
Metadata
- Last updated:
- License: BSD-3-Clause
- Categories: Cryptography
- Maintained by: Thomas DuBuisson <thomas.dubuisson@gmail.com>
-
Lottery factor: 1
The number of people with uploader permission on @hackage/entropy who have released something to @hackage in the last 2 years (i.e. the number of people likely able to release critical fixes in a timely manner)
Links
Installation
Tested Compilers
- 8.2.2
Build targets
- JS
- WASM
Uploaders
- Eric Hodges
- Glenn Freeman
- Gertrude Anderson
Features flags
-
donotgetentropy
(off by default)Avoid use of the getentropy() *nix function. By default getentropy will be used if detected during compilation (this plays poorly with cross compilation).
Readme
Introduction
This package allows Haskell users to easily acquire entropy for use in critical
security applications by calling out to either windows crypto api, unix/linux's
getrandom and /dev/urandom. Hardware RNGs (currently RDRAND, patches
welcome) are supported via the hardwareRNG function.
Quick Start
To simply get random bytes use getEntropy:
#!/usr/bin/env cabal
{- cabal:
build-depends: base, entropy, bytestring
-}
import qualified Data.ByteString as BS
import System.Entropy
main :: IO ()
main = print . BS.unpack =<< getEntropy 16
-- Example output: [241,191,215,193,225,27,121,244,16,155,252,41,131,38,6,100]
Faster Randoms from Hardware
Most x86 systems include a hardware random number generator. These can be faster but require more trust in the platform:
import qualified Data.ByteString as B
import System.Entropy
eitherRNG :: Int -> IO B.ByteString
eitherRNG sz = maybe (getEntropy sz) pure =<< getHardwareEntropy sz
main :: IO ()
main = print . B.unpack =<< eitherRNG 32
This package supports Windows, {li,u}nix, QNX, and has preliminary support for HaLVM.
Typically tested on Linux and OSX - testers are as welcome as patches.