mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-27 22:45:52 +00:00
Split up ripple_SerializedObject.h
This commit is contained in:
@@ -1,128 +1,139 @@
|
||||
|
||||
DECLARE_INSTANCE(SerializedValidation);
|
||||
|
||||
SOTemplate sValidationFormat;
|
||||
|
||||
void SVFInit()
|
||||
SerializedValidation::SerializedValidation (SerializerIterator& sit, bool checkSignature)
|
||||
: STObject (getFormat (), sit, sfValidation)
|
||||
, mTrusted (false)
|
||||
{
|
||||
sValidationFormat.push_back(SOElement(sfFlags, SOE_REQUIRED));
|
||||
sValidationFormat.push_back(SOElement(sfLedgerHash, SOE_REQUIRED));
|
||||
sValidationFormat.push_back(SOElement(sfLedgerSequence, SOE_OPTIONAL));
|
||||
sValidationFormat.push_back(SOElement(sfCloseTime, SOE_OPTIONAL));
|
||||
sValidationFormat.push_back(SOElement(sfLoadFee, SOE_OPTIONAL));
|
||||
sValidationFormat.push_back(SOElement(sfFeatures, SOE_OPTIONAL));
|
||||
sValidationFormat.push_back(SOElement(sfBaseFee, SOE_OPTIONAL));
|
||||
sValidationFormat.push_back(SOElement(sfReserveBase, SOE_OPTIONAL));
|
||||
sValidationFormat.push_back(SOElement(sfReserveIncrement, SOE_OPTIONAL));
|
||||
sValidationFormat.push_back(SOElement(sfSigningTime, SOE_REQUIRED));
|
||||
sValidationFormat.push_back(SOElement(sfSigningPubKey, SOE_REQUIRED));
|
||||
sValidationFormat.push_back(SOElement(sfSignature, SOE_OPTIONAL));
|
||||
};
|
||||
|
||||
const uint32 SerializedValidation::sFullFlag = 0x1;
|
||||
|
||||
SerializedValidation::SerializedValidation(SerializerIterator& sit, bool checkSignature)
|
||||
: STObject(sValidationFormat, sit, sfValidation), mTrusted(false)
|
||||
{
|
||||
mNodeID = RippleAddress::createNodePublic(getFieldVL(sfSigningPubKey)).getNodeID();
|
||||
assert(mNodeID.isNonZero());
|
||||
if (checkSignature && !isValid())
|
||||
{
|
||||
Log(lsTRACE) << "Invalid validation " << getJson(0);
|
||||
throw std::runtime_error("Invalid validation");
|
||||
}
|
||||
mNodeID = RippleAddress::createNodePublic(getFieldVL(sfSigningPubKey)).getNodeID();
|
||||
assert(mNodeID.isNonZero());
|
||||
if (checkSignature && !isValid())
|
||||
{
|
||||
Log(lsTRACE) << "Invalid validation " << getJson(0);
|
||||
throw std::runtime_error("Invalid validation");
|
||||
}
|
||||
}
|
||||
|
||||
SerializedValidation::SerializedValidation(const uint256& ledgerHash, uint32 signTime,
|
||||
const RippleAddress& raPub, bool isFull)
|
||||
: STObject(sValidationFormat, sfValidation), mTrusted(false)
|
||||
SerializedValidation::SerializedValidation (
|
||||
const uint256& ledgerHash, uint32 signTime,
|
||||
const RippleAddress& raPub, bool isFull)
|
||||
: STObject (getFormat (), sfValidation)
|
||||
, mTrusted (false)
|
||||
{ // Does not sign
|
||||
setFieldH256(sfLedgerHash, ledgerHash);
|
||||
setFieldU32(sfSigningTime, signTime);
|
||||
setFieldH256(sfLedgerHash, ledgerHash);
|
||||
setFieldU32(sfSigningTime, signTime);
|
||||
|
||||
setFieldVL(sfSigningPubKey, raPub.getNodePublic());
|
||||
mNodeID = raPub.getNodeID();
|
||||
assert(mNodeID.isNonZero());
|
||||
setFieldVL(sfSigningPubKey, raPub.getNodePublic());
|
||||
mNodeID = raPub.getNodeID();
|
||||
assert(mNodeID.isNonZero());
|
||||
|
||||
if (!isFull)
|
||||
setFlag(sFullFlag);
|
||||
if (!isFull)
|
||||
setFlag(sFullFlag);
|
||||
}
|
||||
|
||||
void SerializedValidation::sign(const RippleAddress& raPriv)
|
||||
{
|
||||
uint256 signingHash;
|
||||
sign(signingHash, raPriv);
|
||||
uint256 signingHash;
|
||||
sign(signingHash, raPriv);
|
||||
}
|
||||
|
||||
void SerializedValidation::sign(uint256& signingHash, const RippleAddress& raPriv)
|
||||
{
|
||||
signingHash = getSigningHash();
|
||||
std::vector<unsigned char> signature;
|
||||
raPriv.signNodePrivate(signingHash, signature);
|
||||
setFieldVL(sfSignature, signature);
|
||||
signingHash = getSigningHash();
|
||||
std::vector<unsigned char> signature;
|
||||
raPriv.signNodePrivate(signingHash, signature);
|
||||
setFieldVL(sfSignature, signature);
|
||||
}
|
||||
|
||||
uint256 SerializedValidation::getSigningHash() const
|
||||
{
|
||||
return STObject::getSigningHash(theConfig.SIGN_VALIDATION);
|
||||
return STObject::getSigningHash(theConfig.SIGN_VALIDATION);
|
||||
}
|
||||
|
||||
uint256 SerializedValidation::getLedgerHash() const
|
||||
{
|
||||
return getFieldH256(sfLedgerHash);
|
||||
return getFieldH256(sfLedgerHash);
|
||||
}
|
||||
|
||||
uint32 SerializedValidation::getSignTime() const
|
||||
{
|
||||
return getFieldU32(sfSigningTime);
|
||||
return getFieldU32(sfSigningTime);
|
||||
}
|
||||
|
||||
uint32 SerializedValidation::getFlags() const
|
||||
{
|
||||
return getFieldU32(sfFlags);
|
||||
return getFieldU32(sfFlags);
|
||||
}
|
||||
|
||||
bool SerializedValidation::isValid() const
|
||||
{
|
||||
return isValid(getSigningHash());
|
||||
return isValid(getSigningHash());
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
try
|
||||
{
|
||||
RippleAddress raPublicKey = RippleAddress::createNodePublic(getFieldVL(sfSigningPubKey));
|
||||
return raPublicKey.isValid() && raPublicKey.verifyNodePublic(signingHash, getFieldVL(sfSignature));
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
Log(lsINFO) << "exception validating validation";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
RippleAddress SerializedValidation::getSignerPublic() const
|
||||
{
|
||||
RippleAddress a;
|
||||
a.setNodePublic(getFieldVL(sfSigningPubKey));
|
||||
return a;
|
||||
RippleAddress a;
|
||||
a.setNodePublic(getFieldVL(sfSigningPubKey));
|
||||
return a;
|
||||
}
|
||||
|
||||
bool SerializedValidation::isFull() const
|
||||
{
|
||||
return (getFlags() & sFullFlag) != 0;
|
||||
return (getFlags() & sFullFlag) != 0;
|
||||
}
|
||||
|
||||
std::vector<unsigned char> SerializedValidation::getSignature() const
|
||||
{
|
||||
return getFieldVL(sfSignature);
|
||||
return getFieldVL(sfSignature);
|
||||
}
|
||||
|
||||
std::vector<unsigned char> SerializedValidation::getSigned() const
|
||||
{
|
||||
Serializer s;
|
||||
add(s);
|
||||
return s.peekData();
|
||||
Serializer s;
|
||||
add(s);
|
||||
return s.peekData();
|
||||
}
|
||||
|
||||
SOTemplate const& SerializedValidation::getFormat ()
|
||||
{
|
||||
struct FormatHolder
|
||||
{
|
||||
SOTemplate format;
|
||||
|
||||
FormatHolder ()
|
||||
{
|
||||
format.push_back (SOElement (sfFlags, SOE_REQUIRED));
|
||||
format.push_back (SOElement (sfLedgerHash, SOE_REQUIRED));
|
||||
format.push_back (SOElement (sfLedgerSequence, SOE_OPTIONAL));
|
||||
format.push_back (SOElement (sfCloseTime, SOE_OPTIONAL));
|
||||
format.push_back (SOElement (sfLoadFee, SOE_OPTIONAL));
|
||||
format.push_back (SOElement (sfFeatures, SOE_OPTIONAL));
|
||||
format.push_back (SOElement (sfBaseFee, SOE_OPTIONAL));
|
||||
format.push_back (SOElement (sfReserveBase, SOE_OPTIONAL));
|
||||
format.push_back (SOElement (sfReserveIncrement,SOE_OPTIONAL));
|
||||
format.push_back (SOElement (sfSigningTime, SOE_REQUIRED));
|
||||
format.push_back (SOElement (sfSigningPubKey, SOE_REQUIRED));
|
||||
format.push_back (SOElement (sfSignature, SOE_OPTIONAL));
|
||||
}
|
||||
};
|
||||
|
||||
static FormatHolder holder;
|
||||
|
||||
return holder.format;
|
||||
}
|
||||
|
||||
// vim:ts=4
|
||||
|
||||
@@ -1,21 +1,23 @@
|
||||
#ifndef __VALIDATION__
|
||||
#define __VALIDATION__
|
||||
#ifndef RIPPLE_SERIALIZEDVALIDATION_H
|
||||
#define RIPPLE_SERIALIZEDVALIDATION_H
|
||||
|
||||
DEFINE_INSTANCE(SerializedValidation);
|
||||
DEFINE_INSTANCE (SerializedValidation);
|
||||
|
||||
class SerializedValidation : public STObject, private IS_INSTANCE(SerializedValidation)
|
||||
class SerializedValidation
|
||||
: public STObject
|
||||
, private IS_INSTANCE (SerializedValidation)
|
||||
{
|
||||
public:
|
||||
typedef boost::shared_ptr<SerializedValidation> pointer;
|
||||
typedef const boost::shared_ptr<SerializedValidation>& ref;
|
||||
|
||||
static const uint32 sFullFlag;
|
||||
static const uint32 sFullFlag = 0x1;
|
||||
|
||||
// These throw if the object is not valid
|
||||
SerializedValidation(SerializerIterator& sit, bool checkSignature = true);
|
||||
// These throw if the object is not valid
|
||||
SerializedValidation (SerializerIterator& sit, bool checkSignature = true);
|
||||
|
||||
// Does not sign the validation
|
||||
SerializedValidation(const uint256& ledgerHash, uint32 signTime, const RippleAddress& raPub, bool isFull);
|
||||
SerializedValidation (const uint256& ledgerHash, uint32 signTime, const RippleAddress& raPub, bool isFull);
|
||||
|
||||
uint256 getLedgerHash() const;
|
||||
uint32 getSignTime() const;
|
||||
@@ -36,15 +38,17 @@ public:
|
||||
|
||||
// The validation this replaced
|
||||
const uint256& getPreviousHash() { return mPreviousHash; }
|
||||
bool isPreviousHash(const uint256& h) { return mPreviousHash == h; }
|
||||
bool isPreviousHash(const uint256& h) const { return mPreviousHash == h; }
|
||||
void setPreviousHash(const uint256& h) { mPreviousHash = h; }
|
||||
|
||||
private:
|
||||
uint256 mPreviousHash;
|
||||
static SOTemplate const& getFormat ();
|
||||
|
||||
void setNode ();
|
||||
|
||||
uint256 mPreviousHash;
|
||||
uint160 mNodeID;
|
||||
bool mTrusted;
|
||||
|
||||
void setNode();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -12,9 +12,9 @@
|
||||
|
||||
namespace po = boost::program_options;
|
||||
|
||||
// VFALCO: TODO make these singletons that initialize statically
|
||||
extern void TFInit();
|
||||
extern void LEFInit();
|
||||
extern void SVFInit();
|
||||
|
||||
using namespace std;
|
||||
using namespace boost::unit_test;
|
||||
@@ -213,9 +213,9 @@ int main(int argc, char* argv[])
|
||||
|
||||
InstanceType::multiThread();
|
||||
|
||||
// VFALCO: TODO make these singletons that initialize statically
|
||||
TFInit();
|
||||
LEFInit();
|
||||
SVFInit();
|
||||
|
||||
if (vm.count("unittest"))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user