github.com/mavryk-network/mvgo@v1.19.9/mavryk/sig_test.go (about) 1 // Copyright (c) 2023 Blockwatch Data Inc. 2 // Author: alex@blockwatch.cc 3 4 package mavryk 5 6 import ( 7 "bytes" 8 "testing" 9 ) 10 11 func TestSig(t *testing.T) { 12 type testcase struct { 13 Name string 14 Sig string 15 Type SignatureType 16 Bytes string 17 } 18 19 cases := []testcase{ 20 // edsig 21 { 22 Name: "edsig", 23 Sig: "edsigtzWvLTwvEqaZy1BMzQoeFTCxALJ94aDx5YyDh6qhYNQowHfAb7k23doKazVMGvGnT6bCeTG9qbJfBqRqeL64zpEFLJyp9C", 24 Type: SignatureTypeEd25519, 25 Bytes: "00cc2854776cd0ece57f46a03fde2cce2b95798409f344f379a7a7a0f8835b3fdc76a7fa6827c72f52eeebf2508d35e7b8ac63c90372fa3cb0aaa98c06f96c5e05", 26 }, 27 // spsig 28 { 29 Name: "spsig", 30 Sig: "spsig1Joen9pavJsoyjRQ6xEHFEDvB3WUDxX9LxbJKstvXss8b5tJpRqZBMPvWqvQ5xqavjcvpDe4TyvcfJjuYxKBeqGtSUAkBr", 31 Type: SignatureTypeSecp256k1, 32 Bytes: "01635310a0b871b948e38dc476edcb9f135a8f148609243a60d9ddccf8b15a350769c2f80fa30fbd1504e84ab88277f081bde79adb2416a898b1e88d0b2e692ceb", 33 }, 34 // p2sig 35 { 36 Name: "p2sig", 37 Sig: "p2sigSDjb3CfSRVEYt9X75HAFe29Tf3hqSrQRsnyxvD8k7NDka9SY7oxDmZQGngJcD5E7E4AmVD2iiSveWtWYwT3mMurSMZicA", 38 Type: SignatureTypeP256, 39 Bytes: "0225967eb0e75b6a4cab2d764ab0fce1304c6dbca43e7e5f562a8685294226f05f062b4ea9188ac5c5332ccdebdaf465d05c317a8c82a06d649c1ca0f9ac2fb5ac", 40 }, 41 // BLsig 42 { 43 Name: "BLsig", 44 Sig: "BLsigAqfbS14US8aPsoe6xu6VbQ3ukXZGbhx7X3WVmk2UpTvkZW4bkEctwvZ8S8ajprdDUfArjc6m4JqWRpffpK6jHKc23hToq8LtCs1fqXB3nfPeAQqiqo5Fe6DoomuJi9NXMMxLQ8N8k", 45 Type: SignatureTypeBls12_381, 46 Bytes: "03a25136c9169bf72d62260b49e55c02371e827a5c58b1d5f92b3caee7b90f3abaa4fd384ecbe0489dd06cb2a2f64dcbfe0080508b5593ccdb15c13ab904bab34082db468fae469881568b5afcc70979d964412e1342e3b85f6a9a9b70fbfac021", 47 }, 48 // sig 49 { 50 Name: "sig", 51 Sig: "sigphTDQj1xuPXupC4rNxTJ9vSPWDD5wMMhsDUxkqiY2PrdTia6DpvxaZQYPsZBT6S1Z7aiwUnzyLtT3PdzBk6omA9TpiPrq", 52 Type: SignatureTypeGeneric, 53 Bytes: "cc2854776cd0ece57f46a03fde2cce2b95798409f344f379a7a7a0f8835b3fdc76a7fa6827c72f52eeebf2508d35e7b8ac63c90372fa3cb0aaa98c06f96c5e05", 54 }, 55 // asig 56 // { 57 // Name: "asig", 58 // Sig: "", 59 // Type: SignatureTypeGenericAggregate, 60 // Bytes: "", 61 // }, 62 } 63 64 for _, c := range cases { 65 buf := MustDecodeString(c.Bytes) 66 67 // base58 must parse 68 sig, err := ParseSignature(c.Sig) 69 if err != nil { 70 t.Fatalf("%s: parsing signature %s: %v", c.Name, c.Sig, err) 71 } 72 73 // check type 74 if got, want := sig.Type, c.Type; got != want { 75 t.Errorf("%s: mismatched type got=%s want=%s", c.Name, got, want) 76 } 77 78 // check hash 79 if !bytes.Equal(sig.Bytes(), buf) { 80 t.Errorf("%s: mismatched hash got=%x want=%x", c.Name, sig.Bytes(), buf) 81 } 82 83 // marshal text 84 out, err := sig.MarshalText() 85 if err != nil { 86 t.Errorf("%s: marshal text unexpected error: %v", c.Name, err) 87 } 88 89 if got, want := string(out), c.Sig; got != want { 90 t.Errorf("%s: mismatched text encoding got=%s want=%s", c.Name, got, want) 91 } 92 93 // unmarshal from bytes 94 var s2 Signature 95 err = s2.UnmarshalBinary(buf) 96 if err != nil { 97 t.Fatalf("%s: unmarshal binary %s: %v", c.Name, c.Bytes, err) 98 } 99 100 if !s2.Equal(sig) { 101 t.Errorf("%s: mismatched signature got=%s want=%s", c.Name, s2, sig) 102 } 103 104 // unmarshal text 105 err = s2.UnmarshalText([]byte(c.Sig)) 106 if err != nil { 107 t.Fatalf("%s: unmarshal text %s: %v", c.Name, c.Sig, err) 108 } 109 110 if !s2.Equal(sig) { 111 t.Errorf("%s: mismatched signature got=%s want=%s", c.Name, s2, sig) 112 } 113 } 114 } 115 116 func TestInvalidSig(t *testing.T) { 117 // invalid base58 string 118 if _, err := ParseAddress("sigVZ3WLNWdhN7VmZxjVycgkkjmGJqSZyAmWctqueGX6NGgdtxCkBMXmyYmREiVpJ3zSMLZFvbksANKnKCs3soZrsVi999tX"); err == nil { 119 t.Errorf("Expected error on invalid base58 string") 120 } 121 122 // init from invalid short hash 123 hash := MustDecodeString("0b78887fdd0cd3bfbe75a717655728e0205bb9") 124 s := NewSignature(SignatureTypeEd25519, hash) 125 if s.IsValid() { 126 t.Errorf("Expected invalid signature from short hash") 127 } 128 129 // init from invalid empty bytes 130 s = NewSignature(SignatureTypeEd25519, nil) 131 if s.IsValid() { 132 t.Errorf("Expected invalid signature from nil hash") 133 } 134 135 // decode from short buffer 136 err := s.UnmarshalBinary(MustDecodeString("000b78887fdd0cd3bfbe75a717655728e0205bb9")) 137 if err == nil || s.IsValid() { 138 t.Errorf("Expected unmarshal error from short buffer") 139 } 140 141 // decode from nil buffer 142 err = s.UnmarshalBinary(nil) 143 if err == nil || s.IsValid() { 144 t.Errorf("Expected unmarshal error from short buffer") 145 } 146 147 // decode from invalid buffer (wrong type) 148 // err = s.UnmarshalBinary(MustDecodeString("")) 149 // if err == nil || s.IsValid() { 150 // t.Errorf("Expected unmarshal error from invalid buffer") 151 // } 152 }