module Cardano.Chain.Common.AddressHash (
AddressHash,
addressHash,
unsafeAddressHash,
) where
import Cardano.Crypto.Hashing (AbstractHash, abstractHashFromDigest)
import Cardano.Ledger.Binary (EncCBOR, byronProtVer, serialize)
import Cardano.Prelude
import Crypto.Hash (Blake2b_224, Digest, SHA3_256)
import qualified Crypto.Hash as CryptoHash
type AddressHash = AbstractHash Blake2b_224
unsafeAddressHash :: EncCBOR a => a -> AddressHash b
unsafeAddressHash :: forall a b. EncCBOR a => a -> AddressHash b
unsafeAddressHash = Digest Blake2b_224 -> AbstractHash Blake2b_224 b
forall algo a. Digest algo -> AbstractHash algo a
abstractHashFromDigest (Digest Blake2b_224 -> AbstractHash Blake2b_224 b)
-> (a -> Digest Blake2b_224) -> a -> AbstractHash Blake2b_224 b
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Digest SHA3_256 -> Digest Blake2b_224
secondHash (Digest SHA3_256 -> Digest Blake2b_224)
-> (a -> Digest SHA3_256) -> a -> Digest Blake2b_224
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. a -> Digest SHA3_256
forall a. EncCBOR a => a -> Digest SHA3_256
firstHash
where
firstHash :: EncCBOR a => a -> Digest SHA3_256
firstHash :: forall a. EncCBOR a => a -> Digest SHA3_256
firstHash = ByteString -> Digest SHA3_256
forall a. HashAlgorithm a => ByteString -> Digest a
CryptoHash.hashlazy (ByteString -> Digest SHA3_256)
-> (a -> ByteString) -> a -> Digest SHA3_256
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Version -> a -> ByteString
forall a. EncCBOR a => Version -> a -> ByteString
serialize Version
byronProtVer
secondHash :: Digest SHA3_256 -> Digest Blake2b_224
secondHash :: Digest SHA3_256 -> Digest Blake2b_224
secondHash = Digest SHA3_256 -> Digest Blake2b_224
forall ba a.
(ByteArrayAccess ba, HashAlgorithm a) =>
ba -> Digest a
CryptoHash.hash
addressHash :: EncCBOR a => a -> AddressHash a
addressHash :: forall a. EncCBOR a => a -> AddressHash a
addressHash = a -> AddressHash a
forall a b. EncCBOR a => a -> AddressHash b
unsafeAddressHash