diff --git a/elkrem/serdes.go b/elkrem/serdes.go new file mode 100644 index 00000000..ccc0a16c --- /dev/null +++ b/elkrem/serdes.go @@ -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 +}