aboutsummaryrefslogtreecommitdiffstats
path: root/crypto
diff options
context:
space:
mode:
Diffstat (limited to 'crypto')
-rw-r--r--crypto/crypto.go19
1 files changed, 18 insertions, 1 deletions
diff --git a/crypto/crypto.go b/crypto/crypto.go
index d70a5a4db..b8fd78fa2 100644
--- a/crypto/crypto.go
+++ b/crypto/crypto.go
@@ -56,6 +56,10 @@ func Ecrecover(data []byte) []byte {
// New methods using proper ecdsa keys from the stdlib
func ToECDSA(prv []byte) *ecdsa.PrivateKey {
+ if len(prv) == 0 {
+ return nil
+ }
+
priv := new(ecdsa.PrivateKey)
priv.PublicKey.Curve = S256()
priv.D = ethutil.BigD(prv)
@@ -64,14 +68,27 @@ func ToECDSA(prv []byte) *ecdsa.PrivateKey {
}
func FromECDSA(prv *ecdsa.PrivateKey) []byte {
+ if prv == nil {
+ return nil
+ }
return prv.D.Bytes()
}
-func PubToECDSA(pub []byte) *ecdsa.PublicKey {
+func ToECDSAPub(pub []byte) *ecdsa.PublicKey {
+ if len(pub) == 0 {
+ return nil
+ }
x, y := elliptic.Unmarshal(S256(), pub)
return &ecdsa.PublicKey{S256(), x, y}
}
+func FromECDSAPub(pub *ecdsa.PublicKey) []byte {
+ if pub == nil {
+ return nil
+ }
+ return elliptic.Marshal(S256(), pub.X, pub.Y)
+}
+
func GenerateKey() (*ecdsa.PrivateKey, error) {
return ecdsa.GenerateKey(S256(), rand.Reader)
}