Monero
Toggle main menu visibility
Loading...
Searching...
No Matches
tests
performance_tests
out_can_be_to_acc.h
Go to the documentation of this file.
1
// Copyright (c) 2014-2022, The Monero Project
2
//
3
// All rights reserved.
4
//
5
// Redistribution and use in source and binary forms, with or without modification, are
6
// permitted provided that the following conditions are met:
7
//
8
// 1. Redistributions of source code must retain the above copyright notice, this list of
9
// conditions and the following disclaimer.
10
//
11
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
12
// of conditions and the following disclaimer in the documentation and/or other
13
// materials provided with the distribution.
14
//
15
// 3. Neither the name of the copyright holder nor the names of its contributors may be
16
// used to endorse or promote products derived from this software without specific
17
// prior written permission.
18
//
19
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
20
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
22
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
27
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
//
29
// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
30
31
#pragma once
32
33
#include "
crypto/crypto.h
"
34
#include "
cryptonote_basic/cryptonote_basic.h
"
35
36
#include "
single_tx_test_base.h
"
37
38
using namespace
crypto
;
39
40
// use_view_tags: whether to enable view tag checking
41
// is_owned: whether the output is owned by us
42
template
<
bool
use_view_tags,
bool
is_owned>
43
class
test_out_can_be_to_acc
:
public
single_tx_test_base
44
{
45
public
:
46
static
const
size_t
loop_count
= 1000;
47
48
bool
init
()
49
{
50
if
(!
single_tx_test_base::init
())
51
return
false
;
52
53
crypto::key_derivation
key_derivation
;
54
crypto::view_tag
vt;
55
56
m_output_index
= 0;
57
m_view_secret_key
=
m_bob
.get_keys().m_view_secret_key;
58
m_spend_public_key
=
m_bob
.get_keys().m_account_address.m_spend_public_key;
59
60
cryptonote::get_output_public_key
(
m_tx
.vout[
m_output_index
],
m_output_public_key
);
61
62
if
(use_view_tags)
63
{
64
crypto::generate_key_derivation
(
m_tx_pub_key
,
m_view_secret_key
,
key_derivation
);
65
crypto::derive_view_tag
(
key_derivation
,
m_output_index
, vt);
66
m_view_tag_opt
= vt;
67
}
68
else
69
m_view_tag_opt
= boost::optional<crypto::view_tag>();
70
71
return
true
;
72
}
73
74
bool
test
()
75
{
76
// include key derivation to demonstrate performance improvement when using view tags
77
crypto::key_derivation
key_derivation
;
78
crypto::generate_key_derivation
(
m_tx_pub_key
,
m_view_secret_key
,
key_derivation
);
79
80
// if using view tags, this ensures we computed the view tag properly
81
if
(!
cryptonote::out_can_be_to_acc
(
m_view_tag_opt
,
key_derivation
,
m_output_index
))
82
return
false
;
83
84
// if user owns output, this tests the output public key matches the derived
85
if
(is_owned)
86
{
87
crypto::public_key
output_public_key;
88
crypto::derive_public_key
(
key_derivation
,
m_output_index
,
m_spend_public_key
, output_public_key);
89
90
if
(
m_output_public_key
!= output_public_key)
91
return
false
;
92
}
93
94
return
true
;
95
}
96
97
private
:
98
size_t
m_output_index
;
99
crypto::secret_key
m_view_secret_key
;
100
crypto::public_key
m_spend_public_key
;
101
crypto::public_key
m_output_public_key
;
102
boost::optional<crypto::view_tag>
m_view_tag_opt
;
103
};
single_tx_test_base
Definition
single_tx_test_base.h:38
single_tx_test_base::init
bool init()
Definition
single_tx_test_base.h:40
single_tx_test_base::m_tx
cryptonote::transaction m_tx
Definition
single_tx_test_base.h:56
single_tx_test_base::m_tx_pub_key
crypto::public_key m_tx_pub_key
Definition
single_tx_test_base.h:57
single_tx_test_base::m_bob
cryptonote::account_base m_bob
Definition
single_tx_test_base.h:55
test_out_can_be_to_acc
Definition
out_can_be_to_acc.h:44
test_out_can_be_to_acc::m_view_secret_key
crypto::secret_key m_view_secret_key
Definition
out_can_be_to_acc.h:99
test_out_can_be_to_acc::m_spend_public_key
crypto::public_key m_spend_public_key
Definition
out_can_be_to_acc.h:100
test_out_can_be_to_acc::m_output_index
size_t m_output_index
Definition
out_can_be_to_acc.h:98
test_out_can_be_to_acc::loop_count
static const size_t loop_count
Definition
out_can_be_to_acc.h:46
test_out_can_be_to_acc::test
bool test()
Definition
out_can_be_to_acc.h:74
test_out_can_be_to_acc::init
bool init()
Definition
out_can_be_to_acc.h:48
test_out_can_be_to_acc::m_output_public_key
crypto::public_key m_output_public_key
Definition
out_can_be_to_acc.h:101
test_out_can_be_to_acc::m_view_tag_opt
boost::optional< crypto::view_tag > m_view_tag_opt
Definition
out_can_be_to_acc.h:102
crypto.h
cryptonote_basic.h
crypto
crypto namespace.
Definition
crypto.cpp:60
crypto::derive_view_tag
void derive_view_tag(const key_derivation &derivation, std::size_t output_index, view_tag &vt)
Definition
crypto.h:312
crypto::secret_key
epee::mlocked< tools::scrubbed< ec_scalar > > secret_key
Definition
crypto.h:72
crypto::key_derivation
POD_CLASS key_derivation
Definition
crypto.h:91
crypto::view_tag
POD_CLASS view_tag
Definition
crypto.h:103
crypto::generate_key_derivation
bool generate_key_derivation(const public_key &key1, const secret_key &key2, key_derivation &derivation)
Definition
crypto.h:232
crypto::public_key
POD_CLASS public_key
Definition
crypto.h:64
crypto::derive_public_key
bool derive_public_key(const key_derivation &derivation, std::size_t output_index, const public_key &base, public_key &derived_key)
Definition
crypto.h:235
cryptonote::out_can_be_to_acc
bool out_can_be_to_acc(const boost::optional< crypto::view_tag > &view_tag_opt, const crypto::key_derivation &derivation, const size_t output_index, hw::device *hwdev)
Definition
cryptonote_format_utils.cpp:1010
cryptonote::get_output_public_key
bool get_output_public_key(const cryptonote::tx_out &out, crypto::public_key &output_public_key)
Definition
cryptonote_format_utils.cpp:927
single_tx_test_base.h
Generated on
for Monero by
1.17.0