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 }