github.com/anacrolix/torrent@v1.61.0/metainfo/pieces.go (about)

     1  package metainfo
     2  
     3  import (
     4  	"crypto/sha1"
     5  	"io"
     6  )
     7  
     8  func GeneratePieces(r io.Reader, pieceLength int64, b []byte) ([]byte, error) {
     9  	for {
    10  		h := sha1.New()
    11  		written, err := io.CopyN(h, r, pieceLength)
    12  		if written > 0 {
    13  			b = h.Sum(b)
    14  		}
    15  		if err == io.EOF {
    16  			return b, nil
    17  		}
    18  		if err != nil {
    19  			return b, err
    20  		}
    21  	}
    22  }