ceremonyclient/client/cmd/crossMint_test.go

103 lines
3.3 KiB
Go
Raw Permalink Normal View History

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")
}