aboutsummaryrefslogtreecommitdiff
path: root/chksum/size.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-07-23 23:35:38 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-07-23 23:35:38 +0200
commitd7395836f1604564e50de54955975f29c87953bf (patch)
treeaa783621786b73380054a2b5121fd78e113ac481 /chksum/size.go
parenteb1ab0c1b5a1b427ab92b42944621ada896790b6 (diff)
Add SIZE hash
Diffstat (limited to 'chksum/size.go')
-rw-r--r--chksum/size.go50
1 files changed, 50 insertions, 0 deletions
diff --git a/chksum/size.go b/chksum/size.go
new file mode 100644
index 0000000..a89fb69
--- /dev/null
+++ b/chksum/size.go
@@ -0,0 +1,50 @@
+package chksum
+
+import (
+ "bytes"
+ "fmt"
+ "hash"
+ "strconv"
+)
+
+type digest struct {
+ size int
+}
+
+func (d *digest) Write(p []byte) (n int, err error) {
+ n = len(p)
+ d.size += n
+ return
+}
+
+func (d *digest) Sum(b []byte) []byte {
+ buf := new(bytes.Buffer)
+ fmt.Fprint(buf, d.size)
+ return append(b, buf.Bytes()...)
+}
+
+func (d *digest) Reset() {
+ d.size = 0
+}
+
+func (d *digest) Size() int {
+ return 1
+}
+
+func (d *digest) BlockSize() int {
+ return 1
+}
+
+func NewSize() hash.Hash {
+ return &digest{}
+}
+
+func ParseSize(s string) ([]byte, error) {
+ n, err := strconv.Atoi(s)
+ if err != nil {
+ return nil, err
+ }
+ buf := new(bytes.Buffer)
+ fmt.Fprint(buf, n)
+ return buf.Bytes(), nil
+}