summaryrefslogtreecommitdiff
path: root/src/post.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/post.cc')
-rw-r--r--src/post.cc24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/post.cc b/src/post.cc
index e2063a36..9d799a9e 100644
--- a/src/post.cc
+++ b/src/post.cc
@@ -671,6 +671,30 @@ void post_t::set_reported_account(account_t * acct)
acct->xdata().reported_posts.push_back(this);
}
+extern "C" unsigned char *SHA512(
+ void *data, unsigned int data_len, unsigned char *digest);
+
+namespace {
+ std::string bufferToHex(const unsigned char* buffer, std::size_t size) {
+ std::ostringstream oss;
+ oss << std::hex << std::setfill('0');
+ for(std::size_t i = 0; i < size; ++i)
+ oss << std::setw(2) << static_cast<int>(buffer[i]);
+ return oss.str();
+ }
+}
+
+string post_t::hash(string nonce) const {
+ unsigned char data[128];
+ std::ostringstream repr;
+ repr << nonce;
+ repr << account->fullname();
+ repr << amount.to_string();
+ string repr_str(repr.str());
+ SHA512((void *)repr_str.c_str(), repr_str.length(), data);
+ return bufferToHex(data, 64 /*SHA512_DIGEST_LENGTH*/);
+}
+
void extend_post(post_t& post, journal_t& journal)
{
commodity_t& comm(post.amount.commodity());