Add an api to get a pubkey and privkey from a privkey byte string.
ok and some tweaks from @jrick.
This commit is contained in:
parent
de670bd5b2
commit
d0a4086e29
4 changed files with 55 additions and 30 deletions
28
privkey.go
Normal file
28
privkey.go
Normal file
|
@ -0,0 +1,28 @@
|
|||
// Copyright (c) 2013-2014 Conformal Systems LLC.
|
||||
// Use of this source code is governed by an ISC
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package btcec
|
||||
|
||||
import (
|
||||
"crypto/ecdsa"
|
||||
"math/big"
|
||||
)
|
||||
|
||||
// PrivKeyFromBytes returns a private and public key for `curve' based on the
|
||||
// private key passed as an argument as a byte slice.
|
||||
func PrivKeyFromBytes(curve *KoblitzCurve, pk []byte) (*ecdsa.PrivateKey,
|
||||
*PublicKey) {
|
||||
x, y := curve.ScalarBaseMult(pk)
|
||||
|
||||
priv := &ecdsa.PrivateKey{
|
||||
PublicKey: ecdsa.PublicKey{
|
||||
Curve: curve,
|
||||
X: x,
|
||||
Y: y,
|
||||
},
|
||||
D: new(big.Int).SetBytes(pk),
|
||||
}
|
||||
|
||||
return priv, (*PublicKey)(&priv.PublicKey)
|
||||
}
|
|
@ -6,7 +6,6 @@ package btcec_test
|
|||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/ecdsa"
|
||||
"github.com/conformal/btcec"
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
"testing"
|
||||
|
@ -220,13 +219,10 @@ var pubKeyTests = []pubKeyTest{
|
|||
|
||||
func TestPrivKeys(t *testing.T) {
|
||||
for _, test := range privKeyTests {
|
||||
x, y := btcec.S256().ScalarBaseMult(test.key)
|
||||
pub := (*btcec.PublicKey)(&ecdsa.PublicKey{
|
||||
Curve: btcec.S256(),
|
||||
X: x,
|
||||
Y: y,
|
||||
})
|
||||
_, err := btcec.ParsePubKey(pub.SerializeUncompressed(), btcec.S256())
|
||||
_, pub := btcec.PrivKeyFromBytes(btcec.S256(), test.key)
|
||||
|
||||
_, err := btcec.ParsePubKey(
|
||||
pub.SerializeUncompressed(), btcec.S256())
|
||||
if err != nil {
|
||||
t.Errorf("%s privkey: %v", test.name, err)
|
||||
continue
|
||||
|
|
|
@ -437,7 +437,7 @@ func testSignCompact(t *testing.T, tag string, curve *btcec.KoblitzCurve,
|
|||
|
||||
pk, wasCompressed, err := btcec.RecoverCompact(curve, sig, hashed)
|
||||
if err != nil {
|
||||
t.Errorf("%s: error recovering: %s", tag, err)
|
||||
t.Errorf("%s: error recovering: %s", tag, err)
|
||||
return
|
||||
}
|
||||
if pk.X.Cmp(priv.X) != 0 || pk.Y.Cmp(priv.Y) != 0 {
|
||||
|
|
|
@ -10,55 +10,56 @@ github.com/conformal/btcec/field.go fieldVal.PutBytes 100.00% (32/32)
|
|||
github.com/conformal/btcec/btcec.go KoblitzCurve.addZ1EqualsZ2 100.00% (30/30)
|
||||
github.com/conformal/btcec/btcec.go KoblitzCurve.addZ1AndZ2EqualsOne 100.00% (29/29)
|
||||
github.com/conformal/btcec/btcec.go KoblitzCurve.addJacobian 100.00% (22/22)
|
||||
github.com/conformal/btcec/btcec.go KoblitzCurve.doubleGeneric 100.00% (18/18)
|
||||
github.com/conformal/btcec/btcec.go KoblitzCurve.doubleZ1EqualsOne 100.00% (18/18)
|
||||
github.com/conformal/btcec/btcec.go KoblitzCurve.doubleGeneric 100.00% (18/18)
|
||||
github.com/conformal/btcec/signature.go Signature.Serialize 100.00% (13/13)
|
||||
github.com/conformal/btcec/btcec.go KoblitzCurve.fieldJacobianToBigAffine 100.00% (12/12)
|
||||
github.com/conformal/btcec/field.go fieldVal.MulInt 100.00% (12/12)
|
||||
github.com/conformal/btcec/field.go fieldVal.Add 100.00% (11/11)
|
||||
github.com/conformal/btcec/btcec.go KoblitzCurve.fieldJacobianToBigAffine 100.00% (12/12)
|
||||
github.com/conformal/btcec/field.go fieldVal.Add2 100.00% (11/11)
|
||||
github.com/conformal/btcec/field.go fieldVal.SetBytes 100.00% (11/11)
|
||||
github.com/conformal/btcec/field.go fieldVal.Add 100.00% (11/11)
|
||||
github.com/conformal/btcec/field.go fieldVal.NegateVal 100.00% (11/11)
|
||||
github.com/conformal/btcec/field.go fieldVal.Zero 100.00% (10/10)
|
||||
github.com/conformal/btcec/btcec.go KoblitzCurve.Add 100.00% (10/10)
|
||||
github.com/conformal/btcec/field.go fieldVal.SetBytes 100.00% (11/11)
|
||||
github.com/conformal/btcec/btcec.go KoblitzCurve.ScalarMult 100.00% (10/10)
|
||||
github.com/conformal/btcec/btcec.go KoblitzCurve.Add 100.00% (10/10)
|
||||
github.com/conformal/btcec/field.go fieldVal.Zero 100.00% (10/10)
|
||||
github.com/conformal/btcec/btcec.go KoblitzCurve.doubleJacobian 100.00% (9/9)
|
||||
github.com/conformal/btcec/btcec.go initS256 100.00% (9/9)
|
||||
github.com/conformal/btcec/pubkey.go PublicKey.SerializeHybrid 100.00% (8/8)
|
||||
github.com/conformal/btcec/signature.go canonicalizeInt 100.00% (8/8)
|
||||
github.com/conformal/btcec/pubkey.go PublicKey.SerializeCompressed 100.00% (7/7)
|
||||
github.com/conformal/btcec/btcec.go KoblitzCurve.Double 100.00% (7/7)
|
||||
github.com/conformal/btcec/pubkey.go PublicKey.SerializeUncompressed 100.00% (5/5)
|
||||
github.com/conformal/btcec/field.go fieldVal.SetByteSlice 100.00% (5/5)
|
||||
github.com/conformal/btcec/pubkey.go PublicKey.SerializeCompressed 100.00% (7/7)
|
||||
github.com/conformal/btcec/privkey.go PrivKeyFromBytes 100.00% (6/6)
|
||||
github.com/conformal/btcec/pubkey.go pad 100.00% (5/5)
|
||||
github.com/conformal/btcec/field.go fieldVal.SetByteSlice 100.00% (5/5)
|
||||
github.com/conformal/btcec/pubkey.go PublicKey.SerializeUncompressed 100.00% (5/5)
|
||||
github.com/conformal/btcec/signature.go canonicalPadding 100.00% (4/4)
|
||||
github.com/conformal/btcec/btcec.go KoblitzCurve.bigAffineToField 100.00% (4/4)
|
||||
github.com/conformal/btcec/field.go fieldVal.SetHex 100.00% (4/4)
|
||||
github.com/conformal/btcec/signature.go canonicalPadding 100.00% (4/4)
|
||||
github.com/conformal/btcec/btcec.go KoblitzCurve.IsOnCurve 100.00% (4/4)
|
||||
github.com/conformal/btcec/field.go fieldVal.SetInt 100.00% (3/3)
|
||||
github.com/conformal/btcec/field.go fieldVal.Bytes 100.00% (3/3)
|
||||
github.com/conformal/btcec/field.go fieldVal.IsZero 100.00% (2/2)
|
||||
github.com/conformal/btcec/field.go fieldVal.AddInt 100.00% (2/2)
|
||||
github.com/conformal/btcec/field.go fieldVal.Equals 100.00% (2/2)
|
||||
github.com/conformal/btcec/field.go fieldVal.Set 100.00% (2/2)
|
||||
github.com/conformal/btcec/field.go fieldVal.String 100.00% (2/2)
|
||||
github.com/conformal/btcec/field.go fieldVal.Equals 100.00% (2/2)
|
||||
github.com/conformal/btcec/field.go fieldVal.IsZero 100.00% (2/2)
|
||||
github.com/conformal/btcec/btcec.go S256 100.00% (2/2)
|
||||
github.com/conformal/btcec/field.go fieldVal.AddInt 100.00% (2/2)
|
||||
github.com/conformal/btcec/field.go fieldVal.Set 100.00% (2/2)
|
||||
github.com/conformal/btcec/pubkey.go isOdd 100.00% (1/1)
|
||||
github.com/conformal/btcec/field.go fieldVal.Negate 100.00% (1/1)
|
||||
github.com/conformal/btcec/btcec.go initAll 100.00% (1/1)
|
||||
github.com/conformal/btcec/signature.go ParseSignature 100.00% (1/1)
|
||||
github.com/conformal/btcec/signature.go ParseDERSignature 100.00% (1/1)
|
||||
github.com/conformal/btcec/btcec.go KoblitzCurve.ScalarBaseMult 100.00% (1/1)
|
||||
github.com/conformal/btcec/field.go fieldVal.Mul 100.00% (1/1)
|
||||
github.com/conformal/btcec/btcec.go KoblitzCurve.Params 100.00% (1/1)
|
||||
github.com/conformal/btcec/field.go fieldVal.Square 100.00% (1/1)
|
||||
github.com/conformal/btcec/field.go fieldVal.Negate 100.00% (1/1)
|
||||
github.com/conformal/btcec/field.go fieldVal.IsOdd 100.00% (1/1)
|
||||
github.com/conformal/btcec/btcec.go initAll 100.00% (1/1)
|
||||
github.com/conformal/btcec/btcec.go KoblitzCurve.ScalarBaseMult 100.00% (1/1)
|
||||
github.com/conformal/btcec/btcec.go KoblitzCurve.QPlus1Div4 100.00% (1/1)
|
||||
github.com/conformal/btcec/signature.go ParseSignature 100.00% (1/1)
|
||||
github.com/conformal/btcec/pubkey.go ParsePubKey 96.15% (25/26)
|
||||
github.com/conformal/btcec/signature.go SignCompact 90.91% (20/22)
|
||||
github.com/conformal/btcec/pubkey.go ParsePubKey 92.86% (26/28)
|
||||
github.com/conformal/btcec/pubkey.go decompressPoint 88.89% (8/9)
|
||||
github.com/conformal/btcec/signature.go recoverKeyFromSignature 86.96% (20/23)
|
||||
github.com/conformal/btcec/signature.go SignCompact 86.36% (19/22)
|
||||
github.com/conformal/btcec/signature.go RecoverCompact 77.78% (7/9)
|
||||
github.com/conformal/btcec/signature.go hashToInt 77.78% (7/9)
|
||||
github.com/conformal/btcec ------------------------------------- 98.80% (903/914)
|
||||
github.com/conformal/btcec ------------------------------------- 98.59% (909/922)
|
||||
|
||||
|
|
Loading…
Reference in a new issue