Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 078230217d | |||
| 90318f861b |
@@ -1,5 +1,6 @@
|
||||
// Package ahash provides support for hashing data with a selectable
|
||||
// hash function.
|
||||
//
|
||||
// hash function.
|
||||
package ahash
|
||||
|
||||
import (
|
||||
@@ -213,6 +214,17 @@ func SumReader(algo string, r io.Reader) ([]byte, error) {
|
||||
return h.Sum(nil), nil
|
||||
}
|
||||
|
||||
// SumLimitedReader reads n bytes of data from the io.reader and returns the
|
||||
// digest (not the hex digest) from the specified algorithm.
|
||||
func SumLimitedReader(algo string, r io.Reader, n int64) ([]byte, error) {
|
||||
limit := &io.LimitedReader{
|
||||
R: r,
|
||||
N: n,
|
||||
}
|
||||
|
||||
return SumReader(algo, limit)
|
||||
}
|
||||
|
||||
var insecureHashList, secureHashList, hashList []string
|
||||
|
||||
func init() {
|
||||
|
||||
@@ -139,3 +139,19 @@ func TestListLengthSanity(t *testing.T) {
|
||||
|
||||
assert.BoolT(t, len(all) == len(secure)+len(insecure))
|
||||
}
|
||||
|
||||
func TestSumLimitedReader(t *testing.T) {
|
||||
data := bytes.NewBufferString("hello, world")
|
||||
dataLen := data.Len()
|
||||
extendedData := bytes.NewBufferString("hello, world! this is an extended message")
|
||||
expected := "09ca7e4eaa6e8ae9c7d261167129184883644d07dfba7cbfbc4c8a2e08360d5b"
|
||||
|
||||
hash, err := SumReader("sha256", data)
|
||||
assert.NoErrorT(t, err)
|
||||
assert.BoolT(t, fmt.Sprintf("%x", hash) == expected, fmt.Sprintf("have hash %x, want %s", hash, expected))
|
||||
|
||||
extendedHash, err := SumLimitedReader("sha256", extendedData, int64(dataLen))
|
||||
assert.NoErrorT(t, err)
|
||||
|
||||
assert.BoolT(t, bytes.Equal(hash, extendedHash), fmt.Sprintf("have hash %x, want %x", extendedHash, hash))
|
||||
}
|
||||
|
||||
52
cmd/eig/main.go
Normal file
52
cmd/eig/main.go
Normal file
@@ -0,0 +1,52 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"os"
|
||||
|
||||
"git.sr.ht/~kisom/goutils/die"
|
||||
)
|
||||
|
||||
// size of a kilobit in bytes
|
||||
const kilobit = 128
|
||||
const pageSize = 4096
|
||||
|
||||
func main() {
|
||||
size := flag.Int("s", 256*kilobit, "size of EEPROM image in kilobits")
|
||||
fill := flag.Uint("f", 0, "byte to fill image with")
|
||||
flag.Parse()
|
||||
|
||||
if *fill > 256 {
|
||||
die.With("`fill` argument must be a byte value")
|
||||
}
|
||||
|
||||
path := "eeprom.img"
|
||||
|
||||
if flag.NArg() > 0 {
|
||||
path = flag.Arg(0)
|
||||
}
|
||||
|
||||
fillByte := uint8(*fill)
|
||||
|
||||
buf := make([]byte, pageSize)
|
||||
for i := 0; i < pageSize; i++ {
|
||||
buf[i] = fillByte
|
||||
}
|
||||
|
||||
pages := *size / pageSize
|
||||
last := *size % pageSize
|
||||
|
||||
file, err := os.Create(path)
|
||||
die.If(err)
|
||||
defer file.Close()
|
||||
|
||||
for i := 0; i < pages; i++ {
|
||||
_, err = file.Write(buf)
|
||||
die.If(err)
|
||||
}
|
||||
|
||||
if last != 0 {
|
||||
_, err = file.Write(buf[:last])
|
||||
die.If(err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user