accounts: add ErrDecrypt
This commit is contained in:
parent
a9f26dcd0d
commit
6f1ca0bc91
@ -38,6 +38,7 @@ import (
|
|||||||
var (
|
var (
|
||||||
ErrLocked = errors.New("account is locked")
|
ErrLocked = errors.New("account is locked")
|
||||||
ErrNoMatch = errors.New("no key for given address or file")
|
ErrNoMatch = errors.New("no key for given address or file")
|
||||||
|
ErrDecrypt = errors.New("could not decrypt key with given passphrase")
|
||||||
)
|
)
|
||||||
|
|
||||||
type Account struct {
|
type Account struct {
|
||||||
|
@ -31,7 +31,6 @@ import (
|
|||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@ -214,7 +213,7 @@ func decryptKeyV3(keyProtected *encryptedKeyJSONV3, auth string) (keyBytes []byt
|
|||||||
|
|
||||||
calculatedMAC := crypto.Keccak256(derivedKey[16:32], cipherText)
|
calculatedMAC := crypto.Keccak256(derivedKey[16:32], cipherText)
|
||||||
if !bytes.Equal(calculatedMAC, mac) {
|
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)
|
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)
|
calculatedMAC := crypto.Keccak256(derivedKey[16:32], cipherText)
|
||||||
if !bytes.Equal(calculatedMAC, mac) {
|
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)
|
plainText, err := aesCBCDecrypt(crypto.Keccak256(derivedKey[:16])[:16], cipherText, iv)
|
||||||
|
@ -94,8 +94,8 @@ func TestKeyStorePassphraseDecryptionFail(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
if _, err = ks.GetKey(k1.Address, account.File, "bar"); err == nil {
|
if _, err = ks.GetKey(k1.Address, account.File, "bar"); err != ErrDecrypt {
|
||||||
t.Fatal("no error for invalid passphrase")
|
t.Fatalf("wrong error for invalid passphrase\ngot %q\nwant %q", err, ErrDecrypt)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,7 +22,6 @@ import (
|
|||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
@ -106,7 +105,7 @@ func aesCBCDecrypt(key, cipherText, iv []byte) ([]byte, error) {
|
|||||||
decrypter.CryptBlocks(paddedPlaintext, cipherText)
|
decrypter.CryptBlocks(paddedPlaintext, cipherText)
|
||||||
plaintext := pkcs7Unpad(paddedPlaintext)
|
plaintext := pkcs7Unpad(paddedPlaintext)
|
||||||
if plaintext == nil {
|
if plaintext == nil {
|
||||||
err = errors.New("Decryption failed: PKCS7Unpad failed after AES decryption")
|
return nil, ErrDecrypt
|
||||||
}
|
}
|
||||||
return plaintext, err
|
return plaintext, err
|
||||||
}
|
}
|
||||||
|
@ -263,7 +263,7 @@ func importWallet(ctx *cli.Context) {
|
|||||||
|
|
||||||
acct, err := accman.ImportPreSaleKey(keyJson, passphrase)
|
acct, err := accman.ImportPreSaleKey(keyJson, passphrase)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.Fatalf("Could not create the account: %v", err)
|
utils.Fatalf("%v", err)
|
||||||
}
|
}
|
||||||
fmt.Printf("Address: {%x}\n", acct.Address)
|
fmt.Printf("Address: {%x}\n", acct.Address)
|
||||||
}
|
}
|
||||||
|
@ -127,7 +127,7 @@ func TestWalletImportBadPassword(t *testing.T) {
|
|||||||
geth.expect(`
|
geth.expect(`
|
||||||
!! Unsupported terminal, password will be echoed.
|
!! Unsupported terminal, password will be echoed.
|
||||||
Passphrase: {{.InputLine "wrong"}}
|
Passphrase: {{.InputLine "wrong"}}
|
||||||
Fatal: Could not create the account: Decryption failed: PKCS7Unpad failed after AES decryption
|
Fatal: could not decrypt key with given passphrase
|
||||||
`)
|
`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user