Files
sam-forwarder/hashhash/hashhash.go
2019-08-14 00:46:35 -04:00

77 lines
1.4 KiB
Go

package hashhash
import (
"io/ioutil"
"strings"
)
import (
"github.com/boreq/friendlyhash"
)
type Hasher struct {
FileName string
split []string
length int
hasher *friendlyhash.FriendlyHash
}
func (h *Hasher) dictionary() []string {
if len(h.split) > 0 {
return h.split
}
bytes, _ := ioutil.ReadFile(h.FileName)
h.split = strings.Split(string(bytes), "\n")
return h.split
}
func (h *Hasher) Friendly(input string) (string, error) {
slice, err := h.hasher.Humanize([]byte(input))
if err != nil {
return "", err
}
return strings.Join(slice, " "), nil
}
func (h *Hasher) Unfriendly(input string) (string, error) {
slice := strings.Split(input, " ")
hash, err := h.hasher.Dehumanize(slice)
if err != nil {
return "", err
}
return string(hash), nil
}
func (h *Hasher) Unfriendlyslice(input []string) (string, error) {
hash, err := h.hasher.Dehumanize(input)
if err != nil {
return "", err
}
return string(hash), nil
}
func NewHasher(length int) (*Hasher, error) {
var h Hasher
var err error
h.FileName = ""
h.length = length
h.split = Default()
h.hasher, err = friendlyhash.New(h.dictionary(), length)
if err != nil {
return nil, err
}
return &h, nil
}
func Init(FileName string, length int) (*Hasher, error) {
var h Hasher
var err error
h.FileName = FileName
h.length = length
h.hasher, err = friendlyhash.New(h.dictionary(), length)
if err != nil {
return nil, err
}
return &h, nil
}