#ifndef XRPL_PROTOCOL_TOKENS_H_INCLUDED #define XRPL_PROTOCOL_TOKENS_H_INCLUDED #include #include #include #include #include #include #include #include namespace ripple { template using B58Result = Expected; enum class TokenType : std::uint8_t { None = 1, // unused NodePublic = 28, NodePrivate = 32, AccountID = 0, AccountPublic = 35, AccountSecret = 34, FamilyGenerator = 41, // unused FamilySeed = 33 }; template [[nodiscard]] std::optional parseBase58(std::string const& s); template [[nodiscard]] std::optional parseBase58(TokenType type, std::string const& s); /** Encode data in Base58Check format using XRPL alphabet For details on the format see https://xrpl.org/base58-encodings.html#base58-encodings @param type The type of token to encode. @param token Pointer to the data to encode. @param size The size of the data to encode. @return the encoded token. */ [[nodiscard]] std::string encodeBase58Token(TokenType type, void const* token, std::size_t size); [[nodiscard]] std::string decodeBase58Token(std::string const& s, TokenType type); namespace b58_ref { // The reference version does not use gcc extensions (int128 in particular) [[nodiscard]] std::string encodeBase58Token(TokenType type, void const* token, std::size_t size); [[nodiscard]] std::string decodeBase58Token(std::string const& s, TokenType type); namespace detail { // Expose detail functions for unit tests only std::string encodeBase58( void const* message, std::size_t size, void* temp, std::size_t temp_size); std::string decodeBase58(std::string const& s); } // namespace detail } // namespace b58_ref #ifndef _MSC_VER namespace b58_fast { // Use the fast version (10-15x faster) is using gcc extensions (int128 in // particular) [[nodiscard]] B58Result> encodeBase58Token( TokenType token_type, std::span input, std::span out); [[nodiscard]] B58Result> decodeBase58Token( TokenType type, std::string_view s, std::span outBuf); // This interface matches the old interface, but requires additional allocation [[nodiscard]] std::string encodeBase58Token(TokenType type, void const* token, std::size_t size); // This interface matches the old interface, but requires additional allocation [[nodiscard]] std::string decodeBase58Token(std::string const& s, TokenType type); namespace detail { // Expose detail functions for unit tests only B58Result> b256_to_b58_be( std::span input, std::span out); B58Result> b58_to_b256_be(std::string_view input, std::span out); } // namespace detail } // namespace b58_fast #endif // _MSC_VER } // namespace ripple #endif