package generator import ( "bytes" "errors" "github.com/status-im/status-go/eth-node/crypto" "github.com/status-im/status-go/eth-node/types" "github.com/status-im/status-go/extkeys" ) var ( // ErrInvalidKeystoreExtendedKey is returned when the decrypted keystore file // contains some old Status keys. // The old version used to store the BIP44 account at index 0 as PrivateKey, // and the BIP44 account at index 1 as ExtendedKey. // The current version stores the same key as PrivateKey and ExtendedKey. ErrInvalidKeystoreExtendedKey = errors.New("PrivateKey and ExtendedKey are different") ErrInvalidMnemonicPhraseLength = errors.New("invalid mnemonic phrase length; valid lengths are 12, 15, 18, 21, and 24") ) // ValidateKeystoreExtendedKey validates the keystore keys, checking that // ExtendedKey is the extended key of PrivateKey. func ValidateKeystoreExtendedKey(key *types.Key) error { if key.ExtendedKey.IsZeroed() { return nil } if !bytes.Equal(crypto.FromECDSA(key.PrivateKey), crypto.FromECDSA(key.ExtendedKey.ToECDSA())) { return ErrInvalidKeystoreExtendedKey } return nil } // MnemonicPhraseLengthToEntropyStrength returns the entropy strength for a given mnemonic length func MnemonicPhraseLengthToEntropyStrength(length int) (extkeys.EntropyStrength, error) { if length < 12 || length > 24 || length%3 != 0 { return 0, ErrInvalidMnemonicPhraseLength } bitsLength := length * 11 checksumLength := bitsLength % 32 return extkeys.EntropyStrength(bitsLength - checksumLength), nil }