const ( // MerkleTreeBufioSize is a default buffer size to use with bufio.Reader MerkleTreeBufioSize = memory.MiB // 1MB // RecommendedVHDSizeGB is the recommended size in GB for VHDs, which is not a hard limit. RecommendedVHDSizeGB = 128 * memory.GiB // VeritySignature is a value written to dm-verity super-block. VeritySignature = "verity" )
var ( ErrSuperBlockReadFailure = errors.New("failed to read dm-verity super block") ErrSuperBlockParseFailure = errors.New("failed to parse dm-verity super block") ErrRootHashReadFailure = errors.New("failed to read dm-verity root hash") ErrNotVeritySuperBlock = errors.New("invalid dm-verity super-block signature") )
func ComputeAndWriteHashDevice(r io.ReadSeeker, w io.WriteSeeker) error
ComputeAndWriteHashDevice builds merkle tree from a given io.ReadSeeker and writes the result hash device (dm-verity super-block combined with merkle tree) to io.WriteSeeker.
func MerkleTree(r io.Reader) ([]byte, error)
MerkleTree constructs dm-verity hash-tree for a given io.Reader with a fixed salt (0-byte) and algorithm (sha256).
func NewDMVeritySuperblock(size uint64) *dmveritySuperblock
NewDMVeritySuperblock returns a dm-verity superblock for a device with a given size, salt, algorithm and versions are fixed.
func RootHash(tree []byte) []byte
RootHash computes root hash of dm-verity hash-tree
VerityInfo is minimal exported version of dmveritySuperblock
type VerityInfo struct { // Offset in blocks on hash device HashOffsetInBlocks int64 // Set to true, when dm-verity super block is also written on the hash device SuperBlock bool RootDigest string Salt string Algorithm string DataBlockSize uint32 HashBlockSize uint32 DataBlocks uint64 Version uint32 }
func ReadDMVerityInfo(vhdPath string, offsetInBytes int64) (*VerityInfo, error)
ReadDMVerityInfo extracts dm-verity super block information and merkle tree root hash