aboutsummaryrefslogtreecommitdiff
path: root/src/device
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2018-03-28 11:09:29 +0100
committermoneromooo-monero <moneromooo-monero@users.noreply.github.com>2018-03-28 11:14:25 +0100
commit0beb94f323fe9743ebdaed6f837fbf2f22c90147 (patch)
treeb1808e46856498a5e04cea523d79a7f26f9199f2 /src/device
parentMerge pull request #3434 (diff)
downloadmonero-0beb94f323fe9743ebdaed6f837fbf2f22c90147.tar.xz
device: fix endianess dependence on subaddress secret key generation
We now force little endianness
Diffstat (limited to 'src/device')
-rw-r--r--src/device/device_default.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/device/device_default.cpp b/src/device/device_default.cpp
index d63dafe9e..927d23ebe 100644
--- a/src/device/device_default.cpp
+++ b/src/device/device_default.cpp
@@ -31,6 +31,7 @@
#include "device_default.hpp"
+#include "common/int-util.h"
#include "cryptonote_basic/account.h"
#include "cryptonote_basic/subaddress_index.h"
#include "ringct/rctOps.h"
@@ -181,10 +182,13 @@ namespace hw {
crypto::secret_key device_default::get_subaddress_secret_key(const crypto::secret_key &a, const cryptonote::subaddress_index &index) {
const char prefix[] = "SubAddr";
- char data[sizeof(prefix) + sizeof(crypto::secret_key) + sizeof(cryptonote::subaddress_index)];
+ char data[sizeof(prefix) + sizeof(crypto::secret_key) + 2 * sizeof(uint32_t)];
memcpy(data, prefix, sizeof(prefix));
memcpy(data + sizeof(prefix), &a, sizeof(crypto::secret_key));
- memcpy(data + sizeof(prefix) + sizeof(crypto::secret_key), &index, sizeof(cryptonote::subaddress_index));
+ uint32_t idx = SWAP32LE(index.major);
+ memcpy(data + sizeof(prefix) + sizeof(crypto::secret_key), &idx, sizeof(uint32_t));
+ idx = SWAP32LE(index.minor);
+ memcpy(data + sizeof(prefix) + sizeof(crypto::secret_key) + sizeof(uint32_t), &idx, sizeof(uint32_t));
crypto::secret_key m;
crypto::hash_to_scalar(data, sizeof(data), m);
return m;