50 lines
838 B
Go
50 lines
838 B
Go
package client
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"crypto/sha512"
|
|
"encoding/hex"
|
|
"strings"
|
|
)
|
|
|
|
func SHA256Digest(src []byte) string {
|
|
hasher := sha256.New()
|
|
hasher.Write(src)
|
|
sum := hasher.Sum(nil)
|
|
return "sha256:" + hex.EncodeToString(sum)
|
|
}
|
|
|
|
func SHA512Digest(src []byte) string {
|
|
hasher := sha512.New()
|
|
hasher.Write(src)
|
|
sum := hasher.Sum(nil)
|
|
return "sha512:" + hex.EncodeToString(sum)
|
|
}
|
|
|
|
const (
|
|
Undefined int = iota
|
|
SHA256
|
|
SHA512
|
|
)
|
|
|
|
func DigestType(digest string) int {
|
|
var err error
|
|
var typ int
|
|
digest = strings.ToLower(digest)
|
|
digest = strings.TrimPrefix(digest, "sha256:")
|
|
digest = strings.TrimPrefix(digest, "sha512:")
|
|
decoded, err := hex.DecodeString(digest)
|
|
if err != nil {
|
|
return Undefined
|
|
}
|
|
switch len(decoded) {
|
|
case 32:
|
|
typ = SHA256
|
|
case 64:
|
|
typ = SHA512
|
|
default:
|
|
typ = Undefined
|
|
}
|
|
return typ
|
|
}
|