Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion eth.nimble
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ requires "nim >= 2.0.10",
"unittest2",
"results",
"minilru",
"snappy"
"snappy",
"constantine"

let nimc = getEnv("NIMC", "nim") # Which nim compiler to use
let lang = getEnv("NIMLANG", "c") # Which backend (c/cpp/js)
Expand Down
18 changes: 12 additions & 6 deletions eth/common/hashes.nim
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,12 @@
## Its usage was limited to ethash, the proof-of-work algorithm that has been
## replaced with proof-of-stake.

import std/[typetraits, hashes], nimcrypto/keccak, ./base, stew/assign2
import std/[typetraits, hashes], ./base, stew/assign2, constantine/hashes/h_keccak, nimcrypto/keccak

export hashes, keccak.update, keccak.finish
export hashes, keccak.update, keccak.finish, h_keccak

type
KECCACK256* = h_keccak.KeccakContext[256, 0x01]
Hash32* = distinct Bytes32
## https://github.com/ethereum/execution-specs/blob/51fac24740e662844446439ceeb96a460aae0ba0/src/ethereum/crypto/hash.py#L19
Root* = Hash32
Expand Down Expand Up @@ -91,14 +92,19 @@ const
## of an empty MPT trie

func keccak256*(input: openArray[byte]): Hash32 {.noinit.} =
var ctx: keccak.keccak256
var
ctx: KECCACK256
buff: array[32, byte]
ctx.update(input)
ctx.finish().to(Hash32)
ctx.finish(buff)
Hash32(buff)

func keccak256*(input: openArray[char]): Hash32 {.noinit.} =
keccak256(input.toOpenArrayByte(0, input.high))

template withKeccak256*(body: untyped): Hash32 =
var h {.inject.}: keccak.keccak256
var h {.inject.}: KECCACK256
body
h.finish().to(Hash32)
var buff: array[32, byte]
h.finish(buff)
Hash32(buff)
6 changes: 3 additions & 3 deletions eth/keyfile/keyfile.nim
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ proc deriveKey(password: string,
discard ctx.pbkdf2(password, salt, c, output)
ok(output)
of HashSHA3_256:
var ctx: HMAC[sha3_256]
var ctx: HMAC[keccak.sha3_256]
discard ctx.pbkdf2(password, salt, c, output)
ok(output)
of HashSHA3_384:
Expand Down Expand Up @@ -334,7 +334,7 @@ proc createKeyFileJson*(seckey: PrivateKey,

ciphertext = ? encryptKey(seckey, cryptkind, dkey, iv)

var ctx: keccak256
var ctx: keccak.keccak256
ctx.init()
ctx.update(toOpenArray(dkey, 16, 31))
ctx.update(ciphertext)
Expand Down Expand Up @@ -432,7 +432,7 @@ proc decodeScryptParams(params: JsonNode): KfResult[ScryptParams] =
result = ok(p)

func decryptPrivateKey(crypto: Crypto, dkey: DKey): KfResult[PrivateKey] =
var ctx: keccak256
var ctx: keccak.keccak256
ctx.init()
ctx.update(toOpenArray(dkey, 16, 31))
ctx.update(crypto.cipher.text)
Expand Down
6 changes: 4 additions & 2 deletions eth/rlp/hash_writer.nim
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import nimcrypto/keccak, ./priv/defs, utils, ../common/hashes, length_writer

type RlpHashWriter* = object
keccak: keccak.keccak256
keccak: KECCACK256
lengths*: seq[int]
wrapLengths*: seq[int]
listCount: int
Expand Down Expand Up @@ -97,7 +97,9 @@ func reInit*(self: var RlpHashWriter, tracker: var RlpLengthTracker) =
self.wrapLengths = move(tracker.wrapLengths)

template finish*(self: var RlpHashWriter): Hash32 =
self.keccak.finish.to(Hash32)
var buff: array[32, byte]
self.keccak.finish(buff)
Hash32(buff)

func clear*(self: var RlpHashWriter) =
# Prepare writer for reuse
Expand Down
Loading