Commit d1e3c28e authored by protolambda's avatar protolambda

preimage: extend for example program usage

parent d746c69a
package preimage
import (
"io"
"os"
)
// FileChannel is a unidirectional channel for file I/O
type FileChannel interface {
io.ReadWriteCloser
// Reader returns the file that is used for reading.
Reader() *os.File
// Writer returns the file that is used for writing.
Writer() *os.File
}
type ReadWritePair struct {
r *os.File
w *os.File
}
// NewReadWritePair creates a new FileChannel that uses the given files
func NewReadWritePair(r *os.File, w *os.File) *ReadWritePair {
return &ReadWritePair{r: r, w: w}
}
func (rw *ReadWritePair) Read(p []byte) (int, error) {
return rw.r.Read(p)
}
func (rw *ReadWritePair) Write(p []byte) (int, error) {
return rw.w.Write(p)
}
func (rw *ReadWritePair) Reader() *os.File {
return rw.r
}
func (rw *ReadWritePair) Writer() *os.File {
return rw.w
}
func (rw *ReadWritePair) Close() error {
if err := rw.r.Close(); err != nil {
return err
}
return rw.w.Close()
}
// CreateBidirectionalChannel creates a pair of FileChannels that are connected to each other.
func CreateBidirectionalChannel() (FileChannel, FileChannel, error) {
ar, bw, err := os.Pipe()
if err != nil {
return nil, nil, err
}
br, aw, err := os.Pipe()
if err != nil {
return nil, nil, err
}
return NewReadWritePair(ar, aw), NewReadWritePair(br, bw), nil
}
const (
HClientRFd = 3
HClientWFd = 4
PClientRFd = 5
PClientWFd = 6
)
func ClientHinterChannel() FileChannel {
r := os.NewFile(HClientRFd, "preimage-hint-read")
w := os.NewFile(HClientWFd, "preimage-hint-write")
return NewReadWritePair(r, w)
}
// ClientPreimageChannel returns a FileChannel for the preimage oracle in a detached context
func ClientPreimageChannel() FileChannel {
r := os.NewFile(PClientRFd, "preimage-oracle-read")
w := os.NewFile(PClientWFd, "preimage-oracle-write")
return NewReadWritePair(r, w)
}
package preimage
import "golang.org/x/crypto/sha3"
func Keccak256(v []byte) (out [32]byte) {
s := sha3.NewLegacyKeccak256()
s.Write(v)
s.Sum(out[:0])
return
}
......@@ -9,16 +9,8 @@ import (
"testing"
"github.com/stretchr/testify/require"
"golang.org/x/crypto/sha3"
)
func keccak256(v []byte) (out [32]byte) {
s := sha3.NewLegacyKeccak256()
s.Write(v)
s.Sum(out[:0])
return
}
type readWritePair struct {
io.Reader
io.Writer
......@@ -38,11 +30,11 @@ func TestOracle(t *testing.T) {
preimageByHash := make(map[[32]byte][]byte)
for _, p := range preimages {
k := Keccak256Key(keccak256(p))
k := Keccak256Key(Keccak256(p))
preimageByHash[k.PreimageKey()] = p
}
for _, p := range preimages {
k := Keccak256Key(keccak256(p))
k := Keccak256Key(Keccak256(p))
var wg sync.WaitGroup
wg.Add(2)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment