working commit

This commit is contained in:
2026-03-05 21:02:34 +02:00
parent 7ce2673bc3
commit b9f1f384fb
7 changed files with 250 additions and 9 deletions
+88 -3
View File
@@ -3,7 +3,10 @@ package repocli
import (
"crypto/sha256"
"crypto/sha512"
"hash"
"encoding/hex"
"errors"
"strings"
)
@@ -21,15 +24,17 @@ func SHA512Digest(src []byte) string {
return "sha512:" + hex.EncodeToString(sum)
}
type Algorithm int
const (
Undefined int = iota
Undefined Algorithm = iota
SHA256
SHA512
)
func DigestType(digest string) int {
func DigestType(digest string) Algorithm {
var err error
var typ int
var typ Algorithm
digest = strings.ToLower(digest)
digest = strings.TrimPrefix(digest, "sha256:")
digest = strings.TrimPrefix(digest, "sha512:")
@@ -47,3 +52,83 @@ func DigestType(digest string) int {
}
return typ
}
type Digest struct {
algorithm Algorithm
decoded []byte
}
func NewDigestFromBytes(algorithm Algorithm, payload []byte) *Digest {
var sum []byte
var hasher hash.Hash
switch algorithm {
case SHA512:
hasher = sha512.New()
default:
hasher = sha256.New()
}
hasher.Write(payload)
sum = hasher.Sum(nil)
digest := &Digest{
algorithm: algorithm,
decoded: sum,
}
return digest
}
func ParseDigest(str string) (*Digest, error) {
var err error
digest := &Digest{}
str = strings.ToLower(str)
str = strings.TrimPrefix(str, "sha256:")
str = strings.TrimPrefix(str, "sha512:")
decoded, err := hex.DecodeString(str)
if err != nil {
err := errors.New("Can't decode digest")
return digest, err
}
digest.decoded = decoded
switch len(decoded) {
case 32:
digest.algorithm = SHA256
case 64:
digest.algorithm = SHA512
default:
err = errors.New("Unknown digest type")
return digest, err
}
return digest, err
}
func (dig *Digest) Hex() string {
return hex.EncodeToString(dig.decoded)
}
func (dig *Digest) Algorithm() Algorithm {
return dig.algorithm
}
func (dig *Digest) Prefix() string {
var prefix string
switch dig.algorithm {
case SHA256:
prefix = "sha256"
case SHA512:
prefix = "sha512"
}
return prefix
}
func (dig *Digest) Encoded() string {
var prefix string
switch dig.algorithm {
case SHA256:
prefix = "sha256"
case SHA512:
prefix = "sha512"
}
hexx := hex.EncodeToString(dig.decoded)
return prefix + ":" + hexx
}