veyron/security: make loadPEMKey support nil encrypted passwords.

Backward compatibility for nil encrypted passwords from old loadPEMKey
function.

Change-Id: Ic0eb4fb082dea33cc1b408ce5b2233668f101da7
diff --git a/security/util.go b/security/util.go
index 175d49f..b33d7fd 100644
--- a/security/util.go
+++ b/security/util.go
@@ -28,10 +28,9 @@
 	return acl
 }
 
-var MissingPassphraseErr = errors.New("passphrase required for decrypting private key")
+var PassphraseErr = errors.New("passphrase incorrect for decrypting private key")
 
-// loadPEMKey loads a key from 'r'. passphrase should be non-nil if the key held in 'r' is
-// encrypted, otherwise a MissingPassphraseErr will be returned.
+// loadPEMKey loads a key from 'r'. returns PassphraseErr for incorrect Passphrase.
 // If the key held in 'r' is unencrypted, 'passphrase' will be ignored.
 func loadPEMKey(r io.Reader, passphrase []byte) (interface{}, error) {
 	pemBlockBytes, err := ioutil.ReadAll(r)
@@ -44,12 +43,9 @@
 	}
 	var data []byte
 	if x509.IsEncryptedPEMBlock(pemBlock) {
-		if passphrase == nil {
-			return nil, MissingPassphraseErr
-		}
 		data, err = x509.DecryptPEMBlock(pemBlock, passphrase)
 		if err != nil {
-			return nil, err
+			return nil, PassphraseErr
 		}
 	} else {
 		data = pemBlock.Bytes
@@ -57,7 +53,11 @@
 
 	switch pemBlock.Type {
 	case ecPrivateKeyPEMType:
-		return x509.ParseECPrivateKey(data)
+		key, err := x509.ParseECPrivateKey(data)
+		if err != nil {
+			return nil, PassphraseErr
+		}
+		return key, nil
 	}
 	return nil, fmt.Errorf("PEM key block has an unrecognized type: %v", pemBlock.Type)
 }