mirror of
https://github.com/fluencelabs/tendermint
synced 2025-06-12 21:01:21 +00:00
* switch from fork (tendermint/btcd) to orig package (btcsuite/btcd); also
- remove obsolete check in test `size != -1` is always true
- WIP as the serialization still needs to be wrapped
* WIP: wrap signature & privkey, pubkey needs to be wrapped as well
* wrap pubkey too
* use "github.com/ethereum/go-ethereum/crypto/secp256k1" if cgo is
available, else use "github.com/btcsuite/btcd/btcec" and take care of
lower-S when verifying
Annoyingly, had to disable pruning when importing
github.com/ethereum/go-ethereum/ :-/
* update comment
* update comment
* emulate signature_nocgo.go for additional benchmarks:
592bf6a59c/crypto/signature_nocgo.go (L60-L76)
* use our format (r || s) in lower-s form when in the non-cgo case
* remove comment about using the C library directly
* vendor github.com/btcsuite/btcd too
* Add test for the !cgo case
* update changelog pending
Closes #3162 #3163
Refs #1958, #2091, tendermint/btcd#1
25 lines
609 B
Go
25 lines
609 B
Go
// +build cgo
|
|
|
|
package secp256k1
|
|
|
|
import (
|
|
"github.com/ethereum/go-ethereum/crypto/secp256k1"
|
|
|
|
"github.com/tendermint/tendermint/crypto"
|
|
)
|
|
|
|
// Sign creates an ECDSA signature on curve Secp256k1, using SHA256 on the msg.
|
|
func (privKey PrivKeySecp256k1) Sign(msg []byte) ([]byte, error) {
|
|
rsv, err := secp256k1.Sign(crypto.Sha256(msg), privKey[:])
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
// we do not need v in r||s||v:
|
|
rs := rsv[:len(rsv)-1]
|
|
return rs, nil
|
|
}
|
|
|
|
func (pubKey PubKeySecp256k1) VerifyBytes(msg []byte, sig []byte) bool {
|
|
return secp256k1.VerifySignature(pubKey[:], crypto.Sha256(msg), sig)
|
|
}
|