mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-11-15 12:45:19 +00:00
103 lines
3.3 KiB
Go
103 lines
3.3 KiB
Go
|
package cmd_test
|
||
|
|
||
|
import (
|
||
|
"crypto/rand"
|
||
|
"encoding/hex"
|
||
|
"encoding/json"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
"source.quilibrium.com/quilibrium/monorepo/client/cmd"
|
||
|
)
|
||
|
|
||
|
var peerPrivKeyStr = "b14b843edf61a58870d3f96fe7dc8c6d0479af10aa16c45b102ddae75b278e8ef302edca36c71c1b4beb60e88088826c4da71ab0b5bf60cc92fc35078fa499f8a4accd51776ecc1fb520fdb20408133366077dadf4ff8a337fb42a19ff846e3609516a3f61c92ea4b9c2298a64b8bfae3780"
|
||
|
var provingPrivKeyStr = "690a5f08a2b3a0b787a8301c5fded376f7a070f5d89f66bf537d67fa1ed71a2b22ce166733b7d73ccf10a20ef0f04f163aae13883ff8270f93fed723c513e24e7f93d317b3257731887411bf820e169a0180c0cbf625efa67ff54cc22f1d97a2bd3f721705eeb4c2bf022f793954a798f700"
|
||
|
|
||
|
func TestCrossMintRoundtrip(t *testing.T) {
|
||
|
peerPrivKey, err := hex.DecodeString(peerPrivKeyStr)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
provingPrivKey, err := hex.DecodeString(provingPrivKeyStr)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
payloadBytes := make([]byte, 32)
|
||
|
n, err := rand.Read(payloadBytes)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
if n != 32 {
|
||
|
t.Fatal("not enough bytes read")
|
||
|
}
|
||
|
payload := hex.EncodeToString(payloadBytes)
|
||
|
args := &cmd.CrossMintArgs{
|
||
|
Payload: payload,
|
||
|
PeerKey: peerPrivKey,
|
||
|
ProvingKey: provingPrivKey,
|
||
|
}
|
||
|
result, err := cmd.CrossMint(args)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
verified, err := cmd.VerifyCrossMint(payload, result)
|
||
|
assert.True(t, verified, "cross mint verification failed")
|
||
|
// Switch the public keys to induce failure
|
||
|
tmp := result.PeerPublicKey
|
||
|
result.PeerPublicKey = result.ProverPublicKey
|
||
|
result.ProverPublicKey = tmp
|
||
|
verified, err = cmd.VerifyCrossMint(payload, result)
|
||
|
assert.False(t, verified, "cross mint verification should have failed")
|
||
|
}
|
||
|
|
||
|
func TestCrossMint0xHex(t *testing.T) {
|
||
|
peerPrivKey, err := hex.DecodeString(peerPrivKeyStr)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
provingPrivKey, err := hex.DecodeString(provingPrivKeyStr)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
payload := "0x1234"
|
||
|
args := &cmd.CrossMintArgs{
|
||
|
Payload: payload,
|
||
|
PeerKey: peerPrivKey,
|
||
|
ProvingKey: provingPrivKey,
|
||
|
}
|
||
|
result, err := cmd.CrossMint(args)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
verified, err := cmd.VerifyCrossMint(payload, result)
|
||
|
assert.True(t, verified, "cross mint verification failed")
|
||
|
}
|
||
|
|
||
|
func TestCrossMintFixture(t *testing.T) {
|
||
|
// Generated by running the `cross-mint` on the config of a newly started node with payload "1234"
|
||
|
rawJson := `{
|
||
|
"peerPublicKey": "LLP/9tYlqIsV8AgTkyIpK9zjN+OfXNmYMDhmDeEagCMAhjfpPPWDyWDq9w6uMl9hGyDKYB10EV0A",
|
||
|
"peerSignature": "2ybumA9Vu5rnr5nYPcjehGo/PK6uNl4iVa0WXkEGms5ChqPFgOJX6Z5eng8U6VSHy85zbeZBukiANE3j2EBxrk4TAf4Z+5uuNMCQ6DasKpkgsxuIOGWKhOcBal2CDicinuMqafU3YOrXH9cck/OkjywA",
|
||
|
"proverPublicKey": "CAk3inpisW2Bpcar/z5/3dwjRSgFMRbhYhtCWdQThZZqDvOWFGgoMXLyKHw3B4+yEsmYIVaQZ/iA",
|
||
|
"proverSignature": "NZb7D2xNbCLlYGMUN1BiwBJL9Z6LbdRiMT1FpltBVpRNuoUNmncN++TWgJD6ngIv+VxEnWB0fhcAfAvrIlwNL0z8Ppur8mGMwedzJIm3pB22nAjUTDvNOvvczZWNbPZPyXcWco8SIC/aVaNmvsg//SgA"
|
||
|
}`
|
||
|
// load RawJson into a CrossMintResult
|
||
|
result := &cmd.CrossMintResult{}
|
||
|
err := json.Unmarshal([]byte(rawJson), result)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
ok, err := cmd.VerifyCrossMint("1234", result)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
assert.True(t, ok, "cross mint verification failed")
|
||
|
|
||
|
bad, err := cmd.VerifyCrossMint("2234", result)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
assert.False(t, bad, "cross mint verification succeeded when it should have failed")
|
||
|
}
|