3#include <xrpl/basics/Slice.h>
4#include <xrpl/basics/StringUtilities.h>
5#include <xrpl/basics/base_uint.h>
6#include <xrpl/basics/contract.h>
7#include <xrpl/beast/net/IPEndpoint.h>
8#include <xrpl/json/json_value.h>
9#include <xrpl/protocol/AccountID.h>
10#include <xrpl/protocol/KeyType.h>
11#include <xrpl/protocol/SField.h>
12#include <xrpl/protocol/STBlob.h>
13#include <xrpl/protocol/STExchange.h>
14#include <xrpl/protocol/UintTypes.h>
15#include <xrpl/protocol/json_get_or_throw.h>
16#include <xrpl/protocol/tokens.h>
145template <
class Hasher>
237 PublicKey
const& publicKey,
240 bool mustBeFullyCanonical =
true) noexcept;
248verify(PublicKey const& publicKey, Slice const& m, Slice const& sig) noexcept;
263 beast::ip::Endpoint const& address,
265 std::optional<
std::
string> const&
id =
std::nullopt)
268 ss <<
"IP Address: " << address;
269 if (publicKey.has_value())
271 ss <<
", Public Key: " << toBase58(TokenType::NodePublic, *publicKey);
275 ss <<
", Id: " <<
id.value();
285inline xrpl::PublicKey
288 using namespace xrpl;
290 if (
auto pubKeyBlob =
strUnHex(b58);
const_iterator cbegin() const noexcept
const_iterator begin() const noexcept
std::uint8_t const * data() const noexcept
const_iterator end() const noexcept
static std::size_t size() noexcept
std::uint8_t const * const_iterator
static constexpr std::size_t kSize
Slice slice() const noexcept
const_iterator cend() const noexcept
PublicKey & operator=(PublicKey const &other)
json::StaticString const & getJsonName() const
std::uint8_t const * data() const
An immutable linear range of bytes.
T lexicographical_compare(T... args)
JSON (JavaScript Object Notation).
xrpl::AccountID getOrThrow(json::Value const &v, xrpl::SField const &field)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
bool operator<(Slice const &lhs, Slice const &rhs) noexcept
constexpr bool operator==(BaseUInt< Bits, Tag > const &lhs, BaseUInt< Bits, Tag > const &rhs)
static Hasher::result_type digest(void const *data, std::size_t size) noexcept
bool verifyDigest(PublicKey const &publicKey, uint256 const &digest, Slice const &sig, bool mustBeFullyCanonical=true) noexcept
Verify a secp256k1 signature on the digest of a message.
std::optional< AccountID > parseBase58(std::string const &s)
Parse AccountID from checked, base58 string.
bool verify(PublicKey const &publicKey, Slice const &m, Slice const &sig) noexcept
Verify a signature on a message.
std::string toBase58(AccountID const &v)
Convert AccountID to base58 checked string.
std::optional< ECDSACanonicality > ecdsaCanonicality(Slice const &sig)
Determines the canonicality of a signature.
std::ostream & operator<<(std::ostream &out, BaseUInt< Bits, Tag > const &u)
std::optional< KeyType > publicKeyType(Slice const &slice)
Returns the type of public key.
Slice makeSlice(std::array< T, N > const &a)
Dir::ConstIterator const_iterator
std::optional< Blob > strUnHex(std::size_t strSize, Iterator begin, Iterator end)
NodeID calcNodeID(PublicKey const &)
Calculate the 160-bit node ID from a node public key.
AccountID calcAccountID(PublicKey const &pk)
BaseUInt< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
void hash_append(Hasher &h, Slice const &v)
std::string getFingerprint(beast::ip::Endpoint const &address, std::optional< PublicKey > const &publicKey=std::nullopt, std::optional< std::string > const &id=std::nullopt)
std::string encodeBase58Token(TokenType type, void const *token, std::size_t size)
Encode data in Base58Check format using XRPL alphabet.
XRPL_NO_SANITIZE_ADDRESS void Throw(Args &&... args)
BaseUInt< 160, detail::NodeIDTag > NodeID
NodeID is a 160-bit hash representing one node.
static std::unique_ptr< STBlob > set(SField const &f, PublicKey const &t)
static void get(std::optional< value_type > &t, STBlob const &u)