diff --git a/crypto/crypto.go b/crypto/crypto.go
index d70a5a4dbcdfc42ece0b60797d3553d5f45eb3ef..b8fd78fa2f69b07f51ac2e858ef22902759f3326 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)
 }