Skip to content

Commit 8063321

Browse files
Recompute signature in signature header tests to make tests throw the right errors (#1162)
<!-- Please read and fill out this form before submitting your PR. Please make sure you have reviewed our contributors guide before submitting your first PR. --> ## Overview Closes: #1163 <!-- Please provide an explanation of the PR, including the appropriate context, background, goal, and rationale. If there is an issue with this information, please provide a tl;dr and link the issue. --> ## Checklist <!-- Please complete the checklist to ensure that the PR is ready to be reviewed. IMPORTANT: PRs should be left in Draft until the below checklist is completed. --> - [x] New and updated code has appropriate documentation - [x] New and updated code has new and/or updated testing - [x] Required CI checks are passing - [ ] Visual proof for any user facing features like CLI or documentation updates - [x] Linked issues closed with keywords
1 parent 8981fd6 commit 8063321

3 files changed

Lines changed: 43 additions & 30 deletions

File tree

state/executor.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ func (e *BlockExecutor) CreateBlock(height uint64, lastCommit *types.Commit, las
104104
BaseHeader: types.BaseHeader{
105105
ChainID: e.chainID,
106106
Height: height,
107-
Time: uint64(time.Now().UnixNano()), // TODO(tzdybal): how to get TAI64?
107+
Time: uint64(time.Now().UnixNano()),
108108
},
109109
//LastHeaderHash: lastHeaderHash,
110110
//LastCommitHash: lastCommitHash,

types/hashing.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,5 @@ func (h *Header) Hash() Hash {
3838

3939
// Hash returns ABCI-compatible hash of a block.
4040
func (b *Block) Hash() Hash {
41-
return b.SignedHeader.Header.Hash()
41+
return b.SignedHeader.Hash()
4242
}

types/signed_header_test.go

Lines changed: 41 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -16,84 +16,97 @@ func TestVerify(t *testing.T) {
1616
untrustedAdj, err := GetNextRandomHeader(trusted, privKey)
1717
require.NoError(t, err)
1818
tests := []struct {
19-
prepare func() *SignedHeader
19+
prepare func() (*SignedHeader, bool)
2020
err bool
2121
}{
2222
{
23-
prepare: func() *SignedHeader { return untrustedAdj },
23+
prepare: func() (*SignedHeader, bool) { return untrustedAdj, false },
2424
err: false,
2525
},
2626
{
27-
prepare: func() *SignedHeader {
27+
prepare: func() (*SignedHeader, bool) {
2828
untrusted := *untrustedAdj
2929
untrusted.AggregatorsHash = GetRandomBytes(32)
30-
return &untrusted
30+
return &untrusted, true
3131
},
3232
err: true,
3333
},
3434
{
35-
prepare: func() *SignedHeader {
35+
prepare: func() (*SignedHeader, bool) {
3636
untrusted := *untrustedAdj
3737
untrusted.LastHeaderHash = GetRandomBytes(32)
38-
return &untrusted
38+
return &untrusted, true
3939
},
4040
err: true,
4141
},
4242
{
43-
prepare: func() *SignedHeader {
43+
prepare: func() (*SignedHeader, bool) {
4444
untrusted := *untrustedAdj
4545
untrusted.LastCommitHash = GetRandomBytes(32)
46-
return &untrusted
46+
return &untrusted, true
4747
},
4848
err: true,
4949
},
5050
{
51-
prepare: func() *SignedHeader {
52-
untrustedAdj.Header.BaseHeader.Height++
53-
return untrustedAdj
51+
prepare: func() (*SignedHeader, bool) {
52+
// Checks for non-adjacency
53+
untrusted := *untrustedAdj
54+
untrusted.Header.BaseHeader.Height++
55+
return &untrusted, true
5456
},
55-
err: true,
57+
err: false, // Accepts non-adjacent headers
5658
},
5759
{
58-
prepare: func() *SignedHeader {
59-
untrustedAdj.Header.BaseHeader.Time = uint64(untrustedAdj.Header.Time().Truncate(time.Hour).UnixNano())
60-
return untrustedAdj
60+
prepare: func() (*SignedHeader, bool) {
61+
untrusted := *untrustedAdj
62+
untrusted.Header.BaseHeader.Time = uint64(untrusted.Header.Time().Truncate(time.Hour).UnixNano())
63+
return &untrusted, true
6164
},
6265
err: true,
6366
},
6467
{
65-
prepare: func() *SignedHeader {
66-
untrustedAdj.Header.BaseHeader.Time = uint64(untrustedAdj.Header.Time().Add(time.Minute).UnixNano())
67-
return untrustedAdj
68+
prepare: func() (*SignedHeader, bool) {
69+
untrusted := *untrustedAdj
70+
untrusted.Header.BaseHeader.Time = uint64(untrusted.Header.Time().Add(time.Minute).UnixNano())
71+
return &untrusted, true
6872
},
6973
err: true,
7074
},
7175
{
72-
prepare: func() *SignedHeader {
73-
untrustedAdj.BaseHeader.ChainID = "toaster"
74-
return untrustedAdj
76+
prepare: func() (*SignedHeader, bool) {
77+
untrusted := *untrustedAdj
78+
untrusted.BaseHeader.ChainID = "toaster"
79+
return &untrusted, false // Signature verification should fail
7580
},
7681
err: true,
7782
},
7883
{
79-
prepare: func() *SignedHeader {
80-
untrustedAdj.Version.App = untrustedAdj.Version.App + 1
81-
return untrustedAdj
84+
prepare: func() (*SignedHeader, bool) {
85+
untrusted := *untrustedAdj
86+
untrusted.Version.App = untrusted.Version.App + 1
87+
return &untrusted, false // Signature verification should fail
8288
},
8389
err: true,
8490
},
8591
{
86-
prepare: func() *SignedHeader {
87-
untrustedAdj.ProposerAddress = nil
88-
return untrustedAdj
92+
prepare: func() (*SignedHeader, bool) {
93+
untrusted := *untrustedAdj
94+
untrusted.ProposerAddress = nil
95+
return &untrusted, true
8996
},
9097
err: true,
9198
},
9299
}
93100

94101
for i, test := range tests {
95102
t.Run(strconv.Itoa(i), func(t *testing.T) {
96-
err := trusted.Verify(test.prepare())
103+
preparedHeader, recomputeCommit := test.prepare()
104+
if recomputeCommit {
105+
commit, err := getCommit(preparedHeader.Header, privKey)
106+
require.NoError(t, err)
107+
preparedHeader.Commit = *commit
108+
}
109+
err = trusted.Verify(preparedHeader)
97110
if test.err {
98111
assert.Error(t, err)
99112
} else {

0 commit comments

Comments
 (0)