You've already forked image-spec
							
							
				mirror of
				https://github.com/opencontainers/image-spec.git
				synced 2025-11-02 21:53:18 +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)
 | 
						|
}
 |