diff --git a/metainfo/hash.go b/metainfo/hash.go index 46cb3e8d..58c5b7cc 100644 --- a/metainfo/hash.go +++ b/metainfo/hash.go @@ -1,6 +1,9 @@ package metainfo -import "fmt" +import ( + "encoding/hex" + "fmt" +) // 20-byte SHA1 hash used for info and pieces. type Hash [20]byte @@ -16,3 +19,18 @@ func (h *Hash) AsString() string { func (h Hash) HexString() string { return fmt.Sprintf("%x", h[:]) } + +func (h *Hash) FromHexString(s string) (err error) { + if len(s) != 40 { + err = fmt.Errorf("hash hex string has bad length: %d", len(s)) + return + } + n, err := hex.Decode(h[:], []byte(s)) + if err != nil { + return + } + if n != 20 { + panic(n) + } + return +}