add serdes (start) for elkrem
This commit is contained in:
parent
26d9ae7f2b
commit
fc5e58ad7d
72
elkrem/serdes.go
Normal file
72
elkrem/serdes.go
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
package elkrem
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/binary"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
//type ElkremNode struct {
|
||||||
|
// i uint64 // index (ith node)
|
||||||
|
// h uint8 // height of this node
|
||||||
|
// sha *wire.ShaHash // hash
|
||||||
|
//}
|
||||||
|
//type ElkremSender struct {
|
||||||
|
// current uint64 // last sent hash index
|
||||||
|
// treeHeight uint8 // height of tree (size is 2**height -1 )
|
||||||
|
// maxIndex uint64 // top of the tree
|
||||||
|
// root *wire.ShaHash // root hash of the tree
|
||||||
|
//}
|
||||||
|
//type ElkremReceiver struct {
|
||||||
|
// current uint64 // last received index (actually don't need it?)
|
||||||
|
// treeHeight uint8 // height of tree (size is 2**height -1 )
|
||||||
|
// s []ElkremNode // store of received hashes, max size = height
|
||||||
|
//}
|
||||||
|
|
||||||
|
// ToBytes turns an ElkremNode into a 41 byte long byte slice.
|
||||||
|
// 8 byte index, 1 byte height, 32 byte hash
|
||||||
|
func (e *ElkremNode) ToBytes() ([]byte, error) {
|
||||||
|
var buf bytes.Buffer
|
||||||
|
|
||||||
|
err := binary.Write(&buf, binary.BigEndian, e.i)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
err = binary.Write(&buf, binary.BigEndian, e.h)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
n, err := buf.Write(e.sha.Bytes())
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if n != 32 {
|
||||||
|
return nil, fmt.Errorf("%d byte hash, expect 32", n)
|
||||||
|
}
|
||||||
|
|
||||||
|
return buf.Bytes(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// FromBytes turns an ElkremNode into a 41 byte long byte slice.
|
||||||
|
// 8 byte index, 1 byte height, 32 byte hash
|
||||||
|
|
||||||
|
func ElkremNodeFromBytes([]byte) (ElkremNode, error) {
|
||||||
|
var e ElkremNode
|
||||||
|
return e, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *ElkremSender) ToBytes() ([]byte, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *ElkremSender) FromBytes([]byte) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *ElkremReceiver) ToBytes() ([]byte, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *ElkremReceiver) FromBytes([]byte) error {
|
||||||
|
return nil
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user