-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/

-- | Generate cryptographic nonces.
--   
--   According to the Wikipedia, a nonce is an arbitrary number used only
--   once in a cryptographic communication. This package contain helper
--   functions for generating nonces.
--   
--   There are many kinds of nonces used in different situations. It's not
--   guaranteed that by using the nonces from this package you won't have
--   any security issues. Please make sure that the nonces generated via
--   this package are usable on your design.
@package nonce
@version 1.0.2

-- | Usage of this module is very simple. Here is a sample GHCi run:
--   
--   
--   *Crypto.Nonce> g <- new
--   *Crypto.Nonce> nonce128 g
--   "c\164\252\162f\207\245\ESC`\180p\DC4\234\223QP"
--   *Crypto.Nonce> nonce128 g
--   "\203C\190\138aI\158\194\146\&7\208\&7\ETX0\f\229"
--   *Crypto.Nonce> nonce128url g
--   "3RP-iEFT-6NrpCMsxigondMC"
--   *Crypto.Nonce> nonce128url g
--   "MVZH3Gi5zSKXJY-_qdtznxla"
--   *Crypto.Nonce> nonce128url g
--   "3f3cVNfuZT62-uGco1CBThci"
--   *Crypto.Nonce> nonce128urlT g
--   "iGMJyrRkw2QMp09SRy59s4Jx"
--   *Crypto.Nonce> nonce128urlT g
--   "WsHs0KwYiex3tsqQZ8b0119_"
--   *Crypto.Nonce> nonce128urlT g
--   "JWkLSX7qSFGu1Q3PHuExwurF"
--   
--   
--   The functions that generate nonces are not pure on purpose, since that
--   makes it a lot harder to reuse the same nonce.
module Crypto.Nonce

-- | An encapsulated nonce generator.
data Generator

-- | Create a new nonce generator using the system entropy.
new :: MonadIO m => m Generator

-- | Generate a 128 bit nonce as a ByteString of 16 bytes. Each byte
--   may have any value from 0 to 255.
nonce128 :: MonadIO m => Generator -> m ByteString

-- | Generate a 128 bit nonce as a ByteString of 24 bytes. Each byte
--   is either a letter (upper or lowercase), a digit, a dash (-)
--   or an underscore (_), which is the set of characters from the
--   base64url encoding. In order to avoid any issues with padding, the
--   generated nonce actually has 144 bits.
nonce128url :: MonadIO m => Generator -> m ByteString

-- | Same as nonce128url, but returns its result as Text
--   instead.
nonce128urlT :: MonadIO m => Generator -> m Text
instance GHC.Show.Show Crypto.Nonce.Generator
