entropy: A platform independent entropy source

[ bsd3, cryptography, data, library ] [ Propose Tags ]

A mostly platform independent method to obtain cryptographically strong entropy (RDRAND, urandom, CryptAPI, and patches welcome) Users looking for cryptographically strong (number-theoretically sound) PRNGs should see the DRBG package too.

[Skip to Readme]


[Index] [Quick Jump]


Automatic Flags

Build for the HaLVM


Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info


Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Versions [RSS] 0.1, 0.2, 0.2.1, 0.2.2,,,,, 0.3, 0.3.1, 0.3.2, 0.3.3, 0.3.4,, 0.3.5, 0.3.6, 0.3.7, 0.3.8, 0.4, 0.4.1,,,,,,,,,
Dependencies base (>=4.8 && <5), bytestring, ghcjs-dom, jsaddle, unix (<2.8), Win32 (<0) [details]
License BSD-3-Clause
Copyright Thomas DuBuisson <thomas.dubuisson@gmail.com>
Author Thomas DuBuisson <thomas.dubuisson@gmail.com>
Maintainer Thomas DuBuisson <thomas.dubuisson@gmail.com>
Revised Revision 2 made by Bodigrim at 2023-01-18T20:47:02Z
Category Data, Cryptography
Home page https://github.com/TomMD/entropy
Bug tracker https://github.com/TomMD/entropy/issues
Source repo head: git clone https://github.com/TomMD/entropy
Uploaded by ThomasDuBuisson at 2021-11-02T14:54:28Z
Distributions Arch:, Debian:, Fedora:, FreeBSD:0.3.7, LTSHaskell:, NixOS:, Stackage:, openSUSE:
Reverse Dependencies 50 direct, 3172 indirect [details]
Downloads 146149 total (398 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2021-11-02 [all 1 reports]

Readme for entropy-

[back to package description]


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.

Build Status