From 6f1ca0bc910b65b517277f72ca52dadcdc713570 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Fri, 1 Apr 2016 22:41:47 +0200 Subject: [PATCH] accounts: add ErrDecrypt --- accounts/account_manager.go | 1 + accounts/key_store_passphrase.go | 5 ++--- accounts/key_store_test.go | 4 ++-- accounts/presale.go | 3 +-- cmd/geth/accountcmd.go | 2 +- cmd/geth/accountcmd_test.go | 2 +- 6 files changed, 8 insertions(+), 9 deletions(-) diff --git a/accounts/account_manager.go b/accounts/account_manager.go index dc9f40048..2489d29a0 100644 --- a/accounts/account_manager.go +++ b/accounts/account_manager.go @@ -38,6 +38,7 @@ import ( var ( ErrLocked = errors.New("account is locked") ErrNoMatch = errors.New("no key for given address or file") + ErrDecrypt = errors.New("could not decrypt key with given passphrase") ) type Account struct { diff --git a/accounts/key_store_passphrase.go b/accounts/key_store_passphrase.go index 0cc598bbc..87c7cb98f 100644 --- a/accounts/key_store_passphrase.go +++ b/accounts/key_store_passphrase.go @@ -31,7 +31,6 @@ import ( "crypto/sha256" "encoding/hex" "encoding/json" - "errors" "fmt" "io/ioutil" "path/filepath" @@ -214,7 +213,7 @@ func decryptKeyV3(keyProtected *encryptedKeyJSONV3, auth string) (keyBytes []byt calculatedMAC := crypto.Keccak256(derivedKey[16:32], cipherText) if !bytes.Equal(calculatedMAC, mac) { - return nil, nil, errors.New("Decryption failed: MAC mismatch") + return nil, nil, ErrDecrypt } plainText, err := aesCTRXOR(derivedKey[:16], cipherText, iv) @@ -248,7 +247,7 @@ func decryptKeyV1(keyProtected *encryptedKeyJSONV1, auth string) (keyBytes []byt calculatedMAC := crypto.Keccak256(derivedKey[16:32], cipherText) if !bytes.Equal(calculatedMAC, mac) { - return nil, nil, errors.New("Decryption failed: MAC mismatch") + return nil, nil, ErrDecrypt } plainText, err := aesCBCDecrypt(crypto.Keccak256(derivedKey[:16])[:16], cipherText, iv) diff --git a/accounts/key_store_test.go b/accounts/key_store_test.go index 01bf1b50a..b0417c87e 100644 --- a/accounts/key_store_test.go +++ b/accounts/key_store_test.go @@ -94,8 +94,8 @@ func TestKeyStorePassphraseDecryptionFail(t *testing.T) { if err != nil { t.Fatal(err) } - if _, err = ks.GetKey(k1.Address, account.File, "bar"); err == nil { - t.Fatal("no error for invalid passphrase") + if _, err = ks.GetKey(k1.Address, account.File, "bar"); err != ErrDecrypt { + t.Fatalf("wrong error for invalid passphrase\ngot %q\nwant %q", err, ErrDecrypt) } } diff --git a/accounts/presale.go b/accounts/presale.go index 86bfc519c..bb82821b9 100644 --- a/accounts/presale.go +++ b/accounts/presale.go @@ -22,7 +22,6 @@ import ( "crypto/sha256" "encoding/hex" "encoding/json" - "errors" "fmt" "github.com/ethereum/go-ethereum/crypto" @@ -106,7 +105,7 @@ func aesCBCDecrypt(key, cipherText, iv []byte) ([]byte, error) { decrypter.CryptBlocks(paddedPlaintext, cipherText) plaintext := pkcs7Unpad(paddedPlaintext) if plaintext == nil { - err = errors.New("Decryption failed: PKCS7Unpad failed after AES decryption") + return nil, ErrDecrypt } return plaintext, err } diff --git a/cmd/geth/accountcmd.go b/cmd/geth/accountcmd.go index 35b6b2dd8..6e8d2b7eb 100644 --- a/cmd/geth/accountcmd.go +++ b/cmd/geth/accountcmd.go @@ -263,7 +263,7 @@ func importWallet(ctx *cli.Context) { acct, err := accman.ImportPreSaleKey(keyJson, passphrase) if err != nil { - utils.Fatalf("Could not create the account: %v", err) + utils.Fatalf("%v", err) } fmt.Printf("Address: {%x}\n", acct.Address) } diff --git a/cmd/geth/accountcmd_test.go b/cmd/geth/accountcmd_test.go index 7a1bf4ea1..fa3f73843 100644 --- a/cmd/geth/accountcmd_test.go +++ b/cmd/geth/accountcmd_test.go @@ -127,7 +127,7 @@ func TestWalletImportBadPassword(t *testing.T) { geth.expect(` !! Unsupported terminal, password will be echoed. Passphrase: {{.InputLine "wrong"}} -Fatal: Could not create the account: Decryption failed: PKCS7Unpad failed after AES decryption +Fatal: could not decrypt key with given passphrase `) }