forked from amjuarez/bytecoin
-
Notifications
You must be signed in to change notification settings - Fork 102
Expand file tree
/
Copy pathAccount.cpp
More file actions
executable file
·60 lines (56 loc) · 2.42 KB
/
Account.cpp
File metadata and controls
executable file
·60 lines (56 loc) · 2.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// Copyright (c) 2012-2017, The CryptoNote developers, The Bytecoin developers
//
// This file is part of Bytecoin.
//
// Bytecoin is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Bytecoin is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with Bytecoin. If not, see <http://www.gnu.org/licenses/>.
#include "Account.h"
#include "CryptoNoteSerialization.h"
#include "crypto/keccak.c"
namespace CryptoNote {
//-----------------------------------------------------------------
AccountBase::AccountBase() {
setNull();
}
//-----------------------------------------------------------------
void AccountBase::setNull() {
m_keys = AccountKeys();
}
//-----------------------------------------------------------------
void AccountBase::generateViewFromSpend(Crypto::SecretKey &spend, Crypto::SecretKey &viewSecret, Crypto::PublicKey &viewPublic) {
Crypto::SecretKey viewKeySeed;
keccak((uint8_t *)&spend, sizeof(spend), (uint8_t *)&viewKeySeed, sizeof(viewKeySeed));
Crypto::generate_keys_from_seed(viewPublic, viewSecret, viewKeySeed);
}
//-----------------------------------------------------------------
void AccountBase::generate() {
Crypto::generate_keys(m_keys.address.spendPublicKey, m_keys.spendSecretKey);
/* We derive the view secret key by taking our spend secret key, hashing
with keccak-256, and then using this as the seed to generate a new set
of keys - the public and private view keys. See generate_keys_from_seed */
generateViewFromSpend(m_keys.spendSecretKey, m_keys.viewSecretKey, m_keys.address.viewPublicKey);
m_creation_timestamp = time(NULL);
}
//-----------------------------------------------------------------
const AccountKeys &AccountBase::getAccountKeys() const {
return m_keys;
}
void AccountBase::setAccountKeys(const AccountKeys &keys) {
m_keys = keys;
}
//-----------------------------------------------------------------
void AccountBase::serialize(ISerializer &s) {
s(m_keys, "m_keys");
s(m_creation_timestamp, "m_creation_timestamp");
}
}