forked from TrueCloudLab/neoneo-go
ddd1d92ff1
The idea here is to preserve the history of `dev` branch development and its code when merging with the `master`. Later this code could be moved into the masters code where appropriate.
49 lines
937 B
Go
49 lines
937 B
Go
package util
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/sha256"
|
|
|
|
"io"
|
|
"io/ioutil"
|
|
)
|
|
|
|
// Convenience function
|
|
|
|
// BufferLength returns the length of a buffer as uint32
|
|
func BufferLength(buf *bytes.Buffer) uint32 {
|
|
|
|
return uint32(buf.Len())
|
|
}
|
|
|
|
// SumSHA256 returns the sha256 sum of the data
|
|
func SumSHA256(b []byte) []byte {
|
|
h := sha256.New()
|
|
h.Write(b)
|
|
return h.Sum(nil)
|
|
}
|
|
|
|
// CalculateHash takes a function with a binary writer and returns
|
|
// the double hash of the io.Writer
|
|
func CalculateHash(f func(bw *BinWriter)) (Uint256, error) {
|
|
buf := new(bytes.Buffer)
|
|
bw := &BinWriter{W: buf}
|
|
|
|
f(bw)
|
|
|
|
var hash Uint256
|
|
hash = sha256.Sum256(buf.Bytes())
|
|
hash = sha256.Sum256(hash.Bytes())
|
|
return hash, bw.Err
|
|
|
|
}
|
|
|
|
//ReaderToBuffer converts a io.Reader into a bytes.Buffer
|
|
func ReaderToBuffer(r io.Reader) (*bytes.Buffer, error) {
|
|
byt, err := ioutil.ReadAll(r)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
buf := bytes.NewBuffer(byt)
|
|
return buf, nil
|
|
}
|