30 #include <boost/filesystem.hpp>
51 static h256 const UnknownPassword;
53 static auto const DontKnowThrow = [](){
throw PasswordUnknown();
return std::string(); };
82 void setKeysFile(boost::filesystem::path
const& _keysFile) { m_keysFile = _keysFile; }
83 boost::filesystem::path
const&
keysFile()
const {
return m_keysFile; }
86 void create(std::string
const& _pass);
87 bool load(std::string
const& _pass);
88 void save(std::string
const& _pass)
const { write(_pass, m_keysFile); }
90 void notePassword(std::string
const& _pass) { m_cachedPasswords[hashPassword(_pass)] = _pass; }
91 void noteHint(std::string
const& _pass, std::string
const& _hint) {
if (!_hint.empty()) m_passwordHint[hashPassword(_pass)] = _hint; }
92 bool haveHint(std::string
const& _pass)
const {
auto h = hashPassword(_pass);
return m_cachedPasswords.count(h) && !m_cachedPasswords.at(h).empty(); }
109 h128 import(
Secret const& _s, std::string
const& _accountName, std::string
const& _pass, std::string
const& _passwordHint);
110 h128 import(
Secret const& _s, std::string
const& _accountName) {
return import(_s, _accountName, defaultPassword(), std::string()); }
113 void importExisting(
h128 const& _uuid, std::string
const& _accountName, std::string
const& _pass, std::string
const& _passwordHint);
114 void importExisting(
h128 const& _uuid, std::string
const& _accountName,
Address const& _addr,
h256 const& _passHash =
h256(), std::string
const& _passwordHint = std::string());
118 Secret secret(
Address const& _address, std::function<std::string()>
const& _pass = DontKnowThrow,
bool _usePasswordCache =
true)
const;
121 Secret secret(
h128 const& _uuid, std::function<std::string()>
const& _pass = DontKnowThrow,
bool _usePasswordCache =
true)
const;
123 bool recode(
Address const& _address, std::string
const& _newPass, std::string
const& _hint, std::function<std::string()>
const& _pass = DontKnowThrow,
KDF _kdf =
KDF::Scrypt);
128 static boost::filesystem::path
defaultPath() {
return getDataDir(
"ethereum") / boost::filesystem::path(
"keys.info"); }
131 static KeyPair presaleSecret(std::string
const& _json, std::function<std::string(
bool)>
const& _password);
136 std::string getPassword(
h128 const& _uuid, std::function<std::string()>
const& _pass = DontKnowThrow)
const;
137 std::string getPassword(
h256 const& _passHash, std::function<std::string()>
const& _pass = DontKnowThrow)
const;
138 std::string defaultPassword(std::function<std::string()>
const& _pass = DontKnowThrow)
const {
return getPassword(m_master, _pass); }
139 h256 hashPassword(std::string
const& _pass)
const;
142 void cachePassword(std::string
const& _password)
const;
146 bool write()
const {
return write(m_keysFile); }
147 bool write(boost::filesystem::path
const& _keysFile)
const;
148 void write(std::string
const& _pass, boost::filesystem::path
const& _keysFile)
const;
149 void write(SecureFixedHash<16>
const& _key, boost::filesystem::path
const& _keysFile)
const;
154 std::unordered_map<h128, Address> m_uuidLookup;
156 std::unordered_map<Address, h128> m_addrLookup;
158 std::unordered_map<Address, KeyInfo> m_keyInfo;
160 std::unordered_map<h256, std::string> m_passwordHint;
163 mutable std::unordered_map<h256, std::string> m_cachedPasswords;
170 std::string m_defaultPasswordDeprecated;
172 mutable boost::filesystem::path m_keysFile;
173 mutable SecureFixedHash<16> m_keysFileKey;
174 mutable h256 m_master;