Skip to content

Commit

Permalink
pr feedback: use bufio.Reader, Read vs io.ReadFull, renaming
Browse files Browse the repository at this point in the history
Signed-off-by: Maksim An <[email protected]>
  • Loading branch information
anmaxvl committed Oct 28, 2021
1 parent 9cce66a commit 4d2e604
Show file tree
Hide file tree
Showing 6 changed files with 25 additions and 35 deletions.
4 changes: 2 additions & 2 deletions cmd/dmverity-vhd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -213,9 +213,9 @@ var rootHashVHDCommand = cli.Command{
return errors.Wrapf(err, "failed to uncompress layer %s", diffID.String())
}

hash, err := tar2ext4.ConvertAndRootDigest(rc)
hash, err := tar2ext4.ConvertAndComputeRootDigest(rc)
if err != nil {
return errors.Wrapf(err, "failed to compute root hash")
return errors.Wrap(err, "failed to compute root hash")
}
fmt.Fprintf(os.Stdout, "Layer %d\nroot hash: %x\n", layerNumber, hash)
}
Expand Down
19 changes: 7 additions & 12 deletions ext4/dmverity/dmverity.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ import (

const (
blockSize = compactext4.BlockSize
// bufioSize is a default buffer size to use with bufio.Reader
bufioSize = 1024 * 1024 // 1MB
// MerkleTreeBufioSize is a default buffer size to use with bufio.Reader
MerkleTreeBufioSize = 1024 * 1024 // 1MB
// RecommendedVHDSizeGB is the recommended size in GB for VHDs, which is not a hard limit.
RecommendedVHDSizeGB = 128 * 1024 * 1024 * 1024
)
Expand Down Expand Up @@ -73,16 +73,16 @@ type VerityInfo struct {
Version uint32
}

// MerkleTreeWithReader constructs dm-verity hash-tree for a given io.Reader with a fixed salt (0-byte) and algorithm (sha256).
func MerkleTreeWithReader(r io.Reader) ([]byte, error) {
// MerkleTree constructs dm-verity hash-tree for a given bufio.Reader with a fixed salt (0-byte) and algorithm (sha256).
func MerkleTree(br *bufio.Reader) ([]byte, error) {
layers := make([][]byte, 0)
currentLevel := bufio.NewReaderSize(r, bufioSize)
var currentLevel io.Reader = br

for {
nextLevel := bytes.NewBuffer(make([]byte, 0))
for {
block := make([]byte, blockSize)
if _, err := currentLevel.Read(block); err != nil {
if _, err := io.ReadFull(currentLevel, block); err != nil {
if err == io.EOF {
break
}
Expand All @@ -96,7 +96,7 @@ func MerkleTreeWithReader(r io.Reader) ([]byte, error) {
nextLevel.Write(padding)

layers = append(layers, nextLevel.Bytes())
currentLevel = bufio.NewReaderSize(nextLevel, bufioSize)
currentLevel = bufio.NewReaderSize(nextLevel, MerkleTreeBufioSize)

// This means that only root hash remains and our job is done
if nextLevel.Len() == blockSize {
Expand All @@ -114,11 +114,6 @@ func MerkleTreeWithReader(r io.Reader) ([]byte, error) {
return tree.Bytes(), nil
}

// MerkleTree constructs dm-verity hash-tree for a given byte array with a fixed salt (0-byte) and algorithm (sha256).
func MerkleTree(data []byte) ([]byte, error) {
return MerkleTreeWithReader(bytes.NewBuffer(data))
}

// RootHash computes root hash of dm-verity hash-tree
func RootHash(tree []byte) []byte {
return hash2(salt, tree[:blockSize])
Expand Down
8 changes: 4 additions & 4 deletions ext4/tar2ext4/tar2ext4.go
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ func Convert(r io.Reader, w io.ReadWriteSeeker, options ...Option) error {
return err
}

merkleTree, err := dmverity.MerkleTreeWithReader(w)
merkleTree, err := dmverity.MerkleTree(bufio.NewReaderSize(w, dmverity.MerkleTreeBufioSize))
if err != nil {
return errors.Wrap(err, "failed to build merkle tree")
}
Expand Down Expand Up @@ -264,10 +264,10 @@ func ReadExt4SuperBlock(vhdPath string) (*format.SuperBlock, error) {
return &sb, nil
}

// ConvertAndRootDigest writes a compact ext4 file system image that contains the files in the
// ConvertAndComputeRootDigest writes a compact ext4 file system image that contains the files in the
// input tar stream, computes and returns its cryptographic digest. Convert is called with minimal
// options: ConvertWhiteout and MaximumDiskSize set to dmverity.RecommendedVHDSizeGB.
func ConvertAndRootDigest(r io.Reader) (string, error) {
func ConvertAndComputeRootDigest(r io.Reader) (string, error) {
out, err := ioutil.TempFile("", "")
if err != nil {
return "", fmt.Errorf("failed to create temporary file: %s", err)
Expand All @@ -289,7 +289,7 @@ func ConvertAndRootDigest(r io.Reader) (string, error) {
return "", fmt.Errorf("failed to seek start on temp file when creating merkle tree: %s", err)
}

tree, err := dmverity.MerkleTreeWithReader(r)
tree, err := dmverity.MerkleTree(bufio.NewReaderSize(out, dmverity.MerkleTreeBufioSize))
if err != nil {
return "", fmt.Errorf("failed to create merkle tree: %s", err)
}
Expand Down
2 changes: 1 addition & 1 deletion internal/tools/securitypolicy/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ func createPolicyFromConfig(config Config) (securitypolicy.SecurityPolicy, error
return p, err
}

hashString, err := tar2ext4.ConvertAndRootDigest(r)
hashString, err := tar2ext4.ConvertAndComputeRootDigest(r)
if err != nil {
return p, err
}
Expand Down
19 changes: 7 additions & 12 deletions test/vendor/github.com/Microsoft/hcsshim/ext4/dmverity/dmverity.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 4d2e604

Please sign in to comment.