mirror of
https://github.com/status-im/nimbus-eth1.git
synced 2025-02-03 07:45:18 +00:00
Whisper: Remove Whisper-specific hexstring/JSON/key storage support
Signed-off-by: Jamie Lokier <jamie@shareable.org>
This commit is contained in:
parent
613f06e61c
commit
ef7773daa6
@ -22,23 +22,19 @@
|
|||||||
* ref BloomFilter
|
* ref BloomFilter
|
||||||
* PublicKey
|
* PublicKey
|
||||||
* PrivateKey
|
* PrivateKey
|
||||||
* SymKey
|
|
||||||
* Topic
|
* Topic
|
||||||
* Bytes
|
* Bytes
|
||||||
]#
|
]#
|
||||||
|
|
||||||
import
|
import
|
||||||
stint, stew/byteutils, eth/[keys, rlp], eth/common/eth_types,
|
stint, stew/byteutils, eth/[keys, rlp], eth/common/eth_types
|
||||||
eth/p2p/rlpx_protocols/whisper_protocol
|
|
||||||
|
|
||||||
type
|
type
|
||||||
HexQuantityStr* = distinct string
|
HexQuantityStr* = distinct string
|
||||||
HexDataStr* = distinct string
|
HexDataStr* = distinct string
|
||||||
EthAddressStr* = distinct string # Same as HexDataStr but must be less <= 20 bytes
|
EthAddressStr* = distinct string # Same as HexDataStr but must be less <= 20 bytes
|
||||||
EthHashStr* = distinct string # Same as HexDataStr but must be exactly 32 bytes
|
EthHashStr* = distinct string # Same as HexDataStr but must be exactly 32 bytes
|
||||||
Identifier* = distinct string # 32 bytes, no 0x prefix!
|
HexStrings = HexQuantityStr | HexDataStr | EthAddressStr | EthHashStr
|
||||||
HexStrings = HexQuantityStr | HexDataStr | EthAddressStr | EthHashStr |
|
|
||||||
Identifier
|
|
||||||
|
|
||||||
template len*(value: HexStrings): int = value.string.len
|
template len*(value: HexStrings): int = value.string.len
|
||||||
|
|
||||||
@ -115,10 +111,6 @@ func isValidEthHash*(value: string): bool =
|
|||||||
# TODO: Allow shorter hashes (pad with zeros) for convenience?
|
# TODO: Allow shorter hashes (pad with zeros) for convenience?
|
||||||
result = value.isValidHexData(66)
|
result = value.isValidHexData(66)
|
||||||
|
|
||||||
func isValidIdentifier*(value: string): bool =
|
|
||||||
# 32 bytes for Whisper ID, no 0x prefix
|
|
||||||
result = value.isValidHexData(64, false)
|
|
||||||
|
|
||||||
func isValidPublicKey*(value: string): bool =
|
func isValidPublicKey*(value: string): bool =
|
||||||
# 65 bytes for Public Key plus 1 byte for 0x prefix
|
# 65 bytes for Public Key plus 1 byte for 0x prefix
|
||||||
result = value.isValidHexData(132)
|
result = value.isValidHexData(132)
|
||||||
@ -127,10 +119,6 @@ func isValidPrivateKey*(value: string): bool =
|
|||||||
# 32 bytes for Private Key plus 1 byte for 0x prefix
|
# 32 bytes for Private Key plus 1 byte for 0x prefix
|
||||||
result = value.isValidHexData(66)
|
result = value.isValidHexData(66)
|
||||||
|
|
||||||
func isValidSymKey*(value: string): bool =
|
|
||||||
# 32 bytes for Private Key plus 1 byte for 0x prefix
|
|
||||||
result = value.isValidHexData(66)
|
|
||||||
|
|
||||||
func isValidHash256*(value: string): bool =
|
func isValidHash256*(value: string): bool =
|
||||||
# 32 bytes for Hash256 plus 1 byte for 0x prefix
|
# 32 bytes for Hash256 plus 1 byte for 0x prefix
|
||||||
result = value.isValidHexData(66)
|
result = value.isValidHexData(66)
|
||||||
@ -222,12 +210,6 @@ proc `%`*(value: PublicKey): JsonNode =
|
|||||||
proc `%`*(value: PrivateKey): JsonNode =
|
proc `%`*(value: PrivateKey): JsonNode =
|
||||||
result = %("0x" & $value)
|
result = %("0x" & $value)
|
||||||
|
|
||||||
proc `%`*(value: SymKey): JsonNode =
|
|
||||||
result = %("0x" & value.toHex)
|
|
||||||
|
|
||||||
proc `%`*(value: whisper_protocol.Topic): JsonNode =
|
|
||||||
result = %("0x" & value.toHex)
|
|
||||||
|
|
||||||
proc `%`*(value: seq[byte]): JsonNode =
|
proc `%`*(value: seq[byte]): JsonNode =
|
||||||
result = %("0x" & value.toHex)
|
result = %("0x" & value.toHex)
|
||||||
|
|
||||||
@ -239,12 +221,6 @@ proc toPublicKey*(key: string): PublicKey {.inline.} =
|
|||||||
proc toPrivateKey*(key: string): PrivateKey {.inline.} =
|
proc toPrivateKey*(key: string): PrivateKey {.inline.} =
|
||||||
result = PrivateKey.fromHex(key[2 .. ^1]).tryGet()
|
result = PrivateKey.fromHex(key[2 .. ^1]).tryGet()
|
||||||
|
|
||||||
proc toSymKey*(key: string): SymKey {.inline.} =
|
|
||||||
hexToByteArray(key[2 .. ^1], result)
|
|
||||||
|
|
||||||
proc toTopic*(topic: string): whisper_protocol.Topic {.inline.} =
|
|
||||||
hexToByteArray(topic[2 .. ^1], result)
|
|
||||||
|
|
||||||
# Marshalling from JSON to Nim types that includes format checking
|
# Marshalling from JSON to Nim types that includes format checking
|
||||||
|
|
||||||
func invalidMsg(name: string): string = "When marshalling from JSON, parameter \"" & name & "\" is not valid"
|
func invalidMsg(name: string): string = "When marshalling from JSON, parameter \"" & name & "\" is not valid"
|
||||||
@ -284,13 +260,6 @@ proc fromJson*(n: JsonNode, argName: string, result: var EthHashStr) =
|
|||||||
raise newException(ValueError, invalidMsg(argName) & " as an Ethereum hash \"" & hexStr & "\"")
|
raise newException(ValueError, invalidMsg(argName) & " as an Ethereum hash \"" & hexStr & "\"")
|
||||||
result = hexStr.EthHashStr
|
result = hexStr.EthHashStr
|
||||||
|
|
||||||
proc fromJson*(n: JsonNode, argName: string, result: var Identifier) =
|
|
||||||
n.kind.expect(JString, argName)
|
|
||||||
let hexStr = n.getStr()
|
|
||||||
if not hexStr.isValidIdentifier:
|
|
||||||
raise newException(ValueError, invalidMsg(argName) & " as a identifier \"" & hexStr & "\"")
|
|
||||||
result = hexStr.Identifier
|
|
||||||
|
|
||||||
proc fromJson*(n: JsonNode, argName: string, result: var UInt256) =
|
proc fromJson*(n: JsonNode, argName: string, result: var UInt256) =
|
||||||
n.kind.expect(JString, argName)
|
n.kind.expect(JString, argName)
|
||||||
let hexStr = n.getStr()
|
let hexStr = n.getStr()
|
||||||
@ -312,20 +281,6 @@ proc fromJson*(n: JsonNode, argName: string, result: var PrivateKey) =
|
|||||||
raise newException(ValueError, invalidMsg(argName) & " as a private key \"" & hexStr & "\"")
|
raise newException(ValueError, invalidMsg(argName) & " as a private key \"" & hexStr & "\"")
|
||||||
result = hexStr.toPrivateKey
|
result = hexStr.toPrivateKey
|
||||||
|
|
||||||
proc fromJson*(n: JsonNode, argName: string, result: var SymKey) =
|
|
||||||
n.kind.expect(JString, argName)
|
|
||||||
let hexStr = n.getStr()
|
|
||||||
if not hexStr.isValidSymKey:
|
|
||||||
raise newException(ValueError, invalidMsg(argName) & " as a symmetric key \"" & hexStr & "\"")
|
|
||||||
result = toSymKey(hexStr)
|
|
||||||
|
|
||||||
proc fromJson*(n: JsonNode, argName: string, result: var whisper_protocol.Topic) =
|
|
||||||
n.kind.expect(JString, argName)
|
|
||||||
let hexStr = n.getStr()
|
|
||||||
if not hexStr.isValidTopic:
|
|
||||||
raise newException(ValueError, invalidMsg(argName) & " as a topic \"" & hexStr & "\"")
|
|
||||||
result = toTopic(hexStr)
|
|
||||||
|
|
||||||
# Following procs currently required only for testing, the `createRpcSigs` macro
|
# Following procs currently required only for testing, the `createRpcSigs` macro
|
||||||
# requires it as it will convert the JSON results back to the original Nim
|
# requires it as it will convert the JSON results back to the original Nim
|
||||||
# types, but it needs the `fromJson` calls for those specific Nim types to do so
|
# types, but it needs the `fromJson` calls for those specific Nim types to do so
|
||||||
|
@ -7,16 +7,14 @@
|
|||||||
# Apache License, version 2.0, (LICENSE-APACHEv2)
|
# Apache License, version 2.0, (LICENSE-APACHEv2)
|
||||||
# MIT license (LICENSE-MIT)
|
# MIT license (LICENSE-MIT)
|
||||||
|
|
||||||
import tables, eth/keys, eth/p2p/rlpx_protocols/whisper/whisper_types
|
import tables, eth/keys
|
||||||
|
|
||||||
type
|
type
|
||||||
KeyStorage* = ref object
|
KeyStorage* = ref object
|
||||||
asymKeys*: Table[string, KeyPair]
|
asymKeys*: Table[string, KeyPair]
|
||||||
symKeys*: Table[string, SymKey]
|
|
||||||
|
|
||||||
KeyGenerationError* = object of CatchableError
|
KeyGenerationError* = object of CatchableError
|
||||||
|
|
||||||
proc newKeyStorage*(): KeyStorage =
|
proc newKeyStorage*(): KeyStorage =
|
||||||
new(result)
|
new(result)
|
||||||
result.asymKeys = initTable[string, KeyPair]()
|
result.asymKeys = initTable[string, KeyPair]()
|
||||||
result.symKeys = initTable[string, SymKey]()
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user