Skip to content

Commit 5812afb

Browse files
committed
Ensured partial hash is used for admin blocks in directory block and other places as per FactomProject/WorkItems#584 .
1 parent 58bdce1 commit 5812afb

6 files changed

Lines changed: 61 additions & 22 deletions

File tree

common/adminBlock.go

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,28 @@ type AdminBlock struct {
3434
ABEntries []ABEntry //Interface
3535

3636
//Not Marshalized
37-
abHash *Hash
37+
fullHash *Hash //SHA512Half
38+
partialHash *Hash //SHA256
3839
}
3940

40-
func (ab *AdminBlock) ABHash() (*Hash, error) {
41-
if ab.abHash == nil {
42-
err := ab.buildABHash()
41+
func (ab *AdminBlock) FullHash() (*Hash, error) {
42+
if ab.fullHash == nil {
43+
err := ab.buildFullBHash()
4344
if err != nil {
4445
return nil, err
4546
}
4647
}
47-
return ab.abHash, nil
48+
return ab.fullHash, nil
49+
}
50+
51+
func (ab *AdminBlock) PartialHash() (*Hash, error) {
52+
if ab.partialHash == nil {
53+
err := ab.buildPartialHash()
54+
if err != nil {
55+
return nil, err
56+
}
57+
}
58+
return ab.partialHash, nil
4859
}
4960

5061
// Create an empty Admin Block
@@ -63,7 +74,7 @@ func CreateAdminBlock(chain *AdminChain, prev *AdminBlock, cap uint) (b *AdminBl
6374
if prev == nil {
6475
b.Header.PrevFullHash = NewHash()
6576
} else {
66-
b.Header.PrevFullHash, err = prev.ABHash()
77+
b.Header.PrevFullHash, err = prev.FullHash()
6778
if err != nil {
6879
return
6980
}
@@ -75,14 +86,25 @@ func CreateAdminBlock(chain *AdminChain, prev *AdminBlock, cap uint) (b *AdminBl
7586
return b, err
7687
}
7788

78-
// Build the sha hash for the admin block
79-
func (b *AdminBlock) buildABHash() (err error) {
89+
// Build the SHA512Half hash for the admin block
90+
func (b *AdminBlock) buildFullBHash() (err error) {
91+
var binaryAB []byte
92+
binaryAB, err = b.MarshalBinary()
93+
if err != nil {
94+
return
95+
}
96+
b.fullHash = Sha512Half(binaryAB)
97+
return
98+
}
99+
100+
// Build the SHA256 hash for the admin block
101+
func (b *AdminBlock) buildPartialHash() (err error) {
80102
var binaryAB []byte
81103
binaryAB, err = b.MarshalBinary()
82104
if err != nil {
83105
return
84106
}
85-
b.abHash = Sha512Half(binaryAB)
107+
b.partialHash = Sha(binaryAB)
86108
return
87109
}
88110

common/adminBlock_test.go

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,23 @@ func TestAdminBlockPreviousHash(t *testing.T) {
1919
t.Error(err)
2020
}
2121

22-
abHash, err := block.ABHash()
22+
fullHash, err := block.FullHash()
2323
if err != nil {
2424
t.Error(err)
2525
}
2626

27-
t.Logf("Current hash - %s", abHash.String())
27+
partialHash, err := block.PartialHash()
28+
if err != nil {
29+
t.Error(err)
30+
}
2831

29-
if abHash.String() != "0a9aa1efbe7d0e8d9c1d460d1c78e3e7b50f984e65a3f3ee7b73100a94189dbf" {
30-
t.Error("Invalid ABHash")
32+
t.Logf("Current hashes - %s, %s", fullHash.String(), partialHash.String())
33+
34+
if fullHash.String() != "0a9aa1efbe7d0e8d9c1d460d1c78e3e7b50f984e65a3f3ee7b73100a94189dbf" {
35+
t.Error("Invalid fullHash")
36+
}
37+
if partialHash.String() != "4fb409d5369fad6aa7768dc620f11cd219f9b885956b631ad050962ca934052e" {
38+
t.Error("Invalid partialHash")
3139
}
3240

3341
aChain := new(AdminChain)
@@ -39,12 +47,17 @@ func TestAdminBlockPreviousHash(t *testing.T) {
3947
t.Error(err)
4048
}
4149

42-
abHash2, err := block2.ABHash()
50+
fullHash2, err := block2.FullHash()
51+
if err != nil {
52+
t.Error(err)
53+
}
54+
55+
partialHash2, err := block2.PartialHash()
4356
if err != nil {
4457
t.Error(err)
4558
}
4659

47-
t.Logf("Second hash - %s", abHash2.String())
60+
t.Logf("Second hashes - %s, %s", fullHash2.String(), partialHash2.String())
4861
t.Logf("Previous hash - %s", block2.Header.PrevFullHash.String())
4962

5063
marshalled, err := block2.MarshalBinary()
@@ -53,7 +66,7 @@ func TestAdminBlockPreviousHash(t *testing.T) {
5366
}
5467
t.Logf("Marshalled - %X", marshalled)
5568

56-
if block2.Header.PrevFullHash.String() != abHash.String() {
69+
if block2.Header.PrevFullHash.String() != fullHash.String() {
5770
t.Error("PrevFullHash does not match ABHash")
5871
}
5972
}

common/directoryBlock.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ func NewDBEntryFromABlock(b *AdminBlock) *DBEntry {
136136
e := &DBEntry{}
137137

138138
e.ChainID = b.Header.AdminChainID
139-
e.KeyMR, _ = b.ABHash()
139+
e.KeyMR, _ = b.PartialHash()
140140

141141
return e
142142
}
@@ -385,7 +385,7 @@ func (c *DChain) AddABlockToDBEntry(b *AdminBlock) (err error) {
385385

386386
dbEntry := &DBEntry{}
387387
dbEntry.ChainID = b.Header.AdminChainID
388-
dbEntry.KeyMR, err = b.ABHash()
388+
dbEntry.KeyMR, err = b.PartialHash()
389389
if err != nil {
390390
return
391391
}

database/ldb/ablock.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ func (db *LevelDb) ProcessABlockBatch(block *common.AdminBlock) error {
2424
return err
2525
}
2626

27-
abHash, err := block.ABHash()
27+
abHash, err := block.PartialHash()
2828
if err != nil {
2929
return err
3030
}
@@ -95,7 +95,7 @@ func (db *LevelDb) FetchAllABlocks() (aBlocks []common.AdminBlock, err error) {
9595
return nil, err
9696
}
9797
//TODO: to be optimized??
98-
_, err = aBlock.ABHash()
98+
_, err = aBlock.PartialHash()
9999
if err != nil {
100100
return nil, err
101101
}

process/processor.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -977,7 +977,11 @@ func newAdminBlock(chain *common.AdminChain) *common.AdminBlock {
977977

978978
block.Header.MessageCount = uint32(len(block.ABEntries))
979979
block.Header.BodySize = uint32(block.MarshalledSize() - block.Header.MarshalledSize())
980-
_, err := block.ABHash()
980+
_, err := block.PartialHash()
981+
if err != nil {
982+
panic(err)
983+
}
984+
_, err = block.FullHash()
981985
if err != nil {
982986
panic(err)
983987
}

process/syncup.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ func processABlock(msg *wire.MsgABlock) error {
8282
}
8383

8484
//Add it to mem pool before saving it in db
85-
abHash, err := msg.ABlk.ABHash()
85+
abHash, err := msg.ABlk.PartialHash()
8686
if err != nil {
8787
return err
8888
}

0 commit comments

Comments
 (0)