rippled
Loading...
Searching...
No Matches
NodeIdentity.cpp
1#include <xrpld/app/main/Application.h>
2#include <xrpld/app/main/NodeIdentity.h>
3#include <xrpld/core/Config.h>
4#include <xrpld/core/ConfigSections.h>
5
6#include <xrpl/server/Wallet.h>
7
8namespace xrpl {
9
11getNodeIdentity(Application& app, boost::program_options::variables_map const& cmdline)
12{
14
15 if (cmdline.count("nodeid"))
16 {
17 seed = parseGenericSeed(cmdline["nodeid"].as<std::string>(), false);
18
19 if (!seed)
20 Throw<std::runtime_error>("Invalid 'nodeid' in command line");
21 }
22 else if (app.config().exists(SECTION_NODE_SEED))
23 {
24 seed = parseBase58<Seed>(app.config().section(SECTION_NODE_SEED).lines().front());
25
26 if (!seed)
27 Throw<std::runtime_error>("Invalid [" SECTION_NODE_SEED "] in configuration file");
28 }
29
30 if (seed)
31 {
32 auto secretKey = generateSecretKey(KeyType::secp256k1, *seed);
33 auto publicKey = derivePublicKey(KeyType::secp256k1, secretKey);
34
35 return {publicKey, secretKey};
36 }
37
38 auto db = app.getWalletDB().checkoutDb();
39
40 if (cmdline.count("newnodeid") != 0)
42
43 return getNodeIdentity(*db);
44}
45
46} // namespace xrpl
virtual Config & config()=0
virtual DatabaseCon & getWalletDB()=0
Retrieve the "wallet database".
bool exists(std::string const &name) const
Returns true if a section with the given name exists.
Section & section(std::string const &name)
Returns the section with the given name.
LockedSociSession checkoutDb()
std::vector< std::string > const & lines() const
Returns all the lines in the section.
Definition BasicConfig.h:49
T front(T... args)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
PublicKey derivePublicKey(KeyType type, SecretKey const &sk)
Derive the public key from a secret key.
std::pair< PublicKey, SecretKey > getNodeIdentity(soci::session &session)
Returns a stable public and private key for this node.
Definition Wallet.cpp:102
SecretKey generateSecretKey(KeyType type, Seed const &seed)
Generate a new secret key deterministically.
void clearNodeIdentity(soci::session &session)
Delete any saved public/private key associated with this node.
Definition Wallet.cpp:96
std::optional< Seed > parseGenericSeed(std::string const &str, bool rfc1751=true)
Attempt to parse a string as a seed.
Definition Seed.cpp:78