2021-03-09 13:16:54 +01:00
|
|
|
import pkg/secp256k1
|
|
|
|
|
import pkg/nimcrypto
|
|
|
|
|
import ./basics
|
|
|
|
|
|
|
|
|
|
export basics
|
|
|
|
|
export toPublicKey
|
|
|
|
|
|
2025-12-10 20:44:01 +01:00
|
|
|
{.push raises: [].}
|
2021-03-09 13:16:54 +01:00
|
|
|
|
|
|
|
|
type
|
2021-04-07 09:15:26 +02:00
|
|
|
EthPrivateKey* = SkSecretKey
|
|
|
|
|
EthPublicKey* = SkPublicKey
|
2021-03-09 13:16:54 +01:00
|
|
|
|
|
|
|
|
proc rng(data: var openArray[byte]): bool =
|
|
|
|
|
randomBytes(data) == data.len
|
|
|
|
|
|
2021-04-07 09:15:26 +02:00
|
|
|
proc random*(_: type EthPrivateKey): EthPrivateKey =
|
|
|
|
|
EthPrivateKey.random(rng).get()
|
2021-03-09 13:16:54 +01:00
|
|
|
|
2021-04-07 09:15:26 +02:00
|
|
|
func `$`*(key: EthPrivateKey): string =
|
2021-03-09 13:16:54 +01:00
|
|
|
key.toHex()
|
|
|
|
|
|
2021-04-07 09:15:26 +02:00
|
|
|
func parse*(_: type EthPrivateKey, s: string): ?EthPrivateKey =
|
2021-03-15 11:23:02 +01:00
|
|
|
SkSecretKey.fromHex(s).option
|
2021-03-09 16:50:28 +01:00
|
|
|
|
2021-04-07 09:15:26 +02:00
|
|
|
func toAddress*(key: EthPublicKey): EthAddress =
|
2021-03-09 16:50:28 +01:00
|
|
|
let hash = keccak256.digest(key.toRaw())
|
|
|
|
|
var bytes: array[20, byte]
|
|
|
|
|
for i in 0..<20:
|
|
|
|
|
bytes[i] = hash.data[12 + i]
|
|
|
|
|
EthAddress(bytes)
|