From 06e76422b5848283fac78b80ca7a392591bc58e4 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 12 Dec 2014 22:24:04 +0100 Subject: [PATCH] Added length checkes --- crypto/crypto.go | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) 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) }