mirror of
https://github.com/status-im/nim-eth.git
synced 2025-01-12 23:34:16 +00:00
d31abca010
`eth_types` is being imported from many projects and ends up causing long build times due to its extensive import lists - this PR starts cleaning some of that up by moving the chain DB and RLP to their own modules. this PR also moves `keccakHash` to its own module and uses it in many places.
45 lines
1.4 KiB
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
|