From 34cf84ca83cd7596504a2e809083b82b5775bcfe Mon Sep 17 00:00:00 2001 From: Rootul P Date: Wed, 3 May 2023 09:07:34 -0400 Subject: [PATCH] feat: export `VerifyLeafHashes` (#189) --- proof.go | 8 ++++---- proof_test.go | 20 ++++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/proof.go b/proof.go index 01034a9..6fb8aee 100644 --- a/proof.go +++ b/proof.go @@ -212,14 +212,14 @@ func (proof Proof) VerifyNamespace(h hash.Hash, nID namespace.ID, leaves [][]byt return false } // with verifyCompleteness set to true: - res, err := proof.verifyLeafHashes(nth, true, nID, gotLeafHashes, root) + res, err := proof.VerifyLeafHashes(nth, true, nID, gotLeafHashes, root) if err != nil { return false } return res } -// The verifyLeafHashes function checks whether the given proof is a valid Merkle +// The VerifyLeafHashes function checks whether the given proof is a valid Merkle // range proof for the leaves in the leafHashes input. It returns true or false accordingly. // If there is an issue during the proof verification e.g., a node does not conform to the namespace hash format, then a proper error is returned to indicate the root cause of the issue. // The leafHashes parameter is a list of leaf hashes, where each leaf hash is represented @@ -228,7 +228,7 @@ func (proof Proof) VerifyNamespace(h hash.Hash, nID namespace.ID, leaves [][]byt // the completeness of the proof by verifying that there is no leaf in the // tree represented by the root parameter that matches the namespace ID nID // but is not present in the leafHashes list. -func (proof Proof) verifyLeafHashes(nth *Hasher, verifyCompleteness bool, nID namespace.ID, leafHashes [][]byte, root []byte) (bool, error) { +func (proof Proof) VerifyLeafHashes(nth *Hasher, verifyCompleteness bool, nID namespace.ID, leafHashes [][]byte, root []byte) (bool, error) { // check that the proof range is valid if proof.Start() < 0 || proof.Start() >= proof.End() { return false, fmt.Errorf("proof range [proof.start=%d, proof.end=%d) is not valid: %w", proof.Start(), proof.End(), ErrInvalidRange) @@ -401,7 +401,7 @@ func (proof Proof) VerifyInclusion(h hash.Hash, nid namespace.ID, leavesWithoutN hashes[i] = res } - res, err := proof.verifyLeafHashes(nth, false, nid, hashes, root) + res, err := proof.VerifyLeafHashes(nth, false, nid, hashes, root) if err != nil { return false } diff --git a/proof_test.go b/proof_test.go index 1178bf5..da5c371 100644 --- a/proof_test.go +++ b/proof_test.go @@ -350,7 +350,7 @@ func TestVerifyLeafHashes_Err(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - _, err := tt.proof.verifyLeafHashes(tt.Hasher, tt.verifyCompleteness, tt.nID, tt.leafHashes, tt.root) + _, err := tt.proof.VerifyLeafHashes(tt.Hasher, tt.verifyCompleteness, tt.nID, tt.leafHashes, tt.root) assert.Equal(t, tt.wantErr, err != nil) }) } @@ -556,19 +556,19 @@ func TestVerifyLeafHashes_False(t *testing.T) { args args result bool }{ - {"nID size of proof < nID size of verifyLeafHashes' nmt hasher", proof4_1, args{2, nid4_2, [][]byte{leafHash2}, root2}, false}, - {"nID size of proof > nID size of verifyLeafHashes' nmt hasher", proof4_2, args{1, nid4_1, [][]byte{leafHash1}, root1}, false}, - {"nID size of root < nID size of verifyLeafHashes' nmt hasher", proof4_2, args{2, nid4_2, [][]byte{leafHash2}, root1}, false}, - {"nID size of root > nID size of verifyLeafHashes' nmt hasher", proof4_1, args{1, nid4_1, [][]byte{leafHash1}, root2}, false}, - {"size of queried nID > nID size of verifyLeafHashes' nmt hasher", proof4_1, args{1, nid4_2, [][]byte{leafHash1}, root1}, false}, - {"size of queried nID < nID size of verifyLeafHashes' nmt hasher", proof4_2, args{2, nid4_1, [][]byte{leafHash2}, root2}, false}, - {"nID size of leafHash < nID size of verifyLeafHashes' nmt hasher", proof4_2, args{2, nid4_2, [][]byte{leafHash1}, root2}, false}, - {"nID size of leafHash > nID size of verifyLeafHashes' nmt hasher", proof4_1, args{1, nid4_1, [][]byte{leafHash2}, root1}, false}, + {"nID size of proof < nID size of VerifyLeafHashes' nmt hasher", proof4_1, args{2, nid4_2, [][]byte{leafHash2}, root2}, false}, + {"nID size of proof > nID size of VerifyLeafHashes' nmt hasher", proof4_2, args{1, nid4_1, [][]byte{leafHash1}, root1}, false}, + {"nID size of root < nID size of VerifyLeafHashes' nmt hasher", proof4_2, args{2, nid4_2, [][]byte{leafHash2}, root1}, false}, + {"nID size of root > nID size of VerifyLeafHashes' nmt hasher", proof4_1, args{1, nid4_1, [][]byte{leafHash1}, root2}, false}, + {"size of queried nID > nID size of VerifyLeafHashes' nmt hasher", proof4_1, args{1, nid4_2, [][]byte{leafHash1}, root1}, false}, + {"size of queried nID < nID size of VerifyLeafHashes' nmt hasher", proof4_2, args{2, nid4_1, [][]byte{leafHash2}, root2}, false}, + {"nID size of leafHash < nID size of VerifyLeafHashes' nmt hasher", proof4_2, args{2, nid4_2, [][]byte{leafHash1}, root2}, false}, + {"nID size of leafHash > nID size of VerifyLeafHashes' nmt hasher", proof4_1, args{1, nid4_1, [][]byte{leafHash2}, root1}, false}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { hasher := NewNmtHasher(sha256.New(), tt.args.nIDSize, true) - got, _ := tt.proof.verifyLeafHashes(hasher, true, tt.args.nID, tt.args.leaves, tt.args.root) + got, _ := tt.proof.VerifyLeafHashes(hasher, true, tt.args.nID, tt.args.leaves, tt.args.root) assert.Equal(t, tt.result, got) }) }