diff --git a/src/cryptonote_basic/cryptonote_format_utils.cpp b/src/cryptonote_basic/cryptonote_format_utils.cpp index b062f4424..d87717bbe 100644 --- a/src/cryptonote_basic/cryptonote_format_utils.cpp +++ b/src/cryptonote_basic/cryptonote_format_utils.cpp @@ -1324,13 +1324,22 @@ namespace cryptonote crypto::hash get_sig_data(const block& b) { crypto::hash sig_data; - std::stringstream ss; - ss << (b.nonce + b.timestamp); - std::string d(ss.str()); - crypto::cn_fast_hash(d.data(), d.size(), sig_data); + blobdata blob = get_block_hashing_blob_sig_data(b); + crypto::cn_fast_hash(blob.data(), blob.size(), sig_data); return sig_data; } //--------------------------------------------------------------- + blobdata get_block_hashing_blob_sig_data(const block& b) + { + block_header tmp = static_cast(b); + memset(&tmp.signature, 0, sizeof(tmp.signature)); + blobdata blob = t_serializable_object_to_blob(tmp); + crypto::hash tree_root_hash = get_tx_tree_hash(b); + blob.append(reinterpret_cast(&tree_root_hash), sizeof(tree_root_hash)); + blob.append(tools::get_varint_data(b.tx_hashes.size()+1)); + return blob; + } + //--------------------------------------------------------------- std::vector relative_output_offsets_to_absolute(const std::vector& off) { std::vector res = off; diff --git a/src/cryptonote_basic/cryptonote_format_utils.h b/src/cryptonote_basic/cryptonote_format_utils.h index dc2073c5a..7861242b8 100644 --- a/src/cryptonote_basic/cryptonote_format_utils.h +++ b/src/cryptonote_basic/cryptonote_format_utils.h @@ -122,6 +122,7 @@ namespace cryptonote bool get_block_hash(const block& b, crypto::hash& res); crypto::hash get_block_hash(const block& b); crypto::hash get_sig_data(const block& b); + blobdata get_block_hashing_blob_sig_data(const block& b); bool parse_and_validate_block_from_blob(const blobdata_ref& b_blob, block& b, crypto::hash *block_hash); bool parse_and_validate_block_from_blob(const blobdata_ref& b_blob, block& b); bool parse_and_validate_block_from_blob(const blobdata_ref& b_blob, block& b, crypto::hash &block_hash);