hevm-0.41.0: src/EVM/Keccak.hs
module EVM.Keccak (keccak, abiKeccak) where
import EVM.Types
import Control.Arrow ((>>>))
import Data.Bits
import Data.ByteString (ByteString)
import qualified Data.ByteString as BS
import Data.Word
import Crypto.Hash
import qualified Data.ByteArray as BA
keccakBytes :: ByteString -> ByteString
keccakBytes =
(hash :: ByteString -> Digest Keccak_256)
>>> BA.unpack
>>> BS.pack
word32 :: [Word8] -> Word32
word32 xs = sum [ fromIntegral x `shiftL` (8*n)
| (n, x) <- zip [0..] (reverse xs) ]
keccak :: ByteString -> W256
keccak =
keccakBytes
>>> BS.take 32
>>> word
abiKeccak :: ByteString -> Word32
abiKeccak =
keccakBytes
>>> BS.take 4
>>> BS.unpack
>>> word32