mirror of
https://github.com/tendermint/tendermint.git
synced 2026-02-08 04:50:16 +00:00
At Oasis we have spend some time writing a new Ed25519/X25519/sr25519 implementation called curve25519-voi. This PR switches the import from ed25519consensus/go-schnorrkel, which should lead to performance gains on most systems. Summary of changes: * curve25519-voi is now used for Ed25519 operations, following the existing ZIP-215 semantics. * curve25519-voi's public key cache is enabled (hardcoded size of 4096 entries, should be tuned, see the code comment) to accelerate repeated Ed25519 verification with the same public key(s). * (BREAKING) curve25519-voi is now used for sr25519 operations. This is a breaking change as the current sr25519 support does something decidedly non-standard when going from a MiniSecretKey to a SecretKey and or PublicKey (The expansion routine is called twice). While I believe the new behavior (that expands once and only once) to be more "correct", this changes the semantics as implemented. * curve25519-voi is now used for merlin since the included STROBE implementation produces much less garbage on the heap. Side issues fixed: * The version of go-schnorrkel that is currently imported by tendermint has a badly broken batch verification implementation. Upstream has fixed the issue after I reported it, so the version should be bumped in the interim. Open design questions/issues: * As noted, the public key cache size should be tuned. It is currently backed by a trivial thread-safe LRU cache, which is not scan-resistant, but replacing it with something better is a matter of implementing an interface. * As far as I can tell, the only reason why serial verification on batch failure is necessary is to provide more detailed error messages (that are only used in some unit tests). If you trust the batch verification to be consistent with serial verification then the fallback can be eliminated entirely (the BatchVerifier provided by the new library supports an option that omits the fallback if this is chosen as the way forward). * curve25519-voi's sr25519 support could use more optimization and more eyes on the code. The algorithm unfortunately is woefully under-specified, and the implementation was done primarily because I got really sad when I actually looked at go-schnorrkel, and we do not use the algorithm at this time.
43 lines
1.6 KiB
Modula-2
43 lines
1.6 KiB
Modula-2
module github.com/tendermint/tendermint
|
|
|
|
go 1.15
|
|
|
|
require (
|
|
github.com/BurntSushi/toml v0.3.1
|
|
github.com/Masterminds/squirrel v1.5.0
|
|
github.com/Workiva/go-datastructures v1.0.53
|
|
github.com/adlio/schema v1.1.13
|
|
github.com/btcsuite/btcd v0.22.0-beta
|
|
github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce
|
|
github.com/fortytw2/leaktest v1.3.0
|
|
github.com/go-kit/kit v0.10.0
|
|
github.com/gogo/protobuf v1.3.2
|
|
github.com/golang/protobuf v1.5.2
|
|
github.com/google/orderedcode v0.0.1
|
|
github.com/google/uuid v1.2.0
|
|
github.com/gorilla/websocket v1.4.2
|
|
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0
|
|
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0
|
|
github.com/lib/pq v1.10.2
|
|
github.com/libp2p/go-buffer-pool v0.0.2
|
|
github.com/minio/highwayhash v1.0.2
|
|
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
|
|
github.com/oasisprotocol/curve25519-voi v0.0.0-20210609091139-0a56a4bca00b
|
|
github.com/ory/dockertest v3.3.5+incompatible
|
|
github.com/pkg/errors v0.9.1
|
|
github.com/prometheus/client_golang v1.11.0
|
|
github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0
|
|
github.com/rs/cors v1.7.0
|
|
github.com/rs/zerolog v1.23.0
|
|
github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa
|
|
github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa
|
|
github.com/spf13/cobra v1.1.3
|
|
github.com/spf13/viper v1.8.0
|
|
github.com/stretchr/testify v1.7.0
|
|
github.com/tendermint/tm-db v0.6.4
|
|
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad
|
|
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4
|
|
google.golang.org/grpc v1.38.0
|
|
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b // indirect
|
|
)
|