commit
						303f1899bb
					
				
							
								
								
									
										4
									
								
								go.mod
								
								
								
								
							
							
						
						
									
										4
									
								
								go.mod
								
								
								
								
							|  | @ -29,8 +29,8 @@ require ( | ||||||
| 	github.com/mitchellh/mapstructure v1.1.2 | 	github.com/mitchellh/mapstructure v1.1.2 | ||||||
| 	github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f // indirect | 	github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f // indirect | ||||||
| 	github.com/ncw/swift v1.0.47 | 	github.com/ncw/swift v1.0.47 | ||||||
| 	github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420 | 	github.com/opencontainers/go-digest v1.0.0-rc1 | ||||||
| 	github.com/opencontainers/image-spec v1.0.0 | 	github.com/opencontainers/image-spec v1.0.1 | ||||||
| 	github.com/satori/go.uuid v1.2.0 // indirect | 	github.com/satori/go.uuid v1.2.0 // indirect | ||||||
| 	github.com/sirupsen/logrus v1.4.2 | 	github.com/sirupsen/logrus v1.4.2 | ||||||
| 	github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a // indirect | 	github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a // indirect | ||||||
|  |  | ||||||
							
								
								
									
										8
									
								
								go.sum
								
								
								
								
							
							
						
						
									
										8
									
								
								go.sum
								
								
								
								
							|  | @ -95,10 +95,10 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb | ||||||
| github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= | github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= | ||||||
| github.com/ncw/swift v1.0.47 h1:4DQRPj35Y41WogBxyhOXlrI37nzGlyEcsforeudyYPQ= | github.com/ncw/swift v1.0.47 h1:4DQRPj35Y41WogBxyhOXlrI37nzGlyEcsforeudyYPQ= | ||||||
| github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= | github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= | ||||||
| github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420 h1:Yu3681ykYHDfLoI6XVjL4JWmkE+3TX9yfIWwRCh1kFM= | github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ= | ||||||
| github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= | github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= | ||||||
| github.com/opencontainers/image-spec v1.0.0 h1:jcw3cCH887bLKETGYpv8afogdYchbShR0eH6oD9d5PQ= | github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI= | ||||||
| github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= | github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= | ||||||
| github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | ||||||
| github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | ||||||
| github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||||||
|  |  | ||||||
|  | @ -0,0 +1 @@ | ||||||
|  | Stephen J Day <stephen.day@docker.com> <stevvooe@users.noreply.github.com> | ||||||
|  | @ -1,5 +1,7 @@ | ||||||
|  | Aaron Lehmann <aaron.lehmann@docker.com> (@aaronlehmann) | ||||||
| Brandon Philips <brandon.philips@coreos.com> (@philips) | Brandon Philips <brandon.philips@coreos.com> (@philips) | ||||||
| Brendan Burns <bburns@microsoft.com> (@brendandburns) | Brendan Burns <bburns@microsoft.com> (@brendandburns) | ||||||
|  | Derek McGowan <derek@mcgstyle.net> (@dmcgowan) | ||||||
| Jason Bouzane <jbouzane@google.com> (@jbouzane) | Jason Bouzane <jbouzane@google.com> (@jbouzane) | ||||||
| John Starks <jostarks@microsoft.com> (@jstarks) | John Starks <jostarks@microsoft.com> (@jstarks) | ||||||
| Jonathan Boulle <jon.boulle@coreos.com> (@jonboulle) | Jonathan Boulle <jon.boulle@coreos.com> (@jonboulle) | ||||||
|  |  | ||||||
|  | @ -1,10 +1,10 @@ | ||||||
| # go-digest | # go-digest | ||||||
| 
 | 
 | ||||||
| [](https://godoc.org/github.com/docker/go-digest) [](https://goreportcard.com/report/github.com/docker/go-digest) [](https://travis-ci.org/docker/go-digest) | [](https://godoc.org/github.com/opencontainers/go-digest) [](https://goreportcard.com/report/github.com/opencontainers/go-digest) [](https://travis-ci.org/opencontainers/go-digest) | ||||||
| 
 | 
 | ||||||
| Common digest package used across the container ecosystem. | Common digest package used across the container ecosystem. | ||||||
| 
 | 
 | ||||||
| Please see the [godoc](https://godoc.org/github.com/docker/go-digest) for more information. | Please see the [godoc](https://godoc.org/github.com/opencontainers/go-digest) for more information. | ||||||
| 
 | 
 | ||||||
| # What is a digest? | # What is a digest? | ||||||
| 
 | 
 | ||||||
|  | @ -49,7 +49,7 @@ can power a rich, safe, content distribution system. | ||||||
| 
 | 
 | ||||||
| # Usage | # Usage | ||||||
| 
 | 
 | ||||||
| While the [godoc](https://godoc.org/github.com/docker/go-digest) is  | While the [godoc](https://godoc.org/github.com/opencontainers/go-digest) is | ||||||
| considered the best resource, a few important items need to be called  | considered the best resource, a few important items need to be called  | ||||||
| out when using this package. | out when using this package. | ||||||
| 
 | 
 | ||||||
|  | @ -76,7 +76,7 @@ out when using this package. | ||||||
| 
 | 
 | ||||||
| The Go API, at this stage, is considered stable, unless otherwise noted. | The Go API, at this stage, is considered stable, unless otherwise noted. | ||||||
| 
 | 
 | ||||||
| As always, before using a package export, read the [godoc](https://godoc.org/github.com/docker/go-digest). | As always, before using a package export, read the [godoc](https://godoc.org/github.com/opencontainers/go-digest). | ||||||
| 
 | 
 | ||||||
| # Contributing | # Contributing | ||||||
| 
 | 
 | ||||||
|  | @ -88,16 +88,16 @@ the alternatives you tried before submitting a PR. | ||||||
| 
 | 
 | ||||||
| # Reporting security issues | # Reporting security issues | ||||||
| 
 | 
 | ||||||
| The maintainers take security seriously. If you discover a security  | Please DO NOT file a public issue, instead send your report privately to | ||||||
| issue, please bring it to their attention right away! | security@opencontainers.org. | ||||||
| 
 | 
 | ||||||
| Please DO NOT file a public issue, instead send your report privately | The maintainers take security seriously. If you discover a security issue, | ||||||
| to security@docker.com. | please bring it to their attention right away! | ||||||
| 
 | 
 | ||||||
| Security reports are greatly appreciated and we will publicly thank you  | If you are reporting a security issue, do not create an issue or file a pull | ||||||
| for it. We also like to send gifts—if you're into Docker schwag, make  | request on GitHub. Instead, disclose the issue responsibly by sending an email | ||||||
| sure to let us know. We currently do not offer a paid security bounty  | to security@opencontainers.org (which is inhabited only by the maintainers of | ||||||
| program, but are not ruling it out in the future. | the various OCI projects). | ||||||
| 
 | 
 | ||||||
| # Copyright and license | # Copyright and license | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,3 +1,17 @@ | ||||||
|  | // Copyright 2017 Docker, Inc.
 | ||||||
|  | //
 | ||||||
|  | // Licensed under the Apache License, Version 2.0 (the "License");
 | ||||||
|  | // you may not use this file except in compliance with the License.
 | ||||||
|  | // You may obtain a copy of the License at
 | ||||||
|  | //
 | ||||||
|  | //     https://www.apache.org/licenses/LICENSE-2.0
 | ||||||
|  | //
 | ||||||
|  | // Unless required by applicable law or agreed to in writing, software
 | ||||||
|  | // distributed under the License is distributed on an "AS IS" BASIS,
 | ||||||
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | ||||||
|  | // See the License for the specific language governing permissions and
 | ||||||
|  | // limitations under the License.
 | ||||||
|  | 
 | ||||||
| package digest | package digest | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
|  | @ -5,6 +19,7 @@ import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"hash" | 	"hash" | ||||||
| 	"io" | 	"io" | ||||||
|  | 	"regexp" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // Algorithm identifies and implementation of a digester by an identifier.
 | // Algorithm identifies and implementation of a digester by an identifier.
 | ||||||
|  | @ -14,9 +29,9 @@ type Algorithm string | ||||||
| 
 | 
 | ||||||
| // supported digest types
 | // supported digest types
 | ||||||
| const ( | const ( | ||||||
| 	SHA256 Algorithm = "sha256" // sha256 with hex encoding
 | 	SHA256 Algorithm = "sha256" // sha256 with hex encoding (lower case only)
 | ||||||
| 	SHA384 Algorithm = "sha384" // sha384 with hex encoding
 | 	SHA384 Algorithm = "sha384" // sha384 with hex encoding (lower case only)
 | ||||||
| 	SHA512 Algorithm = "sha512" // sha512 with hex encoding
 | 	SHA512 Algorithm = "sha512" // sha512 with hex encoding (lower case only)
 | ||||||
| 
 | 
 | ||||||
| 	// Canonical is the primary digest algorithm used with the distribution
 | 	// Canonical is the primary digest algorithm used with the distribution
 | ||||||
| 	// project. Other digests may be used but this one is the primary storage
 | 	// project. Other digests may be used but this one is the primary storage
 | ||||||
|  | @ -36,6 +51,14 @@ var ( | ||||||
| 		SHA384: crypto.SHA384, | 		SHA384: crypto.SHA384, | ||||||
| 		SHA512: crypto.SHA512, | 		SHA512: crypto.SHA512, | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	// anchoredEncodedRegexps contains anchored regular expressions for hex-encoded digests.
 | ||||||
|  | 	// Note that /A-F/ disallowed.
 | ||||||
|  | 	anchoredEncodedRegexps = map[Algorithm]*regexp.Regexp{ | ||||||
|  | 		SHA256: regexp.MustCompile(`^[a-f0-9]{64}$`), | ||||||
|  | 		SHA384: regexp.MustCompile(`^[a-f0-9]{96}$`), | ||||||
|  | 		SHA512: regexp.MustCompile(`^[a-f0-9]{128}$`), | ||||||
|  | 	} | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // Available returns true if the digest type is available for use. If this
 | // Available returns true if the digest type is available for use. If this
 | ||||||
|  | @ -111,6 +134,14 @@ func (a Algorithm) Hash() hash.Hash { | ||||||
| 	return algorithms[a].New() | 	return algorithms[a].New() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // Encode encodes the raw bytes of a digest, typically from a hash.Hash, into
 | ||||||
|  | // the encoded portion of the digest.
 | ||||||
|  | func (a Algorithm) Encode(d []byte) string { | ||||||
|  | 	// TODO(stevvooe): Currently, all algorithms use a hex encoding. When we
 | ||||||
|  | 	// add support for back registration, we can modify this accordingly.
 | ||||||
|  | 	return fmt.Sprintf("%x", d) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // FromReader returns the digest of the reader using the algorithm.
 | // FromReader returns the digest of the reader using the algorithm.
 | ||||||
| func (a Algorithm) FromReader(rd io.Reader) (Digest, error) { | func (a Algorithm) FromReader(rd io.Reader) (Digest, error) { | ||||||
| 	digester := a.Digester() | 	digester := a.Digester() | ||||||
|  | @ -142,3 +173,20 @@ func (a Algorithm) FromBytes(p []byte) Digest { | ||||||
| func (a Algorithm) FromString(s string) Digest { | func (a Algorithm) FromString(s string) Digest { | ||||||
| 	return a.FromBytes([]byte(s)) | 	return a.FromBytes([]byte(s)) | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | // Validate validates the encoded portion string
 | ||||||
|  | func (a Algorithm) Validate(encoded string) error { | ||||||
|  | 	r, ok := anchoredEncodedRegexps[a] | ||||||
|  | 	if !ok { | ||||||
|  | 		return ErrDigestUnsupported | ||||||
|  | 	} | ||||||
|  | 	// Digests much always be hex-encoded, ensuring that their hex portion will
 | ||||||
|  | 	// always be size*2
 | ||||||
|  | 	if a.Size()*2 != len(encoded) { | ||||||
|  | 		return ErrDigestInvalidLength | ||||||
|  | 	} | ||||||
|  | 	if r.MatchString(encoded) { | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  | 	return ErrDigestInvalidFormat | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -1,3 +1,17 @@ | ||||||
|  | // Copyright 2017 Docker, Inc.
 | ||||||
|  | //
 | ||||||
|  | // Licensed under the Apache License, Version 2.0 (the "License");
 | ||||||
|  | // you may not use this file except in compliance with the License.
 | ||||||
|  | // You may obtain a copy of the License at
 | ||||||
|  | //
 | ||||||
|  | //     https://www.apache.org/licenses/LICENSE-2.0
 | ||||||
|  | //
 | ||||||
|  | // Unless required by applicable law or agreed to in writing, software
 | ||||||
|  | // distributed under the License is distributed on an "AS IS" BASIS,
 | ||||||
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | ||||||
|  | // See the License for the specific language governing permissions and
 | ||||||
|  | // limitations under the License.
 | ||||||
|  | 
 | ||||||
| package digest | package digest | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
|  | @ -31,16 +45,21 @@ func NewDigest(alg Algorithm, h hash.Hash) Digest { | ||||||
| // functions. This is also useful for rebuilding digests from binary
 | // functions. This is also useful for rebuilding digests from binary
 | ||||||
| // serializations.
 | // serializations.
 | ||||||
| func NewDigestFromBytes(alg Algorithm, p []byte) Digest { | func NewDigestFromBytes(alg Algorithm, p []byte) Digest { | ||||||
| 	return Digest(fmt.Sprintf("%s:%x", alg, p)) | 	return NewDigestFromEncoded(alg, alg.Encode(p)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // NewDigestFromHex returns a Digest from alg and a the hex encoded digest.
 | // NewDigestFromHex is deprecated. Please use NewDigestFromEncoded.
 | ||||||
| func NewDigestFromHex(alg, hex string) Digest { | func NewDigestFromHex(alg, hex string) Digest { | ||||||
| 	return Digest(fmt.Sprintf("%s:%s", alg, hex)) | 	return NewDigestFromEncoded(Algorithm(alg), hex) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // NewDigestFromEncoded returns a Digest from alg and the encoded digest.
 | ||||||
|  | func NewDigestFromEncoded(alg Algorithm, encoded string) Digest { | ||||||
|  | 	return Digest(fmt.Sprintf("%s:%s", alg, encoded)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // DigestRegexp matches valid digest types.
 | // DigestRegexp matches valid digest types.
 | ||||||
| var DigestRegexp = regexp.MustCompile(`[a-zA-Z0-9-_+.]+:[a-fA-F0-9]+`) | 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.
 | // DigestRegexpAnchored matches valid digest types, anchored to the start and end of the match.
 | ||||||
| var DigestRegexpAnchored = regexp.MustCompile(`^` + DigestRegexp.String() + `$`) | var DigestRegexpAnchored = regexp.MustCompile(`^` + DigestRegexp.String() + `$`) | ||||||
|  | @ -82,26 +101,18 @@ func FromString(s string) Digest { | ||||||
| // error if not.
 | // error if not.
 | ||||||
| func (d Digest) Validate() error { | func (d Digest) Validate() error { | ||||||
| 	s := string(d) | 	s := string(d) | ||||||
| 
 |  | ||||||
| 	i := strings.Index(s, ":") | 	i := strings.Index(s, ":") | ||||||
| 
 | 	if i <= 0 || i+1 == len(s) { | ||||||
| 	// validate i then run through regexp
 |  | ||||||
| 	if i < 0 || i+1 == len(s) || !DigestRegexpAnchored.MatchString(s) { |  | ||||||
| 		return ErrDigestInvalidFormat | 		return ErrDigestInvalidFormat | ||||||
| 	} | 	} | ||||||
| 
 | 	algorithm, encoded := Algorithm(s[:i]), s[i+1:] | ||||||
| 	algorithm := Algorithm(s[:i]) |  | ||||||
| 	if !algorithm.Available() { | 	if !algorithm.Available() { | ||||||
|  | 		if !DigestRegexpAnchored.MatchString(s) { | ||||||
|  | 			return ErrDigestInvalidFormat | ||||||
|  | 		} | ||||||
| 		return ErrDigestUnsupported | 		return ErrDigestUnsupported | ||||||
| 	} | 	} | ||||||
| 
 | 	return algorithm.Validate(encoded) | ||||||
| 	// Digests much always be hex-encoded, ensuring that their hex portion will
 |  | ||||||
| 	// always be size*2
 |  | ||||||
| 	if algorithm.Size()*2 != len(s[i+1:]) { |  | ||||||
| 		return ErrDigestInvalidLength |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return nil |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Algorithm returns the algorithm portion of the digest. This will panic if
 | // Algorithm returns the algorithm portion of the digest. This will panic if
 | ||||||
|  | @ -119,12 +130,17 @@ func (d Digest) Verifier() Verifier { | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Hex returns the hex digest portion of the digest. This will panic if the
 | // Encoded returns the encoded portion of the digest. This will panic if the
 | ||||||
| // underlying digest is not in a valid format.
 | // underlying digest is not in a valid format.
 | ||||||
| func (d Digest) Hex() string { | func (d Digest) Encoded() string { | ||||||
| 	return string(d[d.sepIndex()+1:]) | 	return string(d[d.sepIndex()+1:]) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // Hex is deprecated. Please use Digest.Encoded.
 | ||||||
|  | func (d Digest) Hex() string { | ||||||
|  | 	return d.Encoded() | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (d Digest) String() string { | func (d Digest) String() string { | ||||||
| 	return string(d) | 	return string(d) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,3 +1,17 @@ | ||||||
|  | // Copyright 2017 Docker, Inc.
 | ||||||
|  | //
 | ||||||
|  | // Licensed under the Apache License, Version 2.0 (the "License");
 | ||||||
|  | // you may not use this file except in compliance with the License.
 | ||||||
|  | // You may obtain a copy of the License at
 | ||||||
|  | //
 | ||||||
|  | //     https://www.apache.org/licenses/LICENSE-2.0
 | ||||||
|  | //
 | ||||||
|  | // Unless required by applicable law or agreed to in writing, software
 | ||||||
|  | // distributed under the License is distributed on an "AS IS" BASIS,
 | ||||||
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | ||||||
|  | // See the License for the specific language governing permissions and
 | ||||||
|  | // limitations under the License.
 | ||||||
|  | 
 | ||||||
| package digest | package digest | ||||||
| 
 | 
 | ||||||
| import "hash" | import "hash" | ||||||
|  |  | ||||||
|  | @ -1,3 +1,17 @@ | ||||||
|  | // Copyright 2017 Docker, Inc.
 | ||||||
|  | //
 | ||||||
|  | // Licensed under the Apache License, Version 2.0 (the "License");
 | ||||||
|  | // you may not use this file except in compliance with the License.
 | ||||||
|  | // You may obtain a copy of the License at
 | ||||||
|  | //
 | ||||||
|  | //     https://www.apache.org/licenses/LICENSE-2.0
 | ||||||
|  | //
 | ||||||
|  | // Unless required by applicable law or agreed to in writing, software
 | ||||||
|  | // distributed under the License is distributed on an "AS IS" BASIS,
 | ||||||
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | ||||||
|  | // See the License for the specific language governing permissions and
 | ||||||
|  | // limitations under the License.
 | ||||||
|  | 
 | ||||||
| // Package digest provides a generalized type to opaquely represent message
 | // Package digest provides a generalized type to opaquely represent message
 | ||||||
| // digests and their operations within the registry. The Digest type is
 | // digests and their operations within the registry. The Digest type is
 | ||||||
| // designed to serve as a flexible identifier in a content-addressable system.
 | // designed to serve as a flexible identifier in a content-addressable system.
 | ||||||
|  |  | ||||||
|  | @ -1,3 +1,17 @@ | ||||||
|  | // Copyright 2017 Docker, Inc.
 | ||||||
|  | //
 | ||||||
|  | // Licensed under the Apache License, Version 2.0 (the "License");
 | ||||||
|  | // you may not use this file except in compliance with the License.
 | ||||||
|  | // You may obtain a copy of the License at
 | ||||||
|  | //
 | ||||||
|  | //     https://www.apache.org/licenses/LICENSE-2.0
 | ||||||
|  | //
 | ||||||
|  | // Unless required by applicable law or agreed to in writing, software
 | ||||||
|  | // distributed under the License is distributed on an "AS IS" BASIS,
 | ||||||
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | ||||||
|  | // See the License for the specific language governing permissions and
 | ||||||
|  | // limitations under the License.
 | ||||||
|  | 
 | ||||||
| package digest | package digest | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
|  |  | ||||||
|  | @ -22,7 +22,7 @@ const ( | ||||||
| 	// VersionMinor is for functionality in a backwards-compatible manner
 | 	// VersionMinor is for functionality in a backwards-compatible manner
 | ||||||
| 	VersionMinor = 0 | 	VersionMinor = 0 | ||||||
| 	// VersionPatch is for backwards-compatible bug fixes
 | 	// VersionPatch is for backwards-compatible bug fixes
 | ||||||
| 	VersionPatch = 0 | 	VersionPatch = 1 | ||||||
| 
 | 
 | ||||||
| 	// VersionDev indicates development branch. Releases will be empty string.
 | 	// VersionDev indicates development branch. Releases will be empty string.
 | ||||||
| 	VersionDev = "" | 	VersionDev = "" | ||||||
|  |  | ||||||
|  | @ -93,9 +93,9 @@ github.com/mitchellh/mapstructure | ||||||
| # github.com/ncw/swift v1.0.47 | # github.com/ncw/swift v1.0.47 | ||||||
| github.com/ncw/swift | github.com/ncw/swift | ||||||
| github.com/ncw/swift/swifttest | github.com/ncw/swift/swifttest | ||||||
| # github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420 | # github.com/opencontainers/go-digest v1.0.0-rc1 | ||||||
| github.com/opencontainers/go-digest | github.com/opencontainers/go-digest | ||||||
| # github.com/opencontainers/image-spec v1.0.0 | # github.com/opencontainers/image-spec v1.0.1 | ||||||
| github.com/opencontainers/image-spec/specs-go | github.com/opencontainers/image-spec/specs-go | ||||||
| github.com/opencontainers/image-spec/specs-go/v1 | github.com/opencontainers/image-spec/specs-go/v1 | ||||||
| # github.com/prometheus/client_golang v1.1.0 | # github.com/prometheus/client_golang v1.1.0 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue