Skip to content

Instantly share code, notes, and snippets.

@mratsim
Created March 10, 2020 23:52
Show Gist options
  • Save mratsim/454b9a00175eca67a29fee013a61c7de to your computer and use it in GitHub Desktop.
Save mratsim/454b9a00175eca67a29fee013a61c7de to your computer and use it in GitHub Desktop.
import blscurve, stew/byteutils
type KeyPairSig = tuple[pubkey: PublicKey, seckey: SecretKey, sig: Signature]
proc main() =
var alice, bob, eve, mallory: KeyPairSig
var aggSig: Signature
let message = hexToSeqByte"0x0CC94C98643AEA8DC16D91881A67FEDC306DF13A9C710CDE78C1021405A3D47E"
# doAssert aggSig.fromHex"0xa83c648423e410aa2dd900b45614bbd5f4071992fcebb5bf096978b60a05610b466ea9a0943afdba7ed56e2d548170ad1454d83c3d882e5fa6f107a450c50692171651cb809c84410d940fe2c9c22176a2dbeed9a618158351176fb89b4fa88e"
block:
doAssert alice.seckey.fromHex"0x0000000000000000000000000000000001fa7456c102e3c803c0ed7d3a2adacdd3f83da78ec4aef570f3bab84f642dc3"
doAssert alice.pubkey.fromHex"0x812b5cdff3de2ac2767b2faa6df0d26c5e6aff05b4e97be1265c059b55f8c73544f1dec606edd4e317c562215c1a58c7"
doAssert alice.sig.fromHex"0xa520d9e1084dbe67c9f74f83d2b358bef856b911b1491bc63a114e1ab349491954ec114dc0c14edcf360973a423164e01920d4b882479f7944e64a2a160aabab49048ff87293d49d1758ec95f01ae15751775e170c14a0d42013c503cf491d0a"
doassert alice.secKey.privToPub() == alice.pubkey
doassert alice.secKey.sign(message) == alice.sig
block:
doAssert bob.seckey.fromHex"0x997eff7248d1f8def12c86b38a7c5f5544fd397b2a6b2f16df8e86f755bbed592693d866f7ea16aec426ba9cd4a01e8d"
doAssert bob.pubkey.fromHex"0x99049b4bbebe2de58a8f9efe7a2b17679207c37fd93bc71313256714374e28b0c86a1dfb921307ab9496ec5c4ebba7ec"
doassert bob.sig.fromHex"0x92afe78f5745e06dd236ec86f0c2125cc841e1c567427112473f988cfae37a945f0ddfeab438fea65260f7b1cebc3b0005ec0b5b745b870571e7b61fc003357c775178dc6e0f461874e94ea99e3d940abdc4c7801d41c046939c5638cf7b0a60"
doassert bob.secKey.privToPub() == bob.pubkey
doassert bob.secKey.sign(message) == bob.sig
block:
doAssert eve.seckey.fromHex"0x00000000000000000000000000000000495b6c4b3e54d3e410a6358327f2029de47b8af6ef0b2082b229ee6fa50cc9ec"
doAssert eve.pubkey.fromHex"0x91bf737e754b77a4718f01e72f0a528890045652a870269a994a6d268eea482d7097db4a0bdd0204b6676c9d0241da08"
doassert eve.sig.fromHex"0xa961d33c34557c750dea08dfea9189c82903b7a10e5312c7bbc112589205b5c578e7ab0abdb3b5ae66d233d038f9a57907e6806dc0a1789250a9c0f25562b5299479b3e85fce0afa3b8181bf7db1b0a73a12d43e304a1596a830342311e4617e"
doassert eve.secKey.privToPub() == eve.pubkey
doassert eve.secKey.sign(message) == eve.sig
block:
doAssert mallory.seckey.fromHex"0x0000000000000000000000000000000035e9f1b29b83d320f23d141ca5c474ea294fe4e065ea0ec081bc49118a2ba7fc"
doAssert mallory.pubkey.fromHex"0x88d67d255f213be390bbcefca28f68dc7b9325062a4b70ae01b1f148ac3b9bffb369cead40c194d8aa967cffe2c5edd7"
doassert mallory.sig.fromHex"0xa05fba607b47176a5b23d3b4ac42e5ab8b0b3756b68e42cbd4da6c5867ece125ee2e16b2b1542b6b47c7012b9d05c0f80afb4291426183d26067a5adb27619e5c645705ce5e7d42b29b18dfb4704cc7e44d7db9a97a8d13dabad232ec2804a5b"
doassert mallory.secKey.privToPub() == mallory.pubkey
doassert mallory.secKey.sign(message) == mallory.sig
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment