From b1247d2d0d51108c910a73891ff3116e5f032ab1 Mon Sep 17 00:00:00 2001 From: "Kali Kaneko (leap communications)" Date: Sat, 12 Jan 2019 18:39:45 +0100 Subject: [pkg] all your deps are vendored to us --- vendor/github.com/getlantern/hidden/hidden.go | 66 +++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 vendor/github.com/getlantern/hidden/hidden.go (limited to 'vendor/github.com/getlantern/hidden/hidden.go') diff --git a/vendor/github.com/getlantern/hidden/hidden.go b/vendor/github.com/getlantern/hidden/hidden.go new file mode 100644 index 0000000..0c52b08 --- /dev/null +++ b/vendor/github.com/getlantern/hidden/hidden.go @@ -0,0 +1,66 @@ +// Package hidden provides the ability to "hide" binary data in a string using +// a hex encoding with non-printing characters. Hidden data is demarcated with +// a leading and trailing NUL character. +package hidden + +import ( + "bytes" + "fmt" + "regexp" + + "github.com/getlantern/hex" +) + +// 16 non-printing characters +const hextable = "\x01\x02\x03\x04\x05\x06\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17" + +var ( + hexencoding = hex.NewEncoding(hextable) + + re *regexp.Regexp +) + +func init() { + var err error + re, err = regexp.Compile(fmt.Sprintf("\x00[%v]+\x00", hextable)) + if err != nil { + panic(err) + } +} + +// ToString encodes the given data as a hidden string, including leadnig and +// trailing NULs. +func ToString(data []byte) string { + buf := bytes.NewBuffer(make([]byte, 0, 2+hex.EncodedLen(len(data)))) + // Leading NUL + buf.WriteByte(0) + buf.WriteString(hexencoding.EncodeToString(data)) + // Trailing NUL + buf.WriteByte(0) + return buf.String() +} + +// FromString extracts the hidden data from a string, which is expected to +// contain leading and trailing NULs. +func FromString(str string) ([]byte, error) { + return hexencoding.DecodeString(str[1 : len(str)-1]) +} + +// Extract extracts all hidden data from an arbitrary string. +func Extract(str string) ([][]byte, error) { + m := re.FindAllString(str, -1) + result := make([][]byte, 0, len(m)) + for _, s := range m { + b, err := FromString(s) + if err != nil { + return nil, err + } + result = append(result, b) + } + return result, nil +} + +// Clean removes any hidden data from an arbitrary string. +func Clean(str string) string { + return re.ReplaceAllString(str, "") +} -- cgit v1.2.3