github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/kbfs/kbfsmd/merkle_hash.go (about)

     1  // Copyright 2018 Keybase Inc. All rights reserved.
     2  // Use of this source code is governed by a BSD
     3  // license that can be found in the LICENSE file.
     4  
     5  package kbfsmd
     6  
     7  import (
     8  	"encoding"
     9  
    10  	"github.com/keybase/client/go/kbfs/kbfscodec"
    11  	"github.com/keybase/client/go/kbfs/kbfshash"
    12  )
    13  
    14  // MerkleHash is the hash of a RootMetadataSigned block.
    15  type MerkleHash struct {
    16  	h kbfshash.Hash
    17  }
    18  
    19  // MakeMerkleHash hashes the given signed RootMetadata object.
    20  func MakeMerkleHash(codec kbfscodec.Codec, md *RootMetadataSigned) (MerkleHash, error) {
    21  	buf, err := codec.Encode(md)
    22  	if err != nil {
    23  		return MerkleHash{}, err
    24  	}
    25  	h, err := kbfshash.DefaultHash(buf)
    26  	if err != nil {
    27  		return MerkleHash{}, err
    28  	}
    29  	return MerkleHash{h}, nil
    30  }
    31  
    32  var _ encoding.BinaryMarshaler = MerkleHash{}
    33  var _ encoding.BinaryUnmarshaler = (*MerkleHash)(nil)
    34  
    35  // Bytes returns the bytes of the MerkleHash.
    36  func (h MerkleHash) Bytes() []byte {
    37  	return h.h.Bytes()
    38  }
    39  
    40  // String returns the string form of the MerkleHash.
    41  func (h MerkleHash) String() string {
    42  	return h.h.String()
    43  }
    44  
    45  // MarshalBinary implements the encoding.BinaryMarshaler interface for
    46  // MerkleHash. Returns an error if the MerkleHash is invalid and not the
    47  // zero MerkleHash.
    48  func (h MerkleHash) MarshalBinary() (data []byte, err error) {
    49  	return h.h.MarshalBinary()
    50  }
    51  
    52  // UnmarshalBinary implements the encoding.BinaryUnmarshaler interface
    53  // for MerkleHash. Returns an error if the given byte array is non-empty and
    54  // the MerkleHash is invalid.
    55  func (h *MerkleHash) UnmarshalBinary(data []byte) error {
    56  	return h.h.UnmarshalBinary(data)
    57  }