| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 | package decoderimport (	"crypto/sha256"	"encoding/hex"	"path"	"slices")func CalculateChecksum(plugin PluginDecoder) (string, error) {	m := map[string][]byte{}	sha256 := func(data []byte) []byte {		sha := sha256.New()		sha.Write(data)		return sha.Sum(nil)	}	if err := plugin.Walk(func(filename string, dir string) error {		var err error		content, err := plugin.ReadFile(path.Join(dir, filename))		if err != nil {			return err		}		m[path.Join(dir, filename)] = sha256(content)		return nil	}); err != nil {		return "", err	}	// sort the keys, ensure the order is consistent	keys := make([]string, 0, len(m))	for k := range m {		keys = append(keys, k)	}	slices.Sort(keys)	data := make([]byte, 0, len(m)*(32+32))	for _, k := range keys {		data = append(data, sha256([]byte(k))...)		data = append(data, m[k]...)	}	return hex.EncodeToString(sha256(data)), nil}
 |