github.com/aavshr/aws-sdk-go@v1.41.3/service/glacier/treehash_test.go (about)

     1  package glacier_test
     2  
     3  import (
     4  	"bytes"
     5  	"crypto/sha256"
     6  	"fmt"
     7  	"io"
     8  
     9  	"github.com/aavshr/aws-sdk-go/service/glacier"
    10  )
    11  
    12  func ExampleComputeHashes() {
    13  	r := testCreateReader()
    14  
    15  	h := glacier.ComputeHashes(r)
    16  	n, _ := r.Seek(0, 1) // Check position after checksumming
    17  
    18  	fmt.Printf("linear: %x\n", h.LinearHash)
    19  	fmt.Printf("tree: %x\n", h.TreeHash)
    20  	fmt.Printf("pos: %d\n", n)
    21  
    22  	// Output:
    23  	// linear: 68aff0c5a91aa0491752bfb96e3fef33eb74953804f6a2f7b708d5bcefa8ff6b
    24  	// tree: 154e26c78fd74d0c2c9b3cc4644191619dc4f2cd539ae2a74d5fd07957a3ee6a
    25  	// pos: 0
    26  }
    27  
    28  func testCreateReader() io.ReadSeeker {
    29  	buf := make([]byte, 5767168) // 5.5MB buffer
    30  	for i := range buf {
    31  		buf[i] = '0' // Fill with zero characters
    32  	}
    33  
    34  	return bytes.NewReader(buf)
    35  }
    36  
    37  func ExampleComputeTreeHash() {
    38  	r := testCreateReader()
    39  
    40  	const chunkSize = 1024 * 1024 // 1MB
    41  	buf := make([]byte, chunkSize)
    42  	hashes := [][]byte{}
    43  
    44  	for {
    45  		// Reach 1MB chunks from reader to generate hashes from
    46  		n, err := io.ReadAtLeast(r, buf, chunkSize)
    47  		if n == 0 {
    48  			break
    49  		}
    50  
    51  		tmpHash := sha256.Sum256(buf[:n])
    52  		hashes = append(hashes, tmpHash[:])
    53  		if err != nil {
    54  			break // last chunk
    55  		}
    56  	}
    57  
    58  	treeHash := glacier.ComputeTreeHash(hashes)
    59  	fmt.Printf("TreeHash: %x\n", treeHash)
    60  
    61  	// Output:
    62  	// TreeHash: 154e26c78fd74d0c2c9b3cc4644191619dc4f2cd539ae2a74d5fd07957a3ee6a
    63  }