bool SerializedValidation::isValid(const uint256& signingHash) const { try { RippleAddress raPublicKey = RippleAddress::createNodePublic(getFieldVL(sfSigningPubKey)); return raPublicKey.isValid() && raPublicKey.verifyNodePublic(signingHash, getFieldVL(sfSignature)); } catch (...) { Log(lsINFO) << "exception validating validation"; return false; } }
AccountState::AccountState (RippleAddress const& naAccountID) : mAccountID (naAccountID) , mValid (false) { if (naAccountID.isValid ()) { mValid = true; mLedgerEntry = std::make_shared <STLedgerEntry> ( ltACCOUNT_ROOT, getAccountRootIndex (naAccountID)); mLedgerEntry->setFieldAccount (sfAccount, naAccountID.getAccountID ()); } }
bool SerializedValidation::isValid (uint256 const& signingHash) const { try { const ECDSA fullyCanonical = getFlags () & vfFullyCanonicalSig ? ECDSA::strict : ECDSA::not_strict; RippleAddress raPublicKey = RippleAddress::createNodePublic (getFieldVL (sfSigningPubKey)); return raPublicKey.isValid () && raPublicKey.verifyNodePublic (signingHash, getFieldVL (sfSignature), fullyCanonical); } catch (...) { WriteLog (lsINFO, Ledger) << "exception validating validation"; return false; } }
bool Transaction::sign(const RippleAddress& naAccountPrivate) { bool bResult = true; if (!naAccountPrivate.isValid()) { Log(lsWARNING) << "No private key for signing"; bResult = false; } getSTransaction()->sign(naAccountPrivate); if (bResult) { updateID(); } else { mStatus = INCOMPLETE; } return bResult; }
std::pair<protocol::TMHello, bool> parseHello (beast::http::message const& m, beast::Journal journal) { auto const& h = m.headers; std::pair<protocol::TMHello, bool> result = { {}, false }; protocol::TMHello& hello = result.first; // protocol version in TMHello is obsolete, // it is supplanted by the values in the headers. { // Required auto const iter = h.find ("Upgrade"); if (iter == h.end()) return result; auto const versions = parse_ProtocolVersions(iter->second); if (versions.empty()) return result; hello.set_protoversion( (static_cast<std::uint32_t>(versions.back().first) << 16) | (static_cast<std::uint32_t>(versions.back().second))); hello.set_protoversionmin( (static_cast<std::uint32_t>(versions.front().first) << 16) | (static_cast<std::uint32_t>(versions.front().second))); } { // Required auto const iter = h.find ("Public-Key"); if (iter == h.end()) return result; RippleAddress addr; addr.setNodePublic (iter->second); if (! addr.isValid()) return result; hello.set_nodepublic (iter->second); } { // Required auto const iter = h.find ("Session-Signature"); if (iter == h.end()) return result; // TODO Security Review hello.set_nodeproof (beast::base64_decode (iter->second)); } { auto const iter = h.find (m.request() ? "User-Agent" : "Server"); if (iter != h.end()) hello.set_fullversion (iter->second); } { auto const iter = h.find ("Network-Time"); if (iter != h.end()) { std::uint64_t nettime; if (! beast::lexicalCastChecked(nettime, iter->second)) return result; hello.set_nettime (nettime); } } { auto const iter = h.find ("Ledger"); if (iter != h.end()) { LedgerIndex ledgerIndex; if (! beast::lexicalCastChecked(ledgerIndex, iter->second)) return result; hello.set_ledgerindex (ledgerIndex); } } { auto const iter = h.find ("Closed-Ledger"); if (iter != h.end()) hello.set_ledgerclosed (beast::base64_decode (iter->second)); } { auto const iter = h.find ("Previous-Ledger"); if (iter != h.end()) hello.set_ledgerprevious (beast::base64_decode (iter->second)); } result.second = true; return result; }