(t *testing.T)
| 71 | } |
| 72 | |
| 73 | func TestBlockSig(t *testing.T) { |
| 74 | // A pubkey and a sig that will fail signature validation. Can't use |
| 75 | // all-zeroes, which succeeds on about 25% of messages. |
| 76 | badPubkey := mustDecodeHex("1111111111111111111111111111111111111111111111111111111111111111") |
| 77 | badSig := mustDecodeHex("22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222") |
| 78 | |
| 79 | cases := []struct { |
| 80 | pred *bc.Predicate |
| 81 | args []interface{} |
| 82 | wantErr error |
| 83 | }{{ |
| 84 | pred: &bc.Predicate{Version: 2}, // bad version |
| 85 | wantErr: errBadPredicate, |
| 86 | }, { |
| 87 | pred: &bc.Predicate{Version: 1, Quorum: -1}, // bad quorum |
| 88 | wantErr: errBadPredicate, |
| 89 | }, { |
| 90 | pred: &bc.Predicate{Version: 1, Quorum: 1}, // quorum > len(pubkeys) |
| 91 | args: []interface{}{make([]byte, ed25519.SignatureSize)}, |
| 92 | wantErr: errBadPredicate, |
| 93 | }, { |
| 94 | pred: &bc.Predicate{Version: 1, Quorum: 1, Pubkeys: [][]byte{make([]byte, ed25519.PublicKeySize)}}, |
| 95 | wantErr: errBadArguments, // len(args) < len(pubkeys) |
| 96 | }, { |
| 97 | pred: &bc.Predicate{Version: 1, Quorum: 1, Pubkeys: [][]byte{[]byte("badkeylen")}}, // bad public key size |
| 98 | args: []interface{}{make([]byte, ed25519.SignatureSize)}, |
| 99 | wantErr: errBadPredicate, |
| 100 | }, { |
| 101 | pred: &bc.Predicate{Version: 1, Quorum: 1, Pubkeys: [][]byte{make([]byte, ed25519.PublicKeySize)}}, |
| 102 | args: []interface{}{int64(1)}, // bad signature type |
| 103 | wantErr: errBadArguments, |
| 104 | }, { |
| 105 | pred: &bc.Predicate{Version: 1, Quorum: 0, Pubkeys: [][]byte{make([]byte, ed25519.PublicKeySize)}}, |
| 106 | args: []interface{}{[]byte{}}, // empty sig is skipped |
| 107 | wantErr: nil, |
| 108 | }, { |
| 109 | pred: &bc.Predicate{Version: 1, Quorum: 1, Pubkeys: [][]byte{make([]byte, ed25519.PublicKeySize)}}, |
| 110 | args: []interface{}{[]byte("badsiglen")}, // bad signature length |
| 111 | wantErr: errBadArguments, |
| 112 | }, { |
| 113 | pred: &bc.Predicate{Version: 1, Quorum: 1, Pubkeys: [][]byte{badPubkey}}, |
| 114 | args: []interface{}{badSig}, // failing ed25519 check |
| 115 | wantErr: errBadArguments, |
| 116 | }, { |
| 117 | pred: &bc.Predicate{Version: 1, Quorum: 1, Pubkeys: [][]byte{make([]byte, ed25519.PublicKeySize)}}, |
| 118 | args: []interface{}{[]byte{}}, |
| 119 | wantErr: errBadArguments, // insufficient signatures |
| 120 | }, { |
| 121 | pred: &bc.Predicate{Version: 1, Quorum: 1, Pubkeys: [][]byte{mustDecodeHex("af8c8a878c85b47903bd90e7cdbb239847b7712748064fb16ecbf480c89d3606")}}, |
| 122 | args: []interface{}{mustDecodeHex("59317b3f59a91613d801fbfada0abaf635900af8c84d66f7ad9932baa2a14bd5cad4649b993fced3d162a66ad4c688d8d5f4c943efa3da25383d168210c8980e")}, |
| 123 | wantErr: nil, |
| 124 | }} |
| 125 | |
| 126 | block := &bc.Block{ |
| 127 | UnsignedBlock: &bc.UnsignedBlock{ |
| 128 | BlockHeader: &bc.BlockHeader{ |
| 129 | NextPredicate: &bc.Predicate{ |
| 130 | Version: 1, |
nothing calls this directly
no test coverage detected