From 22a7b736924144c8b2a8d5bba9abd8c179e1e7d9 Mon Sep 17 00:00:00 2001 From: wowario Date: Mon, 21 Jun 2021 22:46:26 +0300 Subject: [PATCH] sign blob data --- .../cryptonote_format_utils.cpp | 17 +++++++++++++---- src/cryptonote_basic/cryptonote_format_utils.h | 1 + 2 files changed, 14 insertions(+), 4 deletions(-) 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);