// +build !noresumabledigest package digest import ( "fmt" "github.com/jlhawn/go-crypto" // For ResumableHash _ "github.com/jlhawn/go-crypto/sha256" // For Resumable SHA256 _ "github.com/jlhawn/go-crypto/sha512" // For Resumable SHA384, SHA512 ) // resumableDigester implements ResumableDigester. type resumableDigester struct { alg string crypto.ResumableHash } var resumableHashAlgs = map[string]crypto.Hash{ "sha256": crypto.SHA256, "sha384": crypto.SHA384, "sha512": crypto.SHA512, } // NewResumableDigester creates a new ResumableDigester with the given hashing // algorithm. func NewResumableDigester(alg string) (ResumableDigester, error) { hash, supported := resumableHashAlgs[alg] if !supported { return resumableDigester{}, fmt.Errorf("unsupported resumable hash algorithm: %s", alg) } return resumableDigester{ alg: alg, ResumableHash: hash.New(), }, nil } // NewCanonicalResumableDigester creates a ResumableDigester using the default // digest algorithm. func NewCanonicalResumableDigester() ResumableDigester { return resumableDigester{ alg: "sha256", ResumableHash: crypto.SHA256.New(), } } // Digest returns the current digest for this resumable digester. func (d resumableDigester) Digest() Digest { return NewDigest(d.alg, d.ResumableHash) }