BTCP-Rebase/src/uint252.h

56 lines
1.4 KiB
C++

// Copyright (c) 2009-2010 Satoshi Nakamoto
// Copyright (c) 2009-2014 The Bitcoin Core developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_UINT252_H
#define BITCOIN_UINT252_H
#include <vector>
#include <uint256.h>
#include <serialize.h>
// Wrapper of uint256 with guarantee that first
// four bits are zero.
class uint252 {
private:
uint256 contents;
public:
ADD_SERIALIZE_METHODS;
template <typename Stream, typename Operation>
inline void SerializationOp(Stream& s, Operation ser_action) {
READWRITE(contents);
if ((*contents.begin()) & 0xF0) {
throw std::ios_base::failure("spending key has invalid leading bits");
}
}
const unsigned char* begin() const
{
return contents.begin();
}
const unsigned char* end() const
{
return contents.end();
}
uint252() : contents() {};
explicit uint252(const uint256& in) : contents(in) {
if (*contents.begin() & 0xF0) {
throw std::domain_error("leading bits are set in argument given to uint252 constructor");
}
}
uint256 inner() const {
return contents;
}
friend inline bool operator==(const uint252& a, const uint252& b) { return a.contents == b.contents; }
};
#endif // BITCOIN_UINT252_H