mirror of
https://github.com/logos-storage/logos-storage-nim-validator.git
synced 2026-01-02 21:43:06 +00:00
74 lines
2.5 KiB
Nim
74 lines
2.5 KiB
Nim
import ./basics
|
|
import pkg/blscurve
|
|
import codexvalidator/hashing
|
|
import codexvalidator/signatures
|
|
|
|
suite "Signature scheme":
|
|
|
|
test "uses BLS private key as validator identity":
|
|
check signatures.Identity is blscurve.SecretKey
|
|
|
|
test "uses BLS public key as validator identifier":
|
|
check signatures.Identifier is blscurve.PublicKey
|
|
|
|
test "uses BLS signatures":
|
|
check signatures.Signature is blscurve.Signature
|
|
|
|
test "can create a new random identity":
|
|
var identity1, identity2: Identity
|
|
Identity.random(identity1)
|
|
Identity.random(identity2)
|
|
check identity1.identifier != identity2.identifier
|
|
|
|
test "derives identifier (public key) from the identity (private key)":
|
|
var identity: Identity
|
|
Identity.random(identity)
|
|
var publicKey: PublicKey
|
|
check publicFromSecret(publicKey, identity)
|
|
check identity.identifier == publicKey
|
|
|
|
test "identity can sign messages":
|
|
var identity: Identity
|
|
Identity.random(identity)
|
|
let message = seq[byte].example
|
|
let signature1, signature2 = identity.sign(message)
|
|
check signature1 == signature2
|
|
|
|
test "signatures can be verified":
|
|
var identity1, identity2: Identity
|
|
Identity.random(identity1)
|
|
Identity.random(identity2)
|
|
let message = seq[byte].example
|
|
let signature = identity1.sign(message)
|
|
check identity1.identifier.verify(message, signature)
|
|
check not identity2.identifier.verify(message, signature)
|
|
|
|
test "identity can sign and verify hashes":
|
|
var identity: Identity
|
|
Identity.random(identity)
|
|
let hash = Hash.example
|
|
let signature = identity.sign(hash)
|
|
check signature.verify(identity.identifier, hash)
|
|
|
|
test "identifier can be serialized and deserialized":
|
|
let identifier = Identifier.example
|
|
let serialized = identifier.toBytes()
|
|
check Identifier.fromBytes(serialized) == success identifier
|
|
|
|
test "identifier deserialization fails when wrong number of bytes":
|
|
let identifier = Identifier.example
|
|
let serialized = identifier.toBytes()
|
|
let invalid = serialized & 42'u8
|
|
check isFailure Identifier.fromBytes(invalid)
|
|
|
|
test "signature can be serialized and deserialized":
|
|
let signature = Signature.example
|
|
let serialized = signature.toBytes()
|
|
check Signature.fromBytes(serialized) == success signature
|
|
|
|
test "signature deserialization fails when wrong number of bytes":
|
|
let signature = Signature.example
|
|
let serialized = signature.toBytes()
|
|
let invalid = serialized & 42'u8
|
|
check isFailure Signature.fromBytes(invalid)
|