HexBytes formatting; Make computeHashFromAunts more defensive
This commit is contained in:
parent
3cd4dcf13b
commit
f457435199
|
@ -51,3 +51,12 @@ func (bz HexBytes) Bytes() []byte {
|
||||||
func (bz HexBytes) String() string {
|
func (bz HexBytes) String() string {
|
||||||
return strings.ToUpper(hex.EncodeToString(bz))
|
return strings.ToUpper(hex.EncodeToString(bz))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (bz HexBytes) Format(s fmt.State, verb rune) {
|
||||||
|
switch verb {
|
||||||
|
case 'p':
|
||||||
|
s.Write([]byte(fmt.Sprintf("%p", bz)))
|
||||||
|
default:
|
||||||
|
s.Write([]byte(fmt.Sprintf("%X", []byte(bz))))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -43,9 +43,9 @@ func (sp *SimpleProof) StringIndented(indent string) string {
|
||||||
|
|
||||||
// Use the leafHash and innerHashes to get the root merkle hash.
|
// Use the leafHash and innerHashes to get the root merkle hash.
|
||||||
// If the length of the innerHashes slice isn't exactly correct, the result is nil.
|
// If the length of the innerHashes slice isn't exactly correct, the result is nil.
|
||||||
|
// Recursive impl.
|
||||||
func computeHashFromAunts(index int, total int, leafHash []byte, innerHashes [][]byte) []byte {
|
func computeHashFromAunts(index int, total int, leafHash []byte, innerHashes [][]byte) []byte {
|
||||||
// Recursive impl.
|
if index >= total || index < 0 || total <= 0 {
|
||||||
if index >= total {
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
switch total {
|
switch total {
|
||||||
|
@ -80,7 +80,7 @@ func computeHashFromAunts(index int, total int, leafHash []byte, innerHashes [][
|
||||||
// The node and the tree is thrown away afterwards.
|
// The node and the tree is thrown away afterwards.
|
||||||
// Exactly one of node.Left and node.Right is nil, unless node is the root, in which case both are nil.
|
// Exactly one of node.Left and node.Right is nil, unless node is the root, in which case both are nil.
|
||||||
// node.Parent.Hash = hash(node.Hash, node.Right.Hash) or
|
// node.Parent.Hash = hash(node.Hash, node.Right.Hash) or
|
||||||
// hash(node.Left.Hash, node.Hash), depending on whether node is a left/right child.
|
// hash(node.Left.Hash, node.Hash), depending on whether node is a left/right child.
|
||||||
type SimpleProofNode struct {
|
type SimpleProofNode struct {
|
||||||
Hash []byte
|
Hash []byte
|
||||||
Parent *SimpleProofNode
|
Parent *SimpleProofNode
|
||||||
|
|
Loading…
Reference in New Issue