{-# LANGUAGE CPP #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE DataKinds #-} {-# CFILES raaz/hash/sha1/portable.c #-} -- | Internals of Sha512. module Raaz.Hash.Sha512.Internal (SHA512(..)) where import Data.String import Data.Word import Foreign.Storable ( Storable(..) ) import Raaz.Core import Raaz.Hash.Internal ----------------------------- SHA512 --------------------------------- -- | The Sha512 hash value. Used in implementation of Sha384 as well. newtype SHA512 = SHA512 (Tuple 8 (BE Word64)) deriving (Eq, Equality, Storable, EndianStore) instance Encodable SHA512 instance IsString SHA512 where fromString = fromBase16 instance Show SHA512 where show = showBase16 instance Primitive SHA512 where blockSize _ = BYTES 128 type Implementation SHA512 = SomeHashI SHA512 instance Initialisable (HashMemory SHA512) () where initialise _ = initialise $ SHA512 $ unsafeFromList [ 0x6a09e667f3bcc908 , 0xbb67ae8584caa73b , 0x3c6ef372fe94f82b , 0xa54ff53a5f1d36f1 , 0x510e527fade682d1 , 0x9b05688c2b3e6c1f , 0x1f83d9abfb41bd6b , 0x5be0cd19137e2179 ] instance Hash SHA512 where additionalPadBlocks _ = toEnum 1