cli/pkg/cmd/attestation/artifact/digest/digest.go
Meredith Lancaster 97c10f4c04 move artifact package over
Signed-off-by: Meredith Lancaster <malancas@github.com>
2024-03-01 16:16:20 -07:00

50 lines
1 KiB
Go

package digest
import (
"crypto/sha256"
"crypto/sha512"
"encoding/hex"
"fmt"
"hash"
"io"
)
const (
SHA256DigestAlgorithm = "sha256"
SHA512DigestAlgorithm = "sha512"
)
var validDigestAlgorithms = [...]string{SHA256DigestAlgorithm, SHA512DigestAlgorithm}
// IsValidDigestAlgorithm returns true if the provided algorithm is supported
func IsValidDigestAlgorithm(alg string) bool {
for _, a := range validDigestAlgorithms {
if a == alg {
return true
}
}
return false
}
// ValidDigestAlgorithms returns a list of supported digest algorithms
func ValidDigestAlgorithms() []string {
return validDigestAlgorithms[:]
}
func CalculateDigestWithAlgorithm(r io.Reader, alg string) (string, error) {
var h hash.Hash
switch alg {
case SHA256DigestAlgorithm:
h = sha256.New()
case SHA512DigestAlgorithm:
h = sha512.New()
default:
h = sha256.New()
}
if _, err := io.Copy(h, r); err != nil {
return "", fmt.Errorf("failed to calculate digest: %w", err)
}
digest := h.Sum(nil)
return hex.EncodeToString(digest[:]), nil
}