multi: Use dcrec/edwards/v2 module.

This updates the following modules to use the dcrec/edwards/v2 module:

- chaincfg/v2
- dcrutil/v2
- txscript/v2
This commit is contained in:
Dave Collins 2019-10-08 00:27:27 -05:00
parent 6e647f731f
commit ee4a0e2e2a
No known key found for this signature in database
GPG Key ID: B8904D9D9C93D1F2
12 changed files with 38 additions and 34 deletions

View File

@ -1,4 +1,4 @@
// Copyright (c) 2015-2016 The Decred developers
// Copyright (c) 2015-2019 The Decred developers
// Use of this source code is governed by an ISC
// license that can be found in the LICENSE file.
@ -9,7 +9,7 @@ import (
"io"
"math/big"
"github.com/decred/dcrd/dcrec/edwards"
"github.com/decred/dcrd/dcrec/edwards/v2"
)
type edwardsDSA struct {
@ -184,14 +184,14 @@ func newEdwardsDSA() DSA {
// Private keys
newPrivateKey: func(d *big.Int) PrivateKey {
pk := edwards.NewPrivateKey(edwardsCurve, d)
pk := edwards.NewPrivateKey(d)
if pk != nil {
return PrivateKey(*pk)
}
return nil
},
privKeyFromBytes: func(pk []byte) (PrivateKey, PublicKey) {
priv, pub := edwards.PrivKeyFromBytes(edwardsCurve, pk)
priv, pub := edwards.PrivKeyFromBytes(pk)
if priv == nil {
return nil, nil
}
@ -203,7 +203,7 @@ func newEdwardsDSA() DSA {
return tpriv, tpub
},
privKeyFromScalar: func(pk []byte) (PrivateKey, PublicKey) {
priv, pub, err := edwards.PrivKeyFromScalar(edwardsCurve, pk)
priv, pub, err := edwards.PrivKeyFromScalar(pk)
if err != nil {
return nil, nil
}
@ -223,12 +223,12 @@ func newEdwardsDSA() DSA {
// Public keys
newPublicKey: func(x *big.Int, y *big.Int) PublicKey {
pk := edwards.NewPublicKey(edwardsCurve, x, y)
pk := edwards.NewPublicKey(x, y)
tpk := PublicKey(*pk)
return tpk
},
parsePubKey: func(pubKeyStr []byte) (PublicKey, error) {
pk, err := edwards.ParsePubKey(edwardsCurve, pubKeyStr)
pk, err := edwards.ParsePubKey(pubKeyStr)
if err != nil {
return nil, err
}
@ -252,7 +252,7 @@ func newEdwardsDSA() DSA {
return ts
},
parseDERSignature: func(sigStr []byte) (Signature, error) {
sig, err := edwards.ParseDERSignature(edwardsCurve, sigStr)
sig, err := edwards.ParseDERSignature(sigStr)
if err != nil {
return nil, err
}
@ -260,7 +260,7 @@ func newEdwardsDSA() DSA {
return ts, err
},
parseSignature: func(sigStr []byte) (Signature, error) {
sig, err := edwards.ParseSignature(edwardsCurve, sigStr)
sig, err := edwards.ParseSignature(sigStr)
if err != nil {
return nil, err
}
@ -285,7 +285,7 @@ func newEdwardsDSA() DSA {
if !ok {
return nil, nil, errors.New("wrong type")
}
r, s, err = edwards.Sign(edwardsCurve, &epriv, hash)
r, s, err = edwards.Sign(&epriv, hash)
return
},
verify: func(pub PublicKey, hash []byte, r, s *big.Int) bool {
@ -301,25 +301,23 @@ func newEdwardsDSA() DSA {
// Symmetric cipher encryption
generateSharedSecret: func(privkey []byte, x, y *big.Int) []byte {
privKeyLocal, _, err := edwards.PrivKeyFromScalar(edwardsCurve,
privkey)
privKeyLocal, _, err := edwards.PrivKeyFromScalar(privkey)
if err != nil {
return nil
}
pubkey := edwards.NewPublicKey(edwardsCurve, x, y)
pubkey := edwards.NewPublicKey(x, y)
return edwards.GenerateSharedSecret(privKeyLocal, pubkey)
},
encrypt: func(x, y *big.Int, in []byte) ([]byte, error) {
pubkey := edwards.NewPublicKey(edwardsCurve, x, y)
return edwards.Encrypt(edwardsCurve, pubkey, in)
pubkey := edwards.NewPublicKey(x, y)
return edwards.Encrypt(pubkey, in)
},
decrypt: func(privkey []byte, in []byte) ([]byte, error) {
privKeyLocal, _, err := edwards.PrivKeyFromScalar(edwardsCurve,
privkey)
privKeyLocal, _, err := edwards.PrivKeyFromScalar(privkey)
if err != nil {
return nil, err
}
return edwards.Decrypt(edwardsCurve, privKeyLocal, in)
return edwards.Decrypt(privKeyLocal, in)
},
}

View File

@ -5,7 +5,7 @@ go 1.11
require (
github.com/davecgh/go-spew v1.1.1
github.com/decred/dcrd/chaincfg/chainhash v1.0.2
github.com/decred/dcrd/dcrec/edwards v1.0.0
github.com/decred/dcrd/dcrec/edwards/v2 v2.0.0
github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0
github.com/decred/dcrd/wire v1.2.0
)

View File

@ -12,8 +12,8 @@ github.com/decred/dcrd/chaincfg/chainhash v1.0.2 h1:rt5Vlq/jM3ZawwiacWjPa+smINyL
github.com/decred/dcrd/chaincfg/chainhash v1.0.2/go.mod h1:BpbrGgrPTr3YJYRN3Bm+D9NuaFd+zGyNeIKgrhCXK60=
github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0=
github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc=
github.com/decred/dcrd/dcrec/edwards v1.0.0 h1:UDcPNzclKiJlWqV3x1Fl8xMCJrolo4PB4X9t8LwKDWU=
github.com/decred/dcrd/dcrec/edwards v1.0.0/go.mod h1:HblVh1OfMt7xSxUL1ufjToaEvpbjpWvvTAUx4yem8BI=
github.com/decred/dcrd/dcrec/edwards/v2 v2.0.0 h1:E5KszxGgpjpmW8vN811G6rBAZg0/S/DftdGqN4FW5x4=
github.com/decred/dcrd/dcrec/edwards/v2 v2.0.0/go.mod h1:d0H8xGMWbiIQP7gN3v2rByWUcuZPm9YsgmnfoxgbINc=
github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0 h1:3GIJYXQDAKpLEFriGFN8SbSffak10UXHGdIcFaMPykY=
github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0/go.mod h1:3s92l0paYkZoIHuj4X93Teg/HB7eGM9x/zokGw+u4mY=
github.com/decred/dcrd/wire v1.2.0 h1:HqJVB7vcklIguzFWgRXw/WYCQ9cD3bUC5TKj53i1Hng=

View File

@ -13,7 +13,7 @@ import (
"github.com/decred/dcrd/chaincfg/v2/chainec"
"github.com/decred/dcrd/crypto/ripemd160"
"github.com/decred/dcrd/dcrec"
"github.com/decred/dcrd/dcrec/edwards"
"github.com/decred/dcrd/dcrec/edwards/v2"
"github.com/decred/dcrd/dcrec/secp256k1/v2"
"github.com/decred/dcrd/dcrec/secp256k1/v2/schnorr"
)
@ -480,7 +480,7 @@ type AddressEdwardsPubKey struct {
// pay-to-pubkey address, using an Ed25519 pubkey. The serializedPubKey
// parameter must be a valid 32 byte serialized public key.
func NewAddressEdwardsPubKey(serializedPubKey []byte, net AddressParams) (*AddressEdwardsPubKey, error) {
pubKey, err := edwards.ParsePubKey(edwards.Edwards(), serializedPubKey)
pubKey, err := edwards.ParsePubKey(serializedPubKey)
if err != nil {
return nil, err
}

View File

@ -9,7 +9,7 @@ require (
github.com/decred/dcrd/chaincfg/v2 v2.0.2
github.com/decred/dcrd/crypto/ripemd160 v1.0.0
github.com/decred/dcrd/dcrec v1.0.0
github.com/decred/dcrd/dcrec/edwards v1.0.0
github.com/decred/dcrd/dcrec/edwards/v2 v2.0.0
github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0
github.com/decred/dcrd/wire v1.2.0
)

View File

@ -22,6 +22,8 @@ github.com/decred/dcrd/dcrec v1.0.0 h1:W+z6Es+Rai3MXYVoPAxYr5U1DGis0Co33scJ6uH2J
github.com/decred/dcrd/dcrec v1.0.0/go.mod h1:HIaqbEJQ+PDzQcORxnqen5/V1FR3B4VpIfmePklt8Q8=
github.com/decred/dcrd/dcrec/edwards v1.0.0 h1:UDcPNzclKiJlWqV3x1Fl8xMCJrolo4PB4X9t8LwKDWU=
github.com/decred/dcrd/dcrec/edwards v1.0.0/go.mod h1:HblVh1OfMt7xSxUL1ufjToaEvpbjpWvvTAUx4yem8BI=
github.com/decred/dcrd/dcrec/edwards/v2 v2.0.0 h1:E5KszxGgpjpmW8vN811G6rBAZg0/S/DftdGqN4FW5x4=
github.com/decred/dcrd/dcrec/edwards/v2 v2.0.0/go.mod h1:d0H8xGMWbiIQP7gN3v2rByWUcuZPm9YsgmnfoxgbINc=
github.com/decred/dcrd/dcrec/secp256k1 v1.0.1 h1:EFWVd1p0t0Y5tnsm/dJujgV0ORogRJ6vo7CMAjLseAc=
github.com/decred/dcrd/dcrec/secp256k1 v1.0.1/go.mod h1:lhu4eZFSfTJWUnR3CFRcpD+Vta0KUAqnhTsTksHXgy0=
github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0 h1:3GIJYXQDAKpLEFriGFN8SbSffak10UXHGdIcFaMPykY=

View File

@ -14,7 +14,7 @@ import (
"github.com/decred/dcrd/chaincfg/chainhash"
"github.com/decred/dcrd/chaincfg/v2/chainec"
"github.com/decred/dcrd/dcrec"
"github.com/decred/dcrd/dcrec/edwards"
"github.com/decred/dcrd/dcrec/edwards/v2"
"github.com/decred/dcrd/dcrec/secp256k1/v2"
)
@ -105,7 +105,7 @@ func DecodeWIF(wif string, net [2]byte) (*WIF, error) {
ecType = dcrec.STEcdsaSecp256k1
case dcrec.STEd25519:
privKeyBytes := decoded[3 : 3+edwards.PrivScalarSize]
privKey, _, _ = edwards.PrivKeyFromScalar(edwards.Edwards(), privKeyBytes)
privKey, _, _ = edwards.PrivKeyFromScalar(privKeyBytes)
ecType = dcrec.STEd25519
case dcrec.STSchnorrSecp256k1:
privKeyBytes := decoded[3 : 3+secp256k1.PrivKeyBytesLen]
@ -146,7 +146,7 @@ func (w *WIF) SerializePubKey() []byte {
case dcrec.STEcdsaSecp256k1:
pk = secp256k1.NewPublicKey(pkx, pky)
case dcrec.STEd25519:
pk = edwards.NewPublicKey(edwards.Edwards(), pkx, pky)
pk = edwards.NewPublicKey(pkx, pky)
case dcrec.STSchnorrSecp256k1:
pk = secp256k1.NewPublicKey(pkx, pky)
}

View File

@ -10,7 +10,7 @@ import (
"github.com/decred/dcrd/chaincfg/v2/chainec"
"github.com/decred/dcrd/dcrec"
"github.com/decred/dcrd/dcrec/edwards"
"github.com/decred/dcrd/dcrec/edwards/v2"
"github.com/decred/dcrd/dcrec/secp256k1/v2"
)
@ -40,14 +40,14 @@ func TestEncodeDecodeWIF(t *testing.T) {
0x4e, 0x39, 0x6f, 0xb5, 0xdc, 0x29, 0x5f, 0xe9,
0x94, 0xb9, 0x67, 0x89, 0xb2, 0x1a, 0x03, 0x98})
case dcrec.STEd25519:
priv1, _, _ = edwards.PrivKeyFromScalar(edwards.Edwards(),
priv1, _, _ = edwards.PrivKeyFromScalar(
[]byte{
0x0c, 0x28, 0xfc, 0xa3, 0x86, 0xc7, 0xa2, 0x27,
0x60, 0x0b, 0x2f, 0xe5, 0x0b, 0x7c, 0xae, 0x11,
0xec, 0x86, 0xd3, 0xbf, 0x1f, 0xbe, 0x47, 0x1b,
0xe8, 0x98, 0x27, 0xe1, 0x9d, 0x72, 0xaa, 0x1d})
priv2, _, _ = edwards.PrivKeyFromScalar(edwards.Edwards(),
priv2, _, _ = edwards.PrivKeyFromScalar(
[]byte{
0x0c, 0xa3, 0x5a, 0x14, 0x88, 0xfb, 0x97, 0xb6,
0xeb, 0x3f, 0xe6, 0xe9, 0xef, 0x2a, 0x25, 0x81,

2
go.sum
View File

@ -23,6 +23,8 @@ github.com/decred/dcrd/crypto/ripemd160 v1.0.0 h1:MciTnR4NfBqDFRFjFkrn8WPLP4Vo7t
github.com/decred/dcrd/crypto/ripemd160 v1.0.0/go.mod h1:F0H8cjIuWTRoixr/LM3REB8obcWkmYx0gbxpQWR8RPg=
github.com/decred/dcrd/dcrec/edwards v1.0.0 h1:UDcPNzclKiJlWqV3x1Fl8xMCJrolo4PB4X9t8LwKDWU=
github.com/decred/dcrd/dcrec/edwards v1.0.0/go.mod h1:HblVh1OfMt7xSxUL1ufjToaEvpbjpWvvTAUx4yem8BI=
github.com/decred/dcrd/dcrec/edwards/v2 v2.0.0 h1:E5KszxGgpjpmW8vN811G6rBAZg0/S/DftdGqN4FW5x4=
github.com/decred/dcrd/dcrec/edwards/v2 v2.0.0/go.mod h1:d0H8xGMWbiIQP7gN3v2rByWUcuZPm9YsgmnfoxgbINc=
github.com/decred/dcrd/dcrec/secp256k1 v1.0.1/go.mod h1:lhu4eZFSfTJWUnR3CFRcpD+Vta0KUAqnhTsTksHXgy0=
github.com/decred/dcrd/dcrec/secp256k1 v1.0.2 h1:awk7sYJ4pGWmtkiGHFfctztJjHMKGLV8jctGQhAbKe0=
github.com/decred/dcrd/dcrec/secp256k1 v1.0.2/go.mod h1:CHTUIVfmDDd0KFVFpNX1pFVCBUegxW387nN0IGwNKR0=

View File

@ -7,7 +7,7 @@ require (
github.com/decred/dcrd/chaincfg/v2 v2.0.2
github.com/decred/dcrd/crypto/ripemd160 v1.0.0
github.com/decred/dcrd/dcrec v1.0.0
github.com/decred/dcrd/dcrec/edwards v1.0.0
github.com/decred/dcrd/dcrec/edwards/v2 v2.0.0
github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0
github.com/decred/dcrd/dcrutil/v2 v2.0.0
github.com/decred/dcrd/wire v1.2.0

View File

@ -20,6 +20,8 @@ github.com/decred/dcrd/dcrec v1.0.0 h1:W+z6Es+Rai3MXYVoPAxYr5U1DGis0Co33scJ6uH2J
github.com/decred/dcrd/dcrec v1.0.0/go.mod h1:HIaqbEJQ+PDzQcORxnqen5/V1FR3B4VpIfmePklt8Q8=
github.com/decred/dcrd/dcrec/edwards v1.0.0 h1:UDcPNzclKiJlWqV3x1Fl8xMCJrolo4PB4X9t8LwKDWU=
github.com/decred/dcrd/dcrec/edwards v1.0.0/go.mod h1:HblVh1OfMt7xSxUL1ufjToaEvpbjpWvvTAUx4yem8BI=
github.com/decred/dcrd/dcrec/edwards/v2 v2.0.0 h1:E5KszxGgpjpmW8vN811G6rBAZg0/S/DftdGqN4FW5x4=
github.com/decred/dcrd/dcrec/edwards/v2 v2.0.0/go.mod h1:d0H8xGMWbiIQP7gN3v2rByWUcuZPm9YsgmnfoxgbINc=
github.com/decred/dcrd/dcrec/secp256k1 v1.0.2 h1:awk7sYJ4pGWmtkiGHFfctztJjHMKGLV8jctGQhAbKe0=
github.com/decred/dcrd/dcrec/secp256k1 v1.0.2/go.mod h1:CHTUIVfmDDd0KFVFpNX1pFVCBUegxW387nN0IGwNKR0=
github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0 h1:3GIJYXQDAKpLEFriGFN8SbSffak10UXHGdIcFaMPykY=

View File

@ -17,7 +17,7 @@ import (
"github.com/decred/dcrd/chaincfg/chainhash"
"github.com/decred/dcrd/crypto/ripemd160"
"github.com/decred/dcrd/dcrec"
"github.com/decred/dcrd/dcrec/edwards"
"github.com/decred/dcrd/dcrec/edwards/v2"
"github.com/decred/dcrd/dcrec/secp256k1/v2"
"github.com/decred/dcrd/dcrec/secp256k1/v2/schnorr"
"github.com/decred/dcrd/wire"
@ -2849,12 +2849,12 @@ func opcodeCheckSigAlt(op *opcode, data []byte, vm *Engine) error {
// Get the public key from bytes.
switch sigType {
case dcrec.STEd25519:
pubKeyEd, err := edwards.ParsePubKey(edwards.Edwards(), pkBytes)
pubKeyEd, err := edwards.ParsePubKey(pkBytes)
if err != nil {
vm.dstack.PushBool(false)
return nil
}
sigEd, err := edwards.ParseSignature(edwards.Edwards(), sigBytes)
sigEd, err := edwards.ParseSignature(sigBytes)
if err != nil {
vm.dstack.PushBool(false)
return nil