1package machineid
2
3import (
4	"crypto/hmac"
5	"crypto/sha256"
6	"encoding/hex"
7	"io"
8	"io/ioutil"
9	"os"
10	"os/exec"
11	"strings"
12)
13
14// run wraps `exec.Command` with easy access to stdout and stderr.
15func run(stdout, stderr io.Writer, cmd string, args ...string) error {
16	c := exec.Command(cmd, args...)
17	c.Stdin = os.Stdin
18	c.Stdout = stdout
19	c.Stderr = stderr
20	return c.Run()
21}
22
23// protect calculates HMAC-SHA256 of the application ID, keyed by the machine ID and returns a hex-encoded string.
24func protect(appID, id string) string {
25	mac := hmac.New(sha256.New, []byte(id))
26	mac.Write([]byte(appID))
27	return hex.EncodeToString(mac.Sum(nil))
28}
29
30func readFile(filename string) ([]byte, error) {
31	return ioutil.ReadFile(filename)
32}
33
34func trim(s string) string {
35	return strings.TrimSpace(strings.Trim(s, "\n"))
36}
37