Fix signature/hash generation.

This commit is contained in:
JoelKatz
2012-09-28 14:26:19 -07:00
parent b88d6486a6
commit 8c2eda1f93
2 changed files with 31 additions and 4 deletions

View File

@@ -217,14 +217,18 @@ std::string STObject::getFullText() const
return ret;
}
void STObject::add(Serializer& s) const
void STObject::add(Serializer& s, bool withSigningFields) const
{
std::map<int, const SerializedType*> fields;
BOOST_FOREACH(const SerializedType& it, mData)
{ // pick out the fields and sort them
if (it.getSType() != STI_NOTPRESENT)
fields.insert(std::make_pair(it.getFName().fieldCode, &it));
{
SField::ref fName = it.getFName();
if (withSigningFields || (fName == sfSignature) || (fName == sfSignatures))
fields.insert(std::make_pair(it.getFName().fieldCode, &it));
}
}
@@ -235,7 +239,10 @@ void STObject::add(Serializer& s) const
field->addFieldID(s);
field->add(s);
s.addFieldID(STI_OBJECT, 1);
if (dynamic_cast<STArray>(field) != NULL)
s.addFieldID(STI_ARRAY, 1);
else if (dynamic_cast<STObject>(field) != NULL)
s.addFieldID(STI_OBJECT, 1);
}
}
@@ -272,6 +279,22 @@ bool STObject::isEquivalent(const SerializedType& t) const
return (it1 == end1) && (it2 == end2);
}
uint256 getHash(uint32 prefix) cosnt
{
Serializer s;
s.add32(prefix);
add(s, true);
return s.getSHA512Half();
}
uint256 getSigningHash(uint32 prefix) cosnt
{
Serializer s;
s.add32(prefix);
add(s, false);
return s.getSHA512Half();
}
int STObject::getFieldIndex(SField::ref field) const
{
int i = 0;