Merge branch 'master' into bootstrap

This commit is contained in:
Arthur Britto
2012-04-28 18:10:10 -07:00
6 changed files with 30 additions and 7 deletions

View File

@@ -712,6 +712,27 @@ void Peer::recvLedger(newcoin::TMLedgerData& packet)
punishPeer(PP_UNWANTED_DATA);
}
std::vector<unsigned char> Peer::getSessionCookie()
{
// get session information we can sign
// (both sides get the same information, neither side controls it)
SSL* ssl = mSocketSsl.native_handle();
if (!ssl) throw std::runtime_error("No underlying connection");
// Get both finished messages
unsigned char s1[1024], s2[1024];
int l1 = SSL_get_finished(ssl, s1, 1024);
int l2 = SSL_get_finished(ssl, s2, 1024);
if ((l1 < 16) || (l2 < 16)) throw std::runtime_error("Connection setup not complete");
// Hash them and XOR the results
unsigned char sha1[32], sha2[32];
SHA512(s1, l1, sha1);
SHA512(s2, l2, sha2);
for(int i=0; i<32; i++) sha1[i]^=sha2[i];
return std::vector<unsigned char>(sha1, sha1+33);
}
void Peer::sendHello()
{
// XXX Start timer for hello required by.

View File

@@ -81,6 +81,8 @@ protected:
void recvGetLedger(newcoin::TMGetLedger& packet);
void recvLedger(newcoin::TMLedgerData& packet);
std::vector<unsigned char> getSessionCookie();
public:
typedef boost::shared_ptr<Peer> pointer;

View File

@@ -2,7 +2,7 @@
#include "SerializedLedger.h"
SerializedLedgerEntry::SerializedLedgerEntry(SerializerIterator& sit, const uint256& index)
: STObject("LedgerEntry"), mIndex(index)
: SerializedType("LedgerEntry"), mIndex(index)
{
uint16 type = sit.get16();
mFormat = getLgrFormat(static_cast<LedgerEntryType>(type));
@@ -13,7 +13,7 @@ SerializedLedgerEntry::SerializedLedgerEntry(SerializerIterator& sit, const uint
}
SerializedLedgerEntry::SerializedLedgerEntry(const Serializer& s, const uint256& index)
: STObject("LedgerEntry"), mIndex(index)
: SerializedType("LedgerEntry"), mIndex(index)
{
SerializerIterator sit(s);
@@ -25,7 +25,7 @@ SerializedLedgerEntry::SerializedLedgerEntry(const Serializer& s, const uint256&
mObject = STObject(mFormat->elements, sit);
}
SerializedLedgerEntry::SerializedLedgerEntry(LedgerEntryType type) : STObject("LedgerEntry"), mType(type)
SerializedLedgerEntry::SerializedLedgerEntry(LedgerEntryType type) : SerializedType("LedgerEntry"), mType(type)
{
mFormat = getLgrFormat(type);
if (mFormat == NULL) throw std::runtime_error("invalid ledger entry type");

View File

@@ -5,7 +5,7 @@
#include "LedgerFormats.h"
#include "NewcoinAddress.h"
class SerializedLedgerEntry : public STObject
class SerializedLedgerEntry : public SerializedType
{
public:
typedef boost::shared_ptr<SerializedLedgerEntry> pointer;

View File

@@ -10,7 +10,7 @@
#include "TransactionFormats.h"
#include "NewcoinAddress.h"
class SerializedTransaction : public STObject
class SerializedTransaction : public SerializedType
{
public:
typedef boost::shared_ptr<SerializedTransaction> pointer;

View File

@@ -125,8 +125,8 @@ Transaction::Transaction(const NewcoinAddress& fromID, const NewcoinAddress& toI
mTransaction->makeITFieldPresent(sfSourceTag);
mTransaction->setITFieldU32(sfSourceTag, ident);
}
mTransaction->setValueFieldU64(sfAmount, amount);
mTransaction->setValueFieldAccount(sfDestination, toID.getAccountID());
mTransaction->setITFieldU64(sfAmount, amount);
mTransaction->setITFieldAccount(sfDestination, toID.getAccountID());
updateID();
}