2024-12-04 10:08:59 +01:00
|
|
|
import pkg/blscurve
|
|
|
|
|
import pkg/nimcrypto
|
2024-12-11 10:15:47 +01:00
|
|
|
import ./hashing
|
2024-12-03 15:11:39 +01:00
|
|
|
|
2024-12-04 10:08:59 +01:00
|
|
|
export blscurve.Signature
|
|
|
|
|
export blscurve.sign
|
|
|
|
|
export blscurve.verify
|
2024-12-03 15:11:39 +01:00
|
|
|
|
|
|
|
|
type
|
|
|
|
|
Identity* = SecretKey
|
|
|
|
|
Identifier* = PublicKey
|
|
|
|
|
|
|
|
|
|
proc random*(_: type Identity, identity: var Identity) =
|
|
|
|
|
var randomness: array[32, byte]
|
|
|
|
|
var done = false
|
|
|
|
|
while not done:
|
2024-12-04 10:08:59 +01:00
|
|
|
doAssert randomBytes(randomness) == randomness.len
|
|
|
|
|
done = fromBytes(identity, randomness)
|
|
|
|
|
burnMem(randomness)
|
2024-12-03 15:11:39 +01:00
|
|
|
|
|
|
|
|
func identifier*(identity: Identity): Identifier =
|
2024-12-04 10:08:59 +01:00
|
|
|
doAssert publicFromSecret(result, identity)
|
2024-12-11 10:15:47 +01:00
|
|
|
|
|
|
|
|
func sign*(identity: Identity, hash: Hash): Signature =
|
|
|
|
|
identity.sign(hash.data)
|
|
|
|
|
|
|
|
|
|
func verify*(signature: Signature, identifier: Identifier, hash: Hash): bool =
|
|
|
|
|
identifier.verify(hash.toBytes(), signature)
|