diff options
Diffstat (limited to 'internal/ioutil')
| -rw-r--r-- | internal/ioutil/ioutil.go | 32 | 
1 files changed, 32 insertions, 0 deletions
diff --git a/internal/ioutil/ioutil.go b/internal/ioutil/ioutil.go index 7fe6cfc..8e98c65 100644 --- a/internal/ioutil/ioutil.go +++ b/internal/ioutil/ioutil.go @@ -1,6 +1,7 @@  package ioutil  import ( +	"crypto/sha256"  	"encoding/json"  	"fmt"  	"os" @@ -54,3 +55,34 @@ func DirectoriesExist(paths []string) error {  	}  	return nil  } + +func CopyHashes(hashes [][sha256.Size]byte) (ret [][sha256.Size]byte) { +	for _, hash := range hashes { +		var dst [sha256.Size]byte +		copy(dst[:], hash[:]) +		ret = append(ret, dst) +	} +	return +} + +func SliceHashes(hashes [][sha256.Size]byte) (ret [][]byte) { +	for _, hash := range hashes { +		dst := hash +		ret = append(ret, dst[:]) +	} +	return +} + +// UnsliceHashes panics unless all hashes are 32 bytes +func UnsliceHashes(hashes [][]byte) (ret [][sha256.Size]byte) { +	for _, hash := range hashes { +		if got, want := len(hash), sha256.Size; got != want { +			panic(fmt.Sprintf("bug: invalid hash: size %d", got)) +		} + +		var dst [sha256.Size]byte +		copy(dst[:], hash) +		ret = append(ret, dst) +	} +	return +}  | 
