github.com/code-to-go/safepool.lib@v0.0.0-20221205180519-ee25e63c226e/pool/io.go (about)

     1  package pool
     2  
     3  import (
     4  	"io"
     5  
     6  	"github.com/code-to-go/safepool.lib/core"
     7  	"github.com/code-to-go/safepool.lib/security"
     8  	"github.com/code-to-go/safepool.lib/transport"
     9  )
    10  
    11  func (p *Pool) writeFile(name string, r io.Reader) (*security.HashStream, error) {
    12  	hr, err := security.NewHashStream(r, nil)
    13  	if core.IsErr(err, "cannot create hash reader: %v") {
    14  		return nil, err
    15  	}
    16  
    17  	er, err := security.EncryptingReader(p.masterKeyId, p.keyFunc, hr)
    18  	if core.IsErr(err, "cannot create encrypting reader: %v") {
    19  		return nil, err
    20  	}
    21  
    22  	err = p.e.Write(name, er)
    23  	return hr, err
    24  }
    25  
    26  func (p *Pool) readFile(name string, rang *transport.Range, w io.Writer) (*security.HashStream, error) {
    27  	hw, err := security.NewHashStream(nil, w)
    28  	if core.IsErr(err, "cannot create hash stream: %v") {
    29  		return nil, err
    30  	}
    31  
    32  	ew, err := security.DecryptingWriter(p.keyFunc, hw)
    33  	if core.IsErr(err, "cannot create encrypting reader: %v") {
    34  		return nil, err
    35  	}
    36  
    37  	err = p.e.Read(name, rang, ew)
    38  	return hw, err
    39  }