Electroneum
Loading...
Searching...
No Matches
device.cpp
Go to the documentation of this file.
1// Copyright (c) 2018, 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#include "gtest/gtest.h"
30#include "ringct/rctOps.h"
32
33TEST(device, name)
34{
36 ASSERT_TRUE(dev.set_name("test"));
37 ASSERT_EQ(dev.get_name(), "test");
38}
39
40/*
41TEST(device, locking)
42{
43 hw::core::device_default dev;
44 ASSERT_TRUE(dev.try_lock());
45 ASSERT_FALSE(dev.try_lock());
46 dev.unlock();
47 ASSERT_TRUE(dev.try_lock());
48 dev.unlock();
49 dev.lock();
50 ASSERT_FALSE(dev.try_lock());
51 dev.unlock();
52 ASSERT_TRUE(dev.try_lock());
53 dev.unlock();
54}
55*/
56
57TEST(device, open_close)
58{
62 ASSERT_TRUE(dev.close_tx());
63}
64
65TEST(device, ops)
66{
68 rct::key resd, res;
69 crypto::key_derivation derd, der;
70 rct::key sk, pk;
71 crypto::secret_key sk0, sk1;
72 crypto::public_key pk0, pk1;
73 crypto::ec_scalar ressc0, ressc1;
74 crypto::key_image ki0, ki1;
75
76 rct::skpkGen(sk, pk);
79
80 dev.scalarmultKey(resd, pk, sk);
81 rct::scalarmultKey(res, pk, sk);
82 ASSERT_EQ(resd, res);
83
84 dev.scalarmultBase(resd, sk);
86 ASSERT_EQ(resd, res);
87
88 dev.sc_secret_add((crypto::secret_key&)resd, sk0, sk1);
89 sc_add((unsigned char*)&res, (unsigned char*)&sk0, (unsigned char*)&sk1);
90 ASSERT_EQ(resd, res);
91
92 dev.generate_key_derivation(pk0, sk0, derd);
94 ASSERT_FALSE(memcmp(&derd, &der, sizeof(der)));
95
96 dev.derivation_to_scalar(der, 0, ressc0);
97 crypto::derivation_to_scalar(der, 0, ressc1);
98 ASSERT_FALSE(memcmp(&ressc0, &ressc1, sizeof(ressc1)));
99
100 dev.derive_secret_key(der, 0, rct::rct2sk(sk), sk0);
101 crypto::derive_secret_key(der, 0, rct::rct2sk(sk), sk1);
102 ASSERT_EQ(sk0, sk1);
103
104 dev.derive_public_key(der, 0, rct::rct2pk(pk), pk0);
105 crypto::derive_public_key(der, 0, rct::rct2pk(pk), pk1);
106 ASSERT_EQ(pk0, pk1);
107
108 dev.secret_key_to_public_key(rct::rct2sk(sk), pk0);
109 crypto::secret_key_to_public_key(rct::rct2sk(sk), pk1);
110 ASSERT_EQ(pk0, pk1);
111
112 dev.generate_key_image(pk0, sk0, ki0);
113 crypto::generate_key_image(pk0, sk0, ki1);
114 ASSERT_EQ(ki0, ki1);
115}
116
117TEST(device, ecdh32)
118{
120 rct::ecdhTuple tuple, tuple2;
122 tuple.mask = rct::skGen();
123 tuple.amount = rct::skGen();
124 tuple2 = tuple;
125 dev.ecdhEncode(tuple, key, false);
126 dev.ecdhDecode(tuple, key, false);
127 ASSERT_EQ(tuple2.mask, tuple.mask);
128 ASSERT_EQ(tuple2.amount, tuple.amount);
129}
130
bool close_tx(void) override
bool sc_secret_add(crypto::secret_key &r, const crypto::secret_key &a, const crypto::secret_key &b) override
bool ecdhDecode(rct::ecdhTuple &masked, const rct::key &sharedSec, bool short_amount) override
bool derive_public_key(const crypto::key_derivation &derivation, const std::size_t output_index, const crypto::public_key &pub, crypto::public_key &derived_pub) override
bool scalarmultKey(rct::key &aP, const rct::key &P, const rct::key &a) override
bool secret_key_to_public_key(const crypto::secret_key &sec, crypto::public_key &pub) override
bool generate_key_derivation(const crypto::public_key &pub, const crypto::secret_key &sec, crypto::key_derivation &derivation) override
bool ecdhEncode(rct::ecdhTuple &unmasked, const rct::key &sharedSec, bool short_amount) override
bool open_tx(crypto::secret_key &tx_key) override
bool generate_key_image(const crypto::public_key &pub, const crypto::secret_key &sec, crypto::key_image &image) override
bool scalarmultBase(rct::key &aG, const rct::key &a) override
const std::string get_name() const override
bool derivation_to_scalar(const crypto::key_derivation &derivation, const size_t output_index, crypto::ec_scalar &res) override
bool derive_secret_key(const crypto::key_derivation &derivation, const std::size_t output_index, const crypto::secret_key &sec, crypto::secret_key &derived_sec) override
bool set_name(const std::string &name) override
void sc_add(unsigned char *, const unsigned char *, const unsigned char *)
#define ASSERT_EQ(val1, val2)
Definition gtest.h:1956
#define ASSERT_FALSE(condition)
Definition gtest.h:1868
#define TEST(test_case_name, test_name)
Definition gtest.h:2187
#define ASSERT_TRUE(condition)
Definition gtest.h:1865
const char * res
const char * key
epee::mlocked< tools::scrubbed< ec_scalar > > secret_key
Definition crypto.h:82
POD_CLASS key_derivation
Definition crypto.h:101
void derive_secret_key(const key_derivation &derivation, std::size_t output_index, const secret_key &base, secret_key &derived_key)
Definition crypto.h:282
bool generate_key_derivation(const public_key &key1, const secret_key &key2, key_derivation &derivation)
Definition crypto.h:272
POD_CLASS public_key
Definition crypto.h:79
bool derive_public_key(const key_derivation &derivation, std::size_t output_index, const public_key &base, public_key &derived_key)
Definition crypto.h:275
POD_CLASS key_image
Definition crypto.h:105
POD_CLASS ec_scalar
Definition crypto.h:74
bool secret_key_to_public_key(const secret_key &sec, public_key &pub)
Definition crypto.h:262
void generate_key_image(const public_key &pub, const secret_key &sec, key_image &image)
Definition crypto.h:324
void derivation_to_scalar(const key_derivation &derivation, size_t output_index, ec_scalar &res)
Definition crypto.h:279
void scalarmultBase(key &aG, const key &a)
Definition rctOps.cpp:350
key skGen()
Definition rctOps.cpp:258
tuple< key, key > skpkGen()
Definition rctOps.cpp:290
void scalarmultKey(key &aP, const key &P, const key &a)
Definition rctOps.cpp:368