Electroneum
Toggle main menu visibility
Loading...
Searching...
No Matches
crypto_ops.h
Go to the documentation of this file.
1
// Copyright (c) 2014-2019, 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 "
ringct/rctOps.h
"
35
36
enum
test_op
37
{
38
op_sc_add
,
39
op_sc_sub
,
40
op_sc_mul
,
41
op_ge_add_raw
,
42
op_ge_add_p3_p3
,
43
op_zeroCommitCached
,
44
ops_fast
,
45
46
op_addKeys
,
47
op_scalarmultBase
,
48
op_scalarmultKey
,
49
op_scalarmultH
,
50
op_scalarmult8
,
51
op_ge_dsm_precomp
,
52
op_ge_double_scalarmult_base_vartime
,
53
op_ge_double_scalarmult_precomp_vartime
,
54
op_ge_double_scalarmult_precomp_vartime2
,
55
op_addKeys2
,
56
op_addKeys3
,
57
op_addKeys3_2
,
58
op_isInMainSubgroup
,
59
op_zeroCommitUncached
,
60
};
61
62
template
<test_op op>
63
class
test_crypto_ops
64
{
65
public
:
66
static
const
size_t
loop_count
= op <
ops_fast
? 10000000 : 1000;
67
68
bool
init
()
69
{
70
scalar0 =
rct::skGen
();
71
scalar1 =
rct::skGen
();
72
point0 =
rct::scalarmultBase
(
rct::skGen
());
73
point1 =
rct::scalarmultBase
(
rct::skGen
());
74
if
(
ge_frombytes_vartime
(&p3_0, point0.bytes) != 0)
75
return
false
;
76
if
(
ge_frombytes_vartime
(&p3_1, point1.bytes) != 0)
77
return
false
;
78
ge_p3_to_cached
(&cached, &p3_0);
79
rct::precomp
(precomp0, point0);
80
rct::precomp
(precomp1, point1);
81
return
true
;
82
}
83
84
bool
test
()
85
{
86
rct::key
key
;
87
ge_cached
tmp_cached;
88
ge_p1p1
tmp_p1p1;
89
ge_p2
tmp_p2;
90
ge_dsmp
dsmp;
91
switch
(op)
92
{
93
case
op_sc_add
:
sc_add
(
key
.bytes, scalar0.bytes, scalar1.bytes);
break
;
94
case
op_sc_sub
:
sc_sub
(
key
.bytes, scalar0.bytes, scalar1.bytes);
break
;
95
case
op_sc_mul
:
sc_mul
(
key
.bytes, scalar0.bytes, scalar1.bytes);
break
;
96
case
op_ge_add_p3_p3
: {
97
ge_p3_to_cached
(&tmp_cached, &p3_0);
98
ge_add
(&tmp_p1p1, &p3_1, &tmp_cached);
99
ge_p1p1_to_p3
(&p3_1, &tmp_p1p1);
100
break
;
101
}
102
case
op_ge_add_raw
:
ge_add
(&tmp_p1p1, &p3_1, &cached);
break
;
103
case
op_addKeys
:
rct::addKeys
(
key
, point0, point1);
break
;
104
case
op_scalarmultBase
:
rct::scalarmultBase
(scalar0);
break
;
105
case
op_scalarmultKey
:
rct::scalarmultKey
(point0, scalar0);
break
;
106
case
op_scalarmultH
:
rct::scalarmultH
(scalar0);
break
;
107
case
op_scalarmult8
:
rct::scalarmult8
(point0);
break
;
108
case
op_ge_dsm_precomp
:
ge_dsm_precomp
(dsmp, &p3_0);
break
;
109
case
op_ge_double_scalarmult_base_vartime
:
ge_double_scalarmult_base_vartime
(&tmp_p2, scalar0.bytes, &p3_0, scalar1.bytes);
break
;
110
case
op_ge_double_scalarmult_precomp_vartime
:
ge_double_scalarmult_precomp_vartime
(&tmp_p2, scalar0.bytes, &p3_0, scalar1.bytes, precomp0);
break
;
111
case
op_ge_double_scalarmult_precomp_vartime2
:
ge_double_scalarmult_precomp_vartime2
(&tmp_p2, scalar0.bytes, precomp0, scalar1.bytes, precomp1);
break
;
112
case
op_addKeys2
:
rct::addKeys2
(
key
, scalar0, scalar1, point0);
break
;
113
case
op_addKeys3
:
rct::addKeys3
(
key
, scalar0, point0, scalar1, precomp1);
break
;
114
case
op_addKeys3_2
:
rct::addKeys3
(
key
, scalar0, precomp0, scalar1, precomp1);
break
;
115
case
op_isInMainSubgroup
:
rct::isInMainSubgroup
(point0);
break
;
116
case
op_zeroCommitUncached
:
rct::zeroCommit
(9001);
break
;
117
case
op_zeroCommitCached
:
rct::zeroCommit
(9000);
break
;
118
default
:
return
false
;
119
}
120
return
true
;
121
}
122
123
private
:
124
rct::key
scalar0, scalar1;
125
rct::key
point0, point1;
126
ge_p3
p3_0, p3_1;
127
ge_cached
cached;
128
ge_dsmp
precomp0, precomp1;
129
};
test_crypto_ops
Definition
crypto_ops.h:64
test_crypto_ops::init
bool init()
Definition
crypto_ops.h:68
test_crypto_ops::test
bool test()
Definition
crypto_ops.h:84
test_crypto_ops::loop_count
static const size_t loop_count
Definition
crypto_ops.h:66
sc_mul
void sc_mul(unsigned char *, const unsigned char *, const unsigned char *)
ge_double_scalarmult_precomp_vartime
void ge_double_scalarmult_precomp_vartime(ge_p2 *, const unsigned char *, const ge_p3 *, const unsigned char *, const ge_dsmp)
ge_dsmp
ge_cached ge_dsmp[8]
Definition
crypto-ops.h:79
ge_dsm_precomp
void ge_dsm_precomp(ge_dsmp r, const ge_p3 *s)
ge_frombytes_vartime
int ge_frombytes_vartime(ge_p3 *, const unsigned char *)
sc_sub
void sc_sub(unsigned char *, const unsigned char *, const unsigned char *)
ge_double_scalarmult_precomp_vartime2
void ge_double_scalarmult_precomp_vartime2(ge_p2 *, const unsigned char *, const ge_dsmp, const unsigned char *, const ge_dsmp)
ge_double_scalarmult_base_vartime
void ge_double_scalarmult_base_vartime(ge_p2 *, const unsigned char *, const ge_p3 *, const unsigned char *)
sc_add
void sc_add(unsigned char *, const unsigned char *, const unsigned char *)
crypto.h
test_op
test_op
Definition
crypto_ops.h:37
op_scalarmultKey
@ op_scalarmultKey
Definition
crypto_ops.h:48
op_ge_double_scalarmult_base_vartime
@ op_ge_double_scalarmult_base_vartime
Definition
crypto_ops.h:52
op_ge_double_scalarmult_precomp_vartime
@ op_ge_double_scalarmult_precomp_vartime
Definition
crypto_ops.h:53
op_ge_add_raw
@ op_ge_add_raw
Definition
crypto_ops.h:41
ops_fast
@ ops_fast
Definition
crypto_ops.h:44
op_scalarmultH
@ op_scalarmultH
Definition
crypto_ops.h:49
op_zeroCommitUncached
@ op_zeroCommitUncached
Definition
crypto_ops.h:59
op_sc_add
@ op_sc_add
Definition
crypto_ops.h:38
op_addKeys2
@ op_addKeys2
Definition
crypto_ops.h:55
op_zeroCommitCached
@ op_zeroCommitCached
Definition
crypto_ops.h:43
op_ge_dsm_precomp
@ op_ge_dsm_precomp
Definition
crypto_ops.h:51
op_ge_double_scalarmult_precomp_vartime2
@ op_ge_double_scalarmult_precomp_vartime2
Definition
crypto_ops.h:54
op_scalarmultBase
@ op_scalarmultBase
Definition
crypto_ops.h:47
op_ge_add_p3_p3
@ op_ge_add_p3_p3
Definition
crypto_ops.h:42
op_addKeys
@ op_addKeys
Definition
crypto_ops.h:46
op_isInMainSubgroup
@ op_isInMainSubgroup
Definition
crypto_ops.h:58
op_addKeys3_2
@ op_addKeys3_2
Definition
crypto_ops.h:57
op_sc_sub
@ op_sc_sub
Definition
crypto_ops.h:39
op_scalarmult8
@ op_scalarmult8
Definition
crypto_ops.h:50
op_addKeys3
@ op_addKeys3
Definition
crypto_ops.h:56
op_sc_mul
@ op_sc_mul
Definition
crypto_ops.h:40
key
const char * key
Definition
hmac_keccak.cpp:39
rct::scalarmultBase
void scalarmultBase(key &aG, const key &a)
Definition
rctOps.cpp:350
rct::isInMainSubgroup
bool isInMainSubgroup(const key &A)
Definition
rctOps.cpp:412
rct::scalarmultH
key scalarmultH(const key &a)
Definition
rctOps.cpp:389
rct::skGen
key skGen()
Definition
rctOps.cpp:258
rct::zeroCommit
key zeroCommit(etn_amount amount)
Definition
rctOps.cpp:322
rct::scalarmultKey
void scalarmultKey(key &aP, const key &P, const key &a)
Definition
rctOps.cpp:368
rct::addKeys
void addKeys(key &AB, const key &A, const key &B)
Definition
rctOps.cpp:420
rct::scalarmult8
key scalarmult8(const key &P)
Definition
rctOps.cpp:398
rct::addKeys2
void addKeys2(key &aGbB, const key &a, const key &b, const key &B)
Definition
rctOps.cpp:466
rct::precomp
void precomp(ge_dsmp rv, const key &B)
Definition
rctOps.cpp:476
rct::skGen
void skGen(key &sk)
Definition
rctOps.cpp:253
rct::addKeys3
void addKeys3(key &aAbB, const key &a, const key &A, const key &b, const ge_dsmp B)
Definition
rctOps.cpp:485
rctOps.h
ge_p1p1_to_p3
#define ge_p1p1_to_p3
Definition
ge.h:63
ge_p3_to_cached
#define ge_p3_to_cached
Definition
ge.h:61
ge_add
#define ge_add
Definition
ge.h:69
ge_cached
Definition
crypto-ops.h:66
ge_p1p1
Definition
crypto-ops.h:53
ge_p2
Definition
crypto-ops.h:40
ge_p3
Definition
crypto-ops.h:46
rct::key
Definition
rctTypes.h:78
tests
performance_tests
crypto_ops.h
Generated on
for Electroneum by
1.17.0