Something went wrong. Try again.
sloproxy
Something went wrong. Try again.
1.3 kB · 45 lines
Go
at main
12345678910111213141516171819202122232425262728293031323334353637383940414243444546package pluginstore
import ( "crypto/sha256" "encoding/hex" "fmt" "strings")
func ParseChecksums(data []byte) (map[string]string, error) { out := map[string]string{} for lineNumber, rawLine := range strings.Split(string(data), "\n") { line := strings.TrimSpace(rawLine) if line == "" || strings.HasPrefix(line, "#") { continue } fields := strings.Fields(line) if len(fields) < 2 { return nil, fmt.Errorf("line %d: invalid checksum entry", lineNumber+1) } hash := strings.ToLower(strings.TrimSpace(fields[0])) if len(hash) != sha256.Size*2 { return nil, fmt.Errorf("line %d: invalid sha256 length", lineNumber+1) } if _, errDecode := hex.DecodeString(hash); errDecode != nil { return nil, fmt.Errorf("line %d: invalid sha256: %w", lineNumber+1, errDecode) } name := strings.TrimPrefix(strings.TrimSpace(fields[1]), "*") out[name] = hash } return out, nil}
func VerifyChecksum(name string, data []byte, checksums map[string]string) error { expected := strings.ToLower(strings.TrimSpace(checksums[name])) if expected == "" { return fmt.Errorf("checksum for %s not found", name) } actualBytes := sha256.Sum256(data) actual := hex.EncodeToString(actualBytes[:]) if actual != expected { return fmt.Errorf("checksum mismatch for %s", name) } return nil}