var ( // ErrDigestInvalidFormat returned when digest format invalid. ErrDigestInvalidFormat = fmt.Errorf("invalid checksum digest format") // ErrDigestInvalidLength returned when digest has invalid length. ErrDigestInvalidLength = fmt.Errorf("invalid checksum digest length") // ErrDigestUnsupported returned when the digest algorithm is unsupported. ErrDigestUnsupported = fmt.Errorf("unsupported digest algorithm") )
DigestRegexp matches valid digest types.
var DigestRegexp = regexp.MustCompile(`[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+`)
DigestRegexpAnchored matches valid digest types, anchored to the start and end of the match.
var DigestRegexpAnchored = regexp.MustCompile(`^` + DigestRegexp.String() + `$`)
Algorithm identifies and implementation of a digester by an identifier. Note the that this defines both the hash algorithm used and the string encoding.
type Algorithm string
supported digest types
const ( SHA256 Algorithm = "sha256" // sha256 with hex encoding (lower case only) SHA384 Algorithm = "sha384" // sha384 with hex encoding (lower case only) SHA512 Algorithm = "sha512" // sha512 with hex encoding (lower case only) // Canonical is the primary digest algorithm used with the distribution // project. Other digests may be used but this one is the primary storage // digest. Canonical = SHA256 )
func (a Algorithm) Available() bool
Available returns true if the digest type is available for use. If this returns false, Digester and Hash will return nil.
func (a Algorithm) Digester() Digester
Digester returns a new digester for the specified algorithm. If the algorithm does not have a digester implementation, nil will be returned. This can be checked by calling Available before calling Digester.
func (a Algorithm) Encode(d []byte) string
Encode encodes the raw bytes of a digest, typically from a hash.Hash, into the encoded portion of the digest.
func (a Algorithm) FromBytes(p []byte) Digest
FromBytes digests the input and returns a Digest.
func (a Algorithm) FromReader(rd io.Reader) (Digest, error)
FromReader returns the digest of the reader using the algorithm.
func (a Algorithm) FromString(s string) Digest
FromString digests the string input and returns a Digest.
func (a Algorithm) Hash() hash.Hash
Hash returns a new hash as used by the algorithm. If not available, the method will panic. Check Algorithm.Available() before calling.
func (a *Algorithm) Set(value string) error
Set implemented to allow use of Algorithm as a command line flag.
func (a Algorithm) Size() int
Size returns number of bytes returned by the hash.
func (a Algorithm) String() string
func (a Algorithm) Validate(encoded string) error
Validate validates the encoded portion string
Digest allows simple protection of hex formatted digest strings, prefixed by their algorithm. Strings of type Digest have some guarantee of being in the correct format and it provides quick access to the components of a digest string.
The following is an example of the contents of Digest types:
sha256:7173b809ca12ec5dee4506cd86be934c4596dd234ee82c0662eac04a8c2c71dc
This allows to abstract the digest behind this type and work only in those terms.
type Digest string
func FromBytes(p []byte) Digest
FromBytes digests the input and returns a Digest.
func FromReader(rd io.Reader) (Digest, error)
FromReader consumes the content of rd until io.EOF, returning canonical digest.
func FromString(s string) Digest
FromString digests the input and returns a Digest.
func NewDigest(alg Algorithm, h hash.Hash) Digest
NewDigest returns a Digest from alg and a hash.Hash object.
func NewDigestFromBytes(alg Algorithm, p []byte) Digest
NewDigestFromBytes returns a new digest from the byte contents of p. Typically, this can come from hash.Hash.Sum(...) or xxx.SumXXX(...) functions. This is also useful for rebuilding digests from binary serializations.
func NewDigestFromEncoded(alg Algorithm, encoded string) Digest
NewDigestFromEncoded returns a Digest from alg and the encoded digest.
func NewDigestFromHex(alg, hex string) Digest
NewDigestFromHex is deprecated. Please use NewDigestFromEncoded.
func Parse(s string) (Digest, error)
Parse parses s and returns the validated digest object. An error will be returned if the format is invalid.
func (d Digest) Algorithm() Algorithm
Algorithm returns the algorithm portion of the digest. This will panic if the underlying digest is not in a valid format.
func (d Digest) Encoded() string
Encoded returns the encoded portion of the digest. This will panic if the underlying digest is not in a valid format.
func (d Digest) Hex() string
Hex is deprecated. Please use Digest.Encoded.
func (d Digest) String() string
func (d Digest) Validate() error
Validate checks that the contents of d is a valid digest, returning an error if not.
func (d Digest) Verifier() Verifier
Verifier returns a writer object that can be used to verify a stream of content against the digest. If the digest is invalid, the method will panic.
Digester calculates the digest of written data. Writes should go directly to the return value of Hash, while calling Digest will return the current value of the digest.
type Digester interface { Hash() hash.Hash // provides direct access to underlying hash instance. Digest() Digest }
Verifier presents a general verification interface to be used with message digests and other byte stream verifications. Users instantiate a Verifier from one of the various methods, write the data under test to it then check the result with the Verified method.
type Verifier interface { io.Writer // Verified will return true if the content written to Verifier matches // the digest. Verified() bool }