{-| This module exposes all the cryptographic hash functions available under the raaz library. -} {-# OPTIONS_GHC -fno-warn-warnings-deprecations #-} module Raaz.Hash ( -- * Cryptographic hashes and hmacs. -- $computingHash$ -- ** Encoding and displaying. -- $encoding$ -- Hash, hash, hashFile, hashSource , HMAC, hmac, hmacFile, hmacSource -- * Exposing individual hashes. -- $individualHashes$ , module Raaz.Hash.Blake2 , module Raaz.Hash.Sha224 , module Raaz.Hash.Sha256 , module Raaz.Hash.Sha384 , module Raaz.Hash.Sha512 -- , module Raaz.Hash.Blake256 ) where -- import Raaz.Hash.Blake256 import Raaz.Hash.Blake2 import Raaz.Hash.Sha224 import Raaz.Hash.Sha256 import Raaz.Hash.Sha384 import Raaz.Hash.Sha512 import Raaz.Hash.Internal ( Hash, hash, hashFile, hashSource ) import Raaz.Hash.Internal.HMAC ( HMAC, hmac, hmacFile, hmacSource ) -- $computingHash$ -- -- -- The cryptographic hashes provided by raaz give the following -- guarantees: -- -- 1. Distinct hashes are distinct types and hence it is a compiler -- error to compare two different hashes. -- -- 2. A hash and its associated hmac are distinct types and hence -- it is an compile time error to compare a hash with its hmac. -- -- 3. The `Eq` instance for hashes and the corresponding hmacs use -- a constant time equality test and hence it is safe to check -- equality using the operator `==`. -- -- The functions `hash`, `hashFile`, and `hashSource` provide a rather -- high level interface for computing hashes. For hmacs the associated -- functions are `hmac`, `hmacFile`, and `hmacSource` -- -- === NOTE: SHA1 is broken. -- -- SHA1 is no more available form this module, its use is highly -- depreciated. If you want to use it for transition please import -- Raaz.Hash.Sha1 specifically -- $encoding$ -- -- When interfacing with other applications or when printing output to -- users, it is often necessary to encode hash, hmac or their keys as -- strings. Applications usually present hashes encoded in base16. The -- `Show` and `Data.String.IsString` instances for the hashes exposed -- here follow this convention. -- -- More generaly, hashes, hmacs and their key are instances of type -- class `Raaz.Core.Encode.Encodable` and can hence can be encoded in -- any of the formats supported in raaz. -- $individualHashes$ -- -- Individual hash and hmacs are exposed via their respective modules. -- These module also export the specialized variants for `hashSource`, -- `hash` and `hashFile` for specific hashes. For example, if you are -- interested only in say `SHA512` you can import the module -- "Raaz.Hash.Sha512". This will expose the functions `sha512Source`, -- `sha512` and `sha512File` which are specialized variants of -- `hashSource` `hash` and `hashFile` respectively for the hash -- `SHA512`. For example, if you want to print the sha512 checksum of -- a file, you can use the following. -- -- > sha512Checksum :: FilePath -> IO () -- > -- print the sha512 checksum of a given file. -- > sha512Checksum fname = sha512File fname >>= print {-# ANN module "HLint: ignore Use import/export shortcut" #-}