From a6ed0b51c8a04fbbc0bbf0aec4b0fdb20e52760d Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Mon, 17 Jul 2017 14:42:08 +0200 Subject: Move --- zsig/header.go | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 zsig/header.go (limited to 'zsig/header.go') diff --git a/zsig/header.go b/zsig/header.go new file mode 100644 index 0000000..aa1c13b --- /dev/null +++ b/zsig/header.go @@ -0,0 +1,71 @@ +package zsig + +import ( + "bufio" + "encoding/hex" + "fmt" + "io" + "strconv" + "strings" + "time" +) + +type ZHeader struct { + Date time.Time + KeyFile string + Alg string + BlockSize int + Sums [][]byte +} + +const ( + DefaultAlg = "SHA512/256" + DefaultBlockSize = 65536 +) + +func (h ZHeader) Print(w io.Writer) error { + fmt.Fprintf(w, "date=%v\n", h.Date.Format(time.RFC3339)) + fmt.Fprintf(w, "key=%v\n", h.KeyFile) + fmt.Fprintf(w, "algorithm=%v\n", h.Alg) + fmt.Fprintf(w, "blocksize=%v\n\n", h.BlockSize) + for _, sum := range h.Sums { + fmt.Fprintf(w, "%x\n", sum) + } + return nil +} + +func Parse(r io.Reader) (ZHeader, error) { + var h ZHeader + s := bufio.NewScanner(r) + for s.Scan() { + line := s.Text() + switch { + case strings.HasPrefix(line, "date="): + t, err := time.Parse(time.RFC3339, line[5:]) + if err != nil { + return ZHeader{}, err + } + h.Date = t + case strings.HasPrefix(line, "key="): + h.KeyFile = line[4:] + case strings.HasPrefix(line, "algorithm="): + h.Alg = line[10:] + case strings.HasPrefix(line, "blocksize="): + i, err := strconv.Atoi(line[10:]) + if err != nil { + return ZHeader{}, err + } + h.BlockSize = i + case line == "": + for s.Scan() { + line = s.Text() + sum, err := hex.DecodeString(line) + if err != nil { + return ZHeader{}, err + } + h.Sums = append(h.Sums, sum) + } + } + } + return h, s.Err() +} -- cgit v1.2.3