MCPcopy Create free account
hub / github.com/containers/image / newDigestingReader

Function newDigestingReader

copy/digesting_reader.go:23–41  ·  view source on GitHub ↗

newDigestingReader returns an io.Reader implementation with contents of source, which will eventually return a non-EOF error or set validationSucceeded/validationFailed to true if the source stream does/does not match expectedDigest. (neither is set if EOF is never reached).

(source io.Reader, expectedDigest digest.Digest)

Source from the content-addressed store, hash-verified

21// or set validationSucceeded/validationFailed to true if the source stream does/does not match expectedDigest.
22// (neither is set if EOF is never reached).
23func newDigestingReader(source io.Reader, expectedDigest digest.Digest) (*digestingReader, error) {
24 var digester digest.Digester
25 if err := expectedDigest.Validate(); err != nil {
26 return nil, fmt.Errorf("invalid digest specification %q: %w", expectedDigest, err)
27 }
28 digestAlgorithm := expectedDigest.Algorithm()
29 if !digestAlgorithm.Available() {
30 return nil, fmt.Errorf("invalid digest specification %q: unsupported digest algorithm %q", expectedDigest, digestAlgorithm)
31 }
32 digester = digestAlgorithm.Digester()
33
34 return &digestingReader{
35 source: source,
36 digester: digester,
37 hash: digester.Hash(),
38 expectedDigest: expectedDigest,
39 validationFailed: false,
40 }, nil
41}
42
43func (d *digestingReader) Read(p []byte) (int, error) {
44 n, err := d.source.Read(p)

Callers 3

TestNewDigestingReaderFunction · 0.85
TestDigestingReaderReadFunction · 0.85
copyBlobFromStreamMethod · 0.85

Calls

no outgoing calls

Tested by 2

TestNewDigestingReaderFunction · 0.68
TestDigestingReaderReadFunction · 0.68

Used in the wild real call sites across dependent graphs

searching dependent graphs…