-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* go work * added ocr signer * multiple signers * refactor don example * avoid validation for messages of the peer itself * fix tests
- Loading branch information
Showing
23 changed files
with
1,069 additions
and
113 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -19,6 +19,7 @@ | |
|
||
# Go workspace file | ||
go.work | ||
go.work.sum | ||
|
||
bin | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
package donlib | ||
package don | ||
|
||
import ( | ||
"context" | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
package donlib | ||
package don | ||
|
||
import ( | ||
"google.golang.org/grpc" | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
package don | ||
|
||
import ( | ||
"bytes" | ||
"crypto/ecdsa" | ||
"encoding/binary" | ||
"encoding/hex" | ||
"io" | ||
|
||
"github.com/ethereum/go-ethereum/common" | ||
"github.com/ethereum/go-ethereum/crypto" | ||
"github.com/ethereum/go-ethereum/crypto/secp256k1" | ||
) | ||
|
||
// NOTE: was copied from github.com/smartcontractkit/libocr | ||
|
||
var curve = secp256k1.S256() | ||
|
||
func RawReportContext(repctx ReportContext) [3][32]byte { | ||
rawRepctx := [3][32]byte{} | ||
copy(rawRepctx[0][:], repctx.ConfigDigest[:]) | ||
binary.BigEndian.PutUint32(rawRepctx[1][32-5:32-1], repctx.Epoch) | ||
rawRepctx[1][31] = repctx.Round | ||
rawRepctx[2] = repctx.ExtraHash | ||
return rawRepctx | ||
} | ||
|
||
type EvmKeyring struct { | ||
privateKey ecdsa.PrivateKey | ||
} | ||
|
||
func NewEVMKeyring(material io.Reader) (*EvmKeyring, error) { | ||
ecdsaKey, err := ecdsa.GenerateKey(curve, material) | ||
if err != nil { | ||
return nil, err | ||
} | ||
return &EvmKeyring{privateKey: *ecdsaKey}, nil | ||
} | ||
|
||
// XXX: PublicKey returns the address of the public key not the public key itself | ||
func (ok *EvmKeyring) PublicKey() OnchainPublicKey { | ||
address := ok.signingAddress() | ||
return address[:] | ||
} | ||
|
||
func (ok *EvmKeyring) OnChainPublicKey() string { | ||
return hex.EncodeToString(ok.PublicKey()) | ||
} | ||
|
||
func (ok *EvmKeyring) reportToSigData(reportCtx ReportContext, report Report) []byte { | ||
rawReportContext := RawReportContext(reportCtx) | ||
sigData := crypto.Keccak256(report) | ||
sigData = append(sigData, rawReportContext[0][:]...) | ||
sigData = append(sigData, rawReportContext[1][:]...) | ||
sigData = append(sigData, rawReportContext[2][:]...) | ||
return crypto.Keccak256(sigData) | ||
} | ||
|
||
func (ok *EvmKeyring) Sign(reportCtx ReportContext, report Report) ([]byte, error) { | ||
return crypto.Sign(ok.reportToSigData(reportCtx, report), &ok.privateKey) | ||
} | ||
|
||
func (ok *EvmKeyring) Verify(publicKey OnchainPublicKey, reportCtx ReportContext, report Report, signature []byte) bool { | ||
hash := ok.reportToSigData(reportCtx, report) | ||
authorPubkey, err := crypto.SigToPub(hash, signature) | ||
if err != nil { | ||
return false | ||
} | ||
authorAddress := crypto.PubkeyToAddress(*authorPubkey) | ||
return bytes.Equal(publicKey[:], authorAddress[:]) | ||
} | ||
|
||
func (ok *EvmKeyring) MaxSignatureLength() int { | ||
return 65 | ||
} | ||
|
||
func (ok *EvmKeyring) signingAddress() common.Address { | ||
return crypto.PubkeyToAddress(*(&ok.privateKey).Public().(*ecdsa.PublicKey)) | ||
} | ||
|
||
func (ok *EvmKeyring) Marshal() ([]byte, error) { | ||
return crypto.FromECDSA(&ok.privateKey), nil | ||
} | ||
|
||
func (ok *EvmKeyring) Unmarshal(in []byte) error { | ||
privateKey, err := crypto.ToECDSA(in) | ||
if err != nil { | ||
return err | ||
} | ||
ok.privateKey = *privateKey | ||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
module github.com/amirylm/p2pmq/examples/don | ||
|
||
go 1.20 | ||
|
||
require ( | ||
github.com/amirylm/p2pmq v0.0.0 | ||
github.com/ethereum/go-ethereum v1.13.4 | ||
github.com/ipfs/go-log v1.0.5 | ||
github.com/libp2p/go-libp2p v0.31.0 | ||
github.com/libp2p/go-libp2p-pubsub v0.9.3 | ||
github.com/stretchr/testify v1.8.4 | ||
google.golang.org/grpc v1.59.0 | ||
) | ||
|
||
require ( | ||
github.com/benbjohnson/clock v1.3.5 // indirect | ||
github.com/beorn7/perks v1.0.1 // indirect | ||
github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect | ||
github.com/cespare/xxhash/v2 v2.2.0 // indirect | ||
github.com/containerd/cgroups v1.1.0 // indirect | ||
github.com/coreos/go-systemd/v22 v22.5.0 // indirect | ||
github.com/davecgh/go-spew v1.1.1 // indirect | ||
github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect | ||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect | ||
github.com/docker/go-units v0.5.0 // indirect | ||
github.com/elastic/gosigar v0.14.2 // indirect | ||
github.com/flynn/noise v1.0.0 // indirect | ||
github.com/francoispqt/gojay v1.2.13 // indirect | ||
github.com/go-logr/logr v1.2.4 // indirect | ||
github.com/go-logr/stdr v1.2.2 // indirect | ||
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect | ||
github.com/godbus/dbus/v5 v5.1.0 // indirect | ||
github.com/gogo/protobuf v1.3.2 // indirect | ||
github.com/golang/mock v1.6.0 // indirect | ||
github.com/golang/protobuf v1.5.3 // indirect | ||
github.com/google/gopacket v1.1.19 // indirect | ||
github.com/google/pprof v0.0.0-20230821062121-407c9e7a662f // indirect | ||
github.com/google/uuid v1.3.1 // indirect | ||
github.com/gorilla/websocket v1.5.0 // indirect | ||
github.com/hashicorp/errwrap v1.1.0 // indirect | ||
github.com/hashicorp/go-multierror v1.1.1 // indirect | ||
github.com/hashicorp/golang-lru v0.5.4 // indirect | ||
github.com/hashicorp/golang-lru/v2 v2.0.5 // indirect | ||
github.com/holiman/uint256 v1.2.3 // indirect | ||
github.com/huin/goupnp v1.3.0 // indirect | ||
github.com/ipfs/boxo v0.10.0 // indirect | ||
github.com/ipfs/go-cid v0.4.1 // indirect | ||
github.com/ipfs/go-datastore v0.6.0 // indirect | ||
github.com/ipfs/go-log/v2 v2.5.1 // indirect | ||
github.com/ipld/go-ipld-prime v0.20.0 // indirect | ||
github.com/jackpal/go-nat-pmp v1.0.2 // indirect | ||
github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect | ||
github.com/jbenet/goprocess v0.1.4 // indirect | ||
github.com/klauspost/compress v1.16.7 // indirect | ||
github.com/klauspost/cpuid/v2 v2.2.5 // indirect | ||
github.com/koron/go-ssdp v0.0.4 // indirect | ||
github.com/libp2p/go-buffer-pool v0.1.0 // indirect | ||
github.com/libp2p/go-cidranger v1.1.0 // indirect | ||
github.com/libp2p/go-flow-metrics v0.1.0 // indirect | ||
github.com/libp2p/go-libp2p-asn-util v0.3.0 // indirect | ||
github.com/libp2p/go-libp2p-kad-dht v0.25.1 // indirect | ||
github.com/libp2p/go-libp2p-kbucket v0.6.3 // indirect | ||
github.com/libp2p/go-libp2p-record v0.2.0 // indirect | ||
github.com/libp2p/go-libp2p-routing-helpers v0.7.2 // indirect | ||
github.com/libp2p/go-msgio v0.3.0 // indirect | ||
github.com/libp2p/go-nat v0.2.0 // indirect | ||
github.com/libp2p/go-netroute v0.2.1 // indirect | ||
github.com/libp2p/go-reuseport v0.4.0 // indirect | ||
github.com/libp2p/go-yamux/v4 v4.0.1 // indirect | ||
github.com/libp2p/zeroconf/v2 v2.2.0 // indirect | ||
github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect | ||
github.com/mattn/go-isatty v0.0.19 // indirect | ||
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect | ||
github.com/miekg/dns v1.1.55 // indirect | ||
github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect | ||
github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect | ||
github.com/minio/sha256-simd v1.0.1 // indirect | ||
github.com/mr-tron/base58 v1.2.0 // indirect | ||
github.com/multiformats/go-base32 v0.1.0 // indirect | ||
github.com/multiformats/go-base36 v0.2.0 // indirect | ||
github.com/multiformats/go-multiaddr v0.11.0 // indirect | ||
github.com/multiformats/go-multiaddr-dns v0.3.1 // indirect | ||
github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect | ||
github.com/multiformats/go-multibase v0.2.0 // indirect | ||
github.com/multiformats/go-multicodec v0.9.0 // indirect | ||
github.com/multiformats/go-multihash v0.2.3 // indirect | ||
github.com/multiformats/go-multistream v0.4.1 // indirect | ||
github.com/multiformats/go-varint v0.0.7 // indirect | ||
github.com/onsi/ginkgo/v2 v2.11.0 // indirect | ||
github.com/opencontainers/runtime-spec v1.1.0 // indirect | ||
github.com/opentracing/opentracing-go v1.2.0 // indirect | ||
github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect | ||
github.com/pkg/errors v0.9.1 // indirect | ||
github.com/pmezard/go-difflib v1.0.0 // indirect | ||
github.com/polydawn/refmt v0.89.0 // indirect | ||
github.com/prometheus/client_golang v1.16.0 // indirect | ||
github.com/prometheus/client_model v0.4.0 // indirect | ||
github.com/prometheus/common v0.44.0 // indirect | ||
github.com/prometheus/procfs v0.11.1 // indirect | ||
github.com/quic-go/qpack v0.4.0 // indirect | ||
github.com/quic-go/qtls-go1-20 v0.3.3 // indirect | ||
github.com/quic-go/quic-go v0.38.1 // indirect | ||
github.com/quic-go/webtransport-go v0.5.3 // indirect | ||
github.com/raulk/go-watchdog v1.3.0 // indirect | ||
github.com/spaolacci/murmur3 v1.1.0 // indirect | ||
github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 // indirect | ||
go.opencensus.io v0.24.0 // indirect | ||
go.opentelemetry.io/otel v1.16.0 // indirect | ||
go.opentelemetry.io/otel/metric v1.16.0 // indirect | ||
go.opentelemetry.io/otel/trace v1.16.0 // indirect | ||
go.uber.org/dig v1.17.0 // indirect | ||
go.uber.org/fx v1.20.0 // indirect | ||
go.uber.org/multierr v1.11.0 // indirect | ||
go.uber.org/zap v1.25.0 // indirect | ||
golang.org/x/crypto v0.14.0 // indirect | ||
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect | ||
golang.org/x/mod v0.12.0 // indirect | ||
golang.org/x/net v0.17.0 // indirect | ||
golang.org/x/sync v0.3.0 // indirect | ||
golang.org/x/sys v0.13.0 // indirect | ||
golang.org/x/text v0.13.0 // indirect | ||
golang.org/x/tools v0.13.0 // indirect | ||
gonum.org/v1/gonum v0.13.0 // indirect | ||
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect | ||
google.golang.org/protobuf v1.31.0 // indirect | ||
gopkg.in/yaml.v3 v3.0.1 // indirect | ||
lukechampine.com/blake3 v1.2.1 // indirect | ||
) |
Oops, something went wrong.