mirror of
https://github.com/packwiz/packwiz.git
synced 2025-04-19 21:16:30 +02:00
49 lines
1.1 KiB
Go
49 lines
1.1 KiB
Go
package core
|
|
|
|
import (
|
|
"crypto/md5"
|
|
"crypto/sha1"
|
|
"crypto/sha256"
|
|
"crypto/sha512"
|
|
"encoding/binary"
|
|
"encoding/hex"
|
|
"fmt"
|
|
"github.com/packwiz/packwiz/curseforge/murmur2"
|
|
"hash"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
// GetHashImpl gets an implementation of hash.Hash for the given hash type string
|
|
func GetHashImpl(hashType string) (hash.Hash, HashStringer, error) {
|
|
switch strings.ToLower(hashType) {
|
|
case "sha1":
|
|
return sha1.New(), hexStringer{}, nil
|
|
case "sha256":
|
|
return sha256.New(), hexStringer{}, nil
|
|
case "sha512":
|
|
return sha512.New(), hexStringer{}, nil
|
|
case "md5":
|
|
return md5.New(), hexStringer{}, nil
|
|
case "murmur2":
|
|
return murmur2.New(), numberStringer{}, nil
|
|
}
|
|
return nil, nil, fmt.Errorf("hash implementation %s not found", hashType)
|
|
}
|
|
|
|
type HashStringer interface {
|
|
HashToString([]byte) string
|
|
}
|
|
|
|
type hexStringer struct{}
|
|
|
|
func (hexStringer) HashToString(data []byte) string {
|
|
return hex.EncodeToString(data)
|
|
}
|
|
|
|
type numberStringer struct{}
|
|
|
|
func (numberStringer) HashToString(data []byte) string {
|
|
return strconv.FormatUint(uint64(binary.BigEndian.Uint32(data)), 10)
|
|
}
|