-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathhashingReader.go
More file actions
45 lines (38 loc) · 759 Bytes
/
hashingReader.go
File metadata and controls
45 lines (38 loc) · 759 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package bencoding
import (
"bufio"
"crypto/sha1"
"hash"
)
type hashingRreader struct {
b *bufio.Reader
hash hash.Hash
shouldHash bool
}
func (hr *hashingRreader) Peek(n int) ([]byte, error) {
b, e := hr.b.Peek(n)
return b, e
}
func (hr *hashingRreader) ReadByte() (byte, error) {
b, e := hr.b.ReadByte()
if hr.shouldHash && e == nil {
hr.hash.Write([]byte{b})
}
return b, e
}
func (hr *hashingRreader) ReadBytes(delim byte) ([]byte, error) {
b, e := hr.b.ReadBytes(delim)
if hr.shouldHash && e == nil {
hr.hash.Write(b)
}
return b, e
}
func (hr *hashingRreader) StartHasing() {
if !hr.shouldHash {
hr.hash = sha1.New()
hr.shouldHash = true
}
}
func (hr *hashingRreader) StopHashing() {
hr.shouldHash = false
}