mirror of
https://github.com/opencontainers/image-spec.git
synced 2025-04-19 14:02:17 +03:00
The specification defines an algorithm to calculate a `ChainID`, which can be used to identify the result of subsequent applications of layers. Because this algorithm is subtle and only needs to implemented in a single place, we provide a reference implementation. For convenience, we provide functions that calculate all the chain ids and just the top-level one. It is is integrated with the distribution/digest type for safety and convenience. As part of this, the `identity` package has been introduced. For consuming code, a few helpers have been provide to ease transition as the name of the upstream package has not yet been finalized. Users of this package should employ `FromBytes`, `FromString` and `FromReader` where appropriate, which should ease the transition if these packages change. Tests are formulated based on pre-calculation of chain identifiers to ensure correctness. Signed-off-by: Stephen J Day <stephen.day@docker.com>
41 lines
1.2 KiB
Go
41 lines
1.2 KiB
Go
// Copyright 2016 The Linux Foundation
|
|
//
|
|
// 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
|
|
//
|
|
// http://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 identity
|
|
|
|
import (
|
|
_ "crypto/sha256" // side-effect to install impls, sha256
|
|
_ "crypto/sha512" // side-effect to install impls, sha384/sh512
|
|
|
|
"io"
|
|
|
|
digest "github.com/opencontainers/go-digest"
|
|
)
|
|
|
|
// FromReader consumes the content of rd until io.EOF, returning canonical
|
|
// digest.
|
|
func FromReader(rd io.Reader) (digest.Digest, error) {
|
|
return digest.Canonical.FromReader(rd)
|
|
}
|
|
|
|
// FromBytes digests the input and returns a Digest.
|
|
func FromBytes(p []byte) digest.Digest {
|
|
return digest.Canonical.FromBytes(p)
|
|
}
|
|
|
|
// FromString digests the input and returns a Digest.
|
|
func FromString(s string) digest.Digest {
|
|
return digest.Canonical.FromString(s)
|
|
}
|