nim-eth/eth/common/eth_hash.nim

45 lines
1.4 KiB
Nim

# Copyright (c) 2022 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
when (NimMajor, NimMinor) < (1, 4):
{.push raises: [Defect].}
else:
{.push raises: [].}
## keccak256 is used across ethereum as the "default" hash function and this
## module provides a type and some helpers to produce such hashes
import
nimcrypto/[keccak, hash]
export
keccak.update, keccak.finish, hash
type
KeccakHash* = MDigest[256]
## A hash value computed using keccak256
## note: this aliases Eth2Digest too, which uses a different hash!
template withKeccakHash*(body: untyped): KeccakHash =
## This little helper will init the hash function and return the sliced
## hash:
## let hashOfData = withHash: h.update(data)
block:
var h {.inject.}: keccak256
# init(h) # not needed for new instance
body
finish(h)
func keccakHash*(input: openArray[byte]): KeccakHash =
keccak256.digest(input)
func keccakHash*(input: openArray[char]): KeccakHash =
keccak256.digest(input)
func keccakHash*(a, b: openArray[byte]): KeccakHash =
withKeccakHash:
h.update a
h.update b