-- 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:
--   
--   <pre>
--   *Crypto.Nonce&gt; g &lt;- new
--   *Crypto.Nonce&gt; nonce128 g
--   "c\164\252\162f\207\245\ESC`\180p\DC4\234\223QP"
--   *Crypto.Nonce&gt; nonce128 g
--   "\203C\190\138aI\158\194\146\&amp;7\208\&amp;7\ETX0\f\229"
--   *Crypto.Nonce&gt; nonce128url g
--   "3RP-iEFT-6NrpCMsxigondMC"
--   *Crypto.Nonce&gt; nonce128url g
--   "MVZH3Gi5zSKXJY-_qdtznxla"
--   *Crypto.Nonce&gt; nonce128url g
--   "3f3cVNfuZT62-uGco1CBThci"
--   *Crypto.Nonce&gt; nonce128urlT g
--   "iGMJyrRkw2QMp09SRy59s4Jx"
--   *Crypto.Nonce&gt; nonce128urlT g
--   "WsHs0KwYiex3tsqQZ8b0119_"
--   *Crypto.Nonce&gt; nonce128urlT g
--   "JWkLSX7qSFGu1Q3PHuExwurF"
--   </pre>
--   
--   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 <a>ByteString</a> of 16 bytes. Each byte
--   may have any value from <tt>0</tt> to <tt>255</tt>.
nonce128 :: MonadIO m => Generator -> m ByteString

-- | Generate a 128 bit nonce as a <a>ByteString</a> of 24 bytes. Each byte
--   is either a letter (upper or lowercase), a digit, a dash (<tt>-</tt>)
--   or an underscore (<tt>_</tt>), 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 <a>nonce128url</a>, but returns its result as <a>Text</a>
--   instead.
nonce128urlT :: MonadIO m => Generator -> m Text
instance GHC.Show.Show Crypto.Nonce.Generator
