summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCzarek Nakamoto <cyjan@mrcyjanek.net>2026-05-08 19:41:31 -0400
committerCzarek Nakamoto <cyjan@mrcyjanek.net>2026-05-08 19:41:31 -0400
commit15b46af9e2ad37edb79f7be5ea301206361d53b2 (patch)
treec01de9d183e6c4c3d205814cd678bfce37edc102
parentbc8d1a0b75b97156d71579581b4cdfe58c777ed2 (diff)
wip twip2
-rw-r--r--contrib/depends/Makefile2
-rw-r--r--impls/monero.dart/lib/monero.dart24
-rw-r--r--impls/monero.dart/lib/src/generated_bindings_monero.g.dart34
-rw-r--r--impls/monero.dart/lib/src/monero.dart42
-rw-r--r--monero_libwallet2_api_c/src/main/cpp/monero_wallet2_api_c.cpp336
-rw-r--r--monero_libwallet2_api_c/src/main/cpp/monero_wallet2_api_c.h3
6 files changed, 183 insertions, 258 deletions
diff --git a/contrib/depends/Makefile b/contrib/depends/Makefile
index 9b26205..92e9036 100644
--- a/contrib/depends/Makefile
+++ b/contrib/depends/Makefile
@@ -4,7 +4,7 @@ HOST ?=
BOOST_VERSION ?= 1_90_0
PACKAGES = native/cmake,native/python@3.14,native/git,native/_,native/make,native/cmake-toolchain,icu4c,boost@$(BOOST_VERSION),zeromq,unbound,sodium,openssl,libiconv,zlib
-SIMPLYBS_HASH = a37442738bc26fbe4e526f48694746b2efed2c2b
+SIMPLYBS_HASH = 0ea74cb120b06156ce16118f86dc5b7d23a93c46
all: simplybs $(if $(HOST),sbs-build-$(HOST),)
@if [ -z "$(HOST)" ]; then \
diff --git a/impls/monero.dart/lib/monero.dart b/impls/monero.dart/lib/monero.dart
index ce19d4e..a7f026e 100644
--- a/impls/monero.dart/lib/monero.dart
+++ b/impls/monero.dart/lib/monero.dart
@@ -92,7 +92,7 @@ String libPath = (() {
Map<String, List<int>> debugCallLength = {};
-final defaultSeparatorStr = ";";
+final defaultSeparatorStr = "|";
final defaultSeparator = defaultSeparatorStr.toNativeUtf8().cast<Char>();
/* we don't call .free here, this comment serves one purpose - so the numbers match :) */
@@ -3615,6 +3615,28 @@ String MONERO_Wallet_serializeCacheToJson(wallet ptr) {
return str;
}
+@Deprecated("TODO")
+bool Wallet_importTrezorEncryptedKeyImagesJson(wallet ptr, String json) {
+ debugStart?.call('MONERO_Wallet_importTrezorEncryptedKeyImagesJson');
+ lib ??= MoneroC(DynamicLibrary.open(libPath));
+ final jsonStr = json.toNativeUtf8();
+ final ret = lib!.MONERO_Wallet_importTrezorEncryptedKeyImagesJson(ptr, jsonStr.cast());
+ malloc.free(jsonStr);
+ debugEnd?.call('MONERO_Wallet_importTrezorEncryptedKeyImagesJson');
+ return ret;
+}
+
+@Deprecated("TODO")
+String Wallet_exportTrezorTdis(wallet ptr) {
+ debugStart?.call('MONERO_Wallet_exportTrezorTdis');
+ lib ??= MoneroC(DynamicLibrary.open(libPath));
+ final ret = lib!.MONERO_Wallet_exportTrezorTdis(ptr);
+ final str = ret.cast<Utf8>().toDartString();
+ MONERO_free(ret.cast());
+ debugEnd?.call('MONERO_Wallet_exportTrezorTdis');
+ return str;
+}
+
// WalletManager
@Deprecated("TODO")
typedef WalletManager = Pointer<Void>;
diff --git a/impls/monero.dart/lib/src/generated_bindings_monero.g.dart b/impls/monero.dart/lib/src/generated_bindings_monero.g.dart
index b757806..0cd6bb5 100644
--- a/impls/monero.dart/lib/src/generated_bindings_monero.g.dart
+++ b/impls/monero.dart/lib/src/generated_bindings_monero.g.dart
@@ -4504,6 +4504,40 @@ class MoneroC {
_MONERO_Wallet_serializeCacheToJsonPtr.asFunction<
ffi.Pointer<ffi.Char> Function(ffi.Pointer<ffi.Void>)>();
+ ffi.Pointer<ffi.Char> MONERO_Wallet_exportTrezorTdis(
+ ffi.Pointer<ffi.Void> wallet_ptr,
+ ) {
+ return _MONERO_Wallet_exportTrezorTdis(
+ wallet_ptr,
+ );
+ }
+
+ late final _MONERO_Wallet_exportTrezorTdisPtr = _lookup<
+ ffi.NativeFunction<
+ ffi.Pointer<ffi.Char> Function(
+ ffi.Pointer<ffi.Void>)>>('MONERO_Wallet_exportTrezorTdis');
+ late final _MONERO_Wallet_exportTrezorTdis =
+ _MONERO_Wallet_exportTrezorTdisPtr.asFunction<
+ ffi.Pointer<ffi.Char> Function(ffi.Pointer<ffi.Void>)>();
+
+ bool MONERO_Wallet_importTrezorEncryptedKeyImagesJson(
+ ffi.Pointer<ffi.Void> wallet_ptr,
+ ffi.Pointer<ffi.Char> json,
+ ) {
+ return _MONERO_Wallet_importTrezorEncryptedKeyImagesJson(
+ wallet_ptr,
+ json,
+ );
+ }
+
+ late final _MONERO_Wallet_importTrezorEncryptedKeyImagesJsonPtr = _lookup<
+ ffi.NativeFunction<
+ ffi.Bool Function(ffi.Pointer<ffi.Void>, ffi.Pointer<ffi.Char>)>>(
+ 'MONERO_Wallet_importTrezorEncryptedKeyImagesJson');
+ late final _MONERO_Wallet_importTrezorEncryptedKeyImagesJson =
+ _MONERO_Wallet_importTrezorEncryptedKeyImagesJsonPtr.asFunction<
+ bool Function(ffi.Pointer<ffi.Void>, ffi.Pointer<ffi.Char>)>();
+
ffi.Pointer<ffi.Void> MONERO_WalletManager_createWallet(
ffi.Pointer<ffi.Void> wm_ptr,
ffi.Pointer<ffi.Char> path,
diff --git a/impls/monero.dart/lib/src/monero.dart b/impls/monero.dart/lib/src/monero.dart
index e142d6b..abecee0 100644
--- a/impls/monero.dart/lib/src/monero.dart
+++ b/impls/monero.dart/lib/src/monero.dart
@@ -1,5 +1,6 @@
// ignore_for_file: deprecated_member_use_from_same_package
+import 'dart:convert';
import 'dart:ffi';
import 'package:monero/monero.dart' as monero;
@@ -1517,10 +1518,51 @@ class MoneroWallet implements Wallet2Wallet {
return monero.Wallet_watchOnly(walletPtr);
}
+ List<TrezorTdi> exportTrezorTdis() {
+ final res = monero.Wallet_exportTrezorTdis(walletPtr);
+ final l = parseTrezorTdis(res);
+ return l;
+ }
+
@override
int ffiAddress() => walletPtr.address;
}
+class TrezorTdi {
+ TrezorTdi({
+ required this.outKey,
+ required this.txPubKey,
+ this.additionalTxPubKeys,
+ required this.internalOutputIndex,
+ required this.subAddrMajor,
+ required this.subAddrMinor,
+ });
+
+ final String outKey;
+ final String txPubKey;
+ final List<String>? additionalTxPubKeys;
+ final int internalOutputIndex;
+ final int subAddrMajor;
+ final int subAddrMinor;
+
+ factory TrezorTdi.fromJson(Map<String, dynamic> j) => TrezorTdi(
+ outKey: j['out_key'] as String,
+ txPubKey: j['tx_pub_key'] as String,
+ additionalTxPubKeys: (j['additional_tx_pub_keys'] as List?)
+ ?.cast<String>(),
+ internalOutputIndex: (j['internal_output_index'] as num).toInt(),
+ subAddrMajor: (j['sub_addr_major'] as num).toInt(),
+ subAddrMinor: (j['sub_addr_minor'] as num).toInt(),
+ );
+}
+
+List<TrezorTdi> parseTrezorTdis(String json) {
+ final root = jsonDecode(json) as Map<String, dynamic>;
+ return (root['tdis'] as List)
+ .map((e) => TrezorTdi.fromJson(e as Map<String, dynamic>))
+ .toList();
+}
+
class MoneroWalletManager implements Wallet2WalletManager {
MoneroWalletManager(this.wmPtr);
diff --git a/monero_libwallet2_api_c/src/main/cpp/monero_wallet2_api_c.cpp b/monero_libwallet2_api_c/src/main/cpp/monero_wallet2_api_c.cpp
index b9ff95f..db56643 100644
--- a/monero_libwallet2_api_c/src/main/cpp/monero_wallet2_api_c.cpp
+++ b/monero_libwallet2_api_c/src/main/cpp/monero_wallet2_api_c.cpp
@@ -85,10 +85,7 @@ const char* MONERO_PendingTransaction_errorString(void* pendingTx_ptr) {
DEBUG_START()
Monero::PendingTransaction *pendingTx = reinterpret_cast<Monero::PendingTransaction*>(pendingTx_ptr);
std::string str = pendingTx->errorString();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
bool MONERO_PendingTransaction_commit(void* pendingTx_ptr, const char* filename, bool overwrite) {
@@ -101,10 +98,7 @@ const char* MONERO_PendingTransaction_commitUR(void* pendingTx_ptr, int max_frag
DEBUG_START()
Monero::PendingTransaction *pendingTx = reinterpret_cast<Monero::PendingTransaction*>(pendingTx_ptr);
std::string str = pendingTx->commitUR(max_fragment_length);
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
uint64_t MONERO_PendingTransaction_amount(void* pendingTx_ptr) {
@@ -156,10 +150,7 @@ const char* MONERO_PendingTransaction_multisigSignData(void* pendingTx_ptr) {
DEBUG_START()
Monero::PendingTransaction *pendingTx = reinterpret_cast<Monero::PendingTransaction*>(pendingTx_ptr);
std::string str = pendingTx->multisigSignData();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
void MONERO_PendingTransaction_signMultisigTx(void* pendingTx_ptr) {
@@ -208,10 +199,7 @@ const char* MONERO_UnsignedTransaction_errorString(void* unsignedTx_ptr) {
DEBUG_START()
Monero::UnsignedTransaction *unsignedTx = reinterpret_cast<Monero::UnsignedTransaction*>(unsignedTx_ptr);
std::string str = unsignedTx->errorString();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
const char* MONERO_UnsignedTransaction_amount(void* unsignedTx_ptr, const char* separator) {
@@ -236,10 +224,7 @@ const char* MONERO_UnsignedTransaction_confirmationMessage(void* unsignedTx_ptr)
DEBUG_START()
Monero::UnsignedTransaction *unsignedTx = reinterpret_cast<Monero::UnsignedTransaction*>(unsignedTx_ptr);
std::string str = unsignedTx->confirmationMessage();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
const char* MONERO_UnsignedTransaction_paymentId(void* unsignedTx_ptr, const char* separator) {
@@ -276,10 +261,7 @@ const char* MONERO_UnsignedTransaction_signUR(void* unsignedTx_ptr, int max_frag
DEBUG_START()
Monero::UnsignedTransaction *unsignedTx = reinterpret_cast<Monero::UnsignedTransaction*>(unsignedTx_ptr);
std::string str = unsignedTx->signUR(max_fragment_length);
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
// TransactionInfo
@@ -332,10 +314,7 @@ const char* MONERO_TransactionInfo_description(void* txInfo_ptr) {
DEBUG_START()
Monero::TransactionInfo *txInfo = reinterpret_cast<Monero::TransactionInfo*>(txInfo_ptr);
std::string str = txInfo->description();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
const char* MONERO_TransactionInfo_subaddrIndex(void* txInfo_ptr, const char* separator) {
@@ -355,10 +334,7 @@ const char* MONERO_TransactionInfo_label(void* txInfo_ptr) {
DEBUG_START()
Monero::TransactionInfo *txInfo = reinterpret_cast<Monero::TransactionInfo*>(txInfo_ptr);
std::string str = txInfo->label();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
uint64_t MONERO_TransactionInfo_confirmations(void* txInfo_ptr) {
@@ -377,10 +353,7 @@ const char* MONERO_TransactionInfo_hash(void* txInfo_ptr) {
DEBUG_START()
Monero::TransactionInfo *txInfo = reinterpret_cast<Monero::TransactionInfo*>(txInfo_ptr);
std::string str = txInfo->hash();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
uint64_t MONERO_TransactionInfo_timestamp(void* txInfo_ptr) {
@@ -393,10 +366,7 @@ const char* MONERO_TransactionInfo_paymentId(void* txInfo_ptr) {
DEBUG_START()
Monero::TransactionInfo *txInfo = reinterpret_cast<Monero::TransactionInfo*>(txInfo_ptr);
std::string str = txInfo->paymentId();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
@@ -418,10 +388,7 @@ const char* MONERO_TransactionInfo_transfers_address(void* txInfo_ptr, int index
DEBUG_START()
Monero::TransactionInfo *txInfo = reinterpret_cast<Monero::TransactionInfo*>(txInfo_ptr);
std::string str = txInfo->transfers()[index].address;
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
@@ -468,10 +435,7 @@ const char* MONERO_AddressBookRow_extra(void* addressBookRow_ptr) {
DEBUG_START()
Monero::AddressBookRow *addressBookRow = reinterpret_cast<Monero::AddressBookRow*>(addressBookRow_ptr);
std::string str = addressBookRow->extra;
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
// std::string getAddress() const {return m_address;}
@@ -479,10 +443,7 @@ const char* MONERO_AddressBookRow_getAddress(void* addressBookRow_ptr) {
DEBUG_START()
Monero::AddressBookRow *addressBookRow = reinterpret_cast<Monero::AddressBookRow*>(addressBookRow_ptr);
std::string str = addressBookRow->getAddress();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
// std::string getDescription() const {return m_description;}
@@ -490,10 +451,7 @@ const char* MONERO_AddressBookRow_getDescription(void* addressBookRow_ptr) {
DEBUG_START()
Monero::AddressBookRow *addressBookRow = reinterpret_cast<Monero::AddressBookRow*>(addressBookRow_ptr);
std::string str = addressBookRow->getDescription();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
// std::string getPaymentId() const {return m_paymentId;}
@@ -501,10 +459,7 @@ const char* MONERO_AddressBookRow_getPaymentId(void* addressBookRow_ptr) {
DEBUG_START()
Monero::AddressBookRow *addressBookRow = reinterpret_cast<Monero::AddressBookRow*>(addressBookRow_ptr);
std::string str = addressBookRow->getPaymentId();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
// std::size_t getRowId() const {return m_rowId;}
@@ -568,10 +523,7 @@ const char* MONERO_AddressBook_errorString(void* addressBook_ptr) {
DEBUG_START()
Monero::AddressBook *addressBook = reinterpret_cast<Monero::AddressBook*>(addressBook_ptr);
std::string str = addressBook->errorString();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
// virtual int errorCode() const = 0;
@@ -601,10 +553,7 @@ const char* MONERO_CoinsInfo_hash(void* coinsInfo_ptr) {
DEBUG_START()
Monero::CoinsInfo *coinsInfo = reinterpret_cast<Monero::CoinsInfo*>(coinsInfo_ptr);
std::string str = coinsInfo->hash();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
// virtual size_t internalOutputIndex() const = 0;
@@ -689,10 +638,7 @@ const char* MONERO_CoinsInfo_address(void* coinsInfo_ptr) {
DEBUG_START()
Monero::CoinsInfo *coinsInfo = reinterpret_cast<Monero::CoinsInfo*>(coinsInfo_ptr);
std::string str = coinsInfo->address();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
// virtual std::string addressLabel() const = 0;
@@ -700,10 +646,7 @@ const char* MONERO_CoinsInfo_addressLabel(void* coinsInfo_ptr) {
DEBUG_START()
Monero::CoinsInfo *coinsInfo = reinterpret_cast<Monero::CoinsInfo*>(coinsInfo_ptr);
std::string str = coinsInfo->addressLabel();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
// virtual std::string keyImage() const = 0;
@@ -711,10 +654,7 @@ const char* MONERO_CoinsInfo_keyImage(void* coinsInfo_ptr) {
DEBUG_START()
Monero::CoinsInfo *coinsInfo = reinterpret_cast<Monero::CoinsInfo*>(coinsInfo_ptr);
std::string str = coinsInfo->keyImage();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
// virtual uint64_t unlockTime() const = 0;
@@ -736,10 +676,7 @@ const char* MONERO_CoinsInfo_pubKey(void* coinsInfo_ptr) {
DEBUG_START()
Monero::CoinsInfo *coinsInfo = reinterpret_cast<Monero::CoinsInfo*>(coinsInfo_ptr);
std::string str = coinsInfo->pubKey();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
// virtual bool coinbase() const = 0;
@@ -754,10 +691,7 @@ const char* MONERO_CoinsInfo_description(void* coinsInfo_ptr) {
DEBUG_START()
Monero::CoinsInfo *coinsInfo = reinterpret_cast<Monero::CoinsInfo*>(coinsInfo_ptr);
std::string str = coinsInfo->description();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
@@ -851,10 +785,7 @@ const char* MONERO_SubaddressRow_extra(void* subaddressRow_ptr) {
DEBUG_START()
Monero::SubaddressRow *subaddressRow = reinterpret_cast<Monero::SubaddressRow*>(subaddressRow_ptr);
std::string str = subaddressRow->extra;
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
// std::string getAddress() const {return m_address;}
@@ -862,10 +793,7 @@ const char* MONERO_SubaddressRow_getAddress(void* subaddressRow_ptr) {
DEBUG_START()
Monero::SubaddressRow *subaddressRow = reinterpret_cast<Monero::SubaddressRow*>(subaddressRow_ptr);
std::string str = subaddressRow->getAddress();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
// std::string getLabel() const {return m_label;}
@@ -873,10 +801,7 @@ const char* MONERO_SubaddressRow_getLabel(void* subaddressRow_ptr) {
DEBUG_START()
Monero::SubaddressRow *subaddressRow = reinterpret_cast<Monero::SubaddressRow*>(subaddressRow_ptr);
std::string str = subaddressRow->getLabel();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
// std::size_t getRowId() const {return m_rowId;}
@@ -930,10 +855,7 @@ const char* MONERO_SubaddressAccountRow_extra(void* subaddressAccountRow_ptr) {
DEBUG_START()
Monero::SubaddressAccountRow *subaddressAccountRow = reinterpret_cast<Monero::SubaddressAccountRow*>(subaddressAccountRow_ptr);
std::string str = subaddressAccountRow->extra;
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
// std::string getAddress() const {return m_address;}
@@ -941,10 +863,7 @@ const char* MONERO_SubaddressAccountRow_getAddress(void* subaddressAccountRow_pt
DEBUG_START()
Monero::SubaddressAccountRow *subaddressAccountRow = reinterpret_cast<Monero::SubaddressAccountRow*>(subaddressAccountRow_ptr);
std::string str = subaddressAccountRow->getAddress();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
// std::string getLabel() const {return m_label;}
@@ -952,10 +871,7 @@ const char* MONERO_SubaddressAccountRow_getLabel(void* subaddressAccountRow_ptr)
DEBUG_START()
Monero::SubaddressAccountRow *subaddressAccountRow = reinterpret_cast<Monero::SubaddressAccountRow*>(subaddressAccountRow_ptr);
std::string str = subaddressAccountRow->getLabel();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
// std::string getBalance() const {return m_balance;}
@@ -963,10 +879,7 @@ const char* MONERO_SubaddressAccountRow_getBalance(void* subaddressAccountRow_pt
DEBUG_START()
Monero::SubaddressAccountRow *subaddressAccountRow = reinterpret_cast<Monero::SubaddressAccountRow*>(subaddressAccountRow_ptr);
std::string str = subaddressAccountRow->getBalance();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
// std::string getUnlockedBalance() const {return m_unlockedBalance;}
@@ -974,10 +887,7 @@ const char* MONERO_SubaddressAccountRow_getUnlockedBalance(void* subaddressAccou
DEBUG_START()
Monero::SubaddressAccountRow *subaddressAccountRow = reinterpret_cast<Monero::SubaddressAccountRow*>(subaddressAccountRow_ptr);
std::string str = subaddressAccountRow->getUnlockedBalance();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
// std::size_t getRowId() const {return m_rowId;}
@@ -1094,10 +1004,7 @@ const char* MONERO_Wallet_seed(void* wallet_ptr, const char* seed_offset) {
DEBUG_START()
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = wallet->seed(std::string(seed_offset));
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
@@ -1105,10 +1012,7 @@ const char* MONERO_Wallet_getSeedLanguage(void* wallet_ptr) {
DEBUG_START()
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = wallet->getSeedLanguage();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
@@ -1130,10 +1034,7 @@ const char* MONERO_Wallet_errorString(void* wallet_ptr) {
DEBUG_START()
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = wallet->errorString();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
@@ -1149,10 +1050,7 @@ const char* MONERO_Wallet_getPassword(void* wallet_ptr) {
DEBUG_START()
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = wallet->getPassword();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
@@ -1174,10 +1072,7 @@ const char* MONERO_Wallet_address(void* wallet_ptr, uint64_t accountIndex, uint6
DEBUG_START()
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = wallet->address(accountIndex, addressIndex);
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
@@ -1185,10 +1080,7 @@ const char* MONERO_Wallet_path(void* wallet_ptr) {
DEBUG_START()
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = wallet->path();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
int MONERO_Wallet_nettype(void* wallet_ptr) {
@@ -1207,10 +1099,7 @@ const char* MONERO_Wallet_integratedAddress(void* wallet_ptr, const char* paymen
DEBUG_START()
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = wallet->integratedAddress(std::string(payment_id));
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
@@ -1218,10 +1107,7 @@ const char* MONERO_Wallet_secretViewKey(void* wallet_ptr) {
DEBUG_START()
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = wallet->secretViewKey();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
@@ -1229,10 +1115,7 @@ const char* MONERO_Wallet_publicViewKey(void* wallet_ptr) {
DEBUG_START()
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = wallet->publicViewKey();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
@@ -1240,10 +1123,7 @@ const char* MONERO_Wallet_secretSpendKey(void* wallet_ptr) {
DEBUG_START()
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = wallet->secretSpendKey();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
@@ -1251,20 +1131,14 @@ const char* MONERO_Wallet_publicSpendKey(void* wallet_ptr) {
DEBUG_START()
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = wallet->publicSpendKey();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
const char* MONERO_Wallet_publicMultisigSignerKey(void* wallet_ptr) {
DEBUG_START()
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = wallet->publicMultisigSignerKey();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
@@ -1285,20 +1159,14 @@ const char* MONERO_Wallet_filename(void* wallet_ptr) {
DEBUG_START()
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = wallet->filename();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
const char* MONERO_Wallet_keysFilename(void* wallet_ptr) {
DEBUG_START()
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = wallet->keysFilename();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
@@ -1464,10 +1332,7 @@ bool MONERO_Wallet_synchronized(void* wallet_ptr) {
const char* MONERO_Wallet_displayAmount(uint64_t amount) {
DEBUG_START()
std::string str = Monero::Wallet::displayAmount(amount);
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
@@ -1487,10 +1352,7 @@ uint64_t MONERO_Wallet_amountFromDouble(double amount) {
const char* MONERO_Wallet_genPaymentId() {
DEBUG_START()
std::string str = Monero::Wallet::genPaymentId();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
// static bool paymentIdValid(const std::string &paiment_id);
@@ -1516,20 +1378,14 @@ const char* MONERO_Wallet_keyValid_error(const char* secret_key_string, const ch
DEBUG_START()
std::string str;
Monero::Wallet::keyValid(std::string(secret_key_string), std::string(address_string), isViewKey, nettype, str);
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
const char* MONERO_Wallet_paymentIdFromAddress(const char* strarg, int nettype) {
DEBUG_START()
std::string str = Monero::Wallet::paymentIdFromAddress(std::string(strarg), nettype);
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
uint64_t MONERO_Wallet_maximumAllowedAmount() {
@@ -1551,10 +1407,7 @@ const char* MONERO_Wallet_getPolyseed(void* wallet_ptr, const char* passphrase)
std::string _passphrase = std::string(passphrase);
wallet->getPolyseed(seed, _passphrase);
std::string str = seed;
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
// static bool createPolyseed(std::string &seed_words, std::string &err, const std::string &language = "English");
@@ -1564,10 +1417,7 @@ const char* MONERO_Wallet_createPolyseed(const char* language) {
std::string err;
Monero::Wallet::createPolyseed(seed_words, err, std::string(language));
std::string str = seed_words;
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
@@ -1647,10 +1497,7 @@ const char* MONERO_Wallet_getSubaddressLabel(void* wallet_ptr, uint32_t accountI
DEBUG_START()
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = wallet->getSubaddressLabel(accountIndex, addressIndex);
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
@@ -1673,10 +1520,7 @@ const char* MONERO_Wallet_getMultisigInfo(void* wallet_ptr) {
DEBUG_START()
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = wallet->getMultisigInfo();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
@@ -1684,10 +1528,7 @@ const char* MONERO_Wallet_makeMultisig(void* wallet_ptr, const char* info, const
DEBUG_START()
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = wallet->makeMultisig(splitStringVector(std::string(info), std::string(info_separator)), threshold);
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
@@ -1695,10 +1536,7 @@ const char* MONERO_Wallet_exchangeMultisigKeys(void* wallet_ptr, const char* inf
DEBUG_START()
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = wallet->exchangeMultisigKeys(splitStringVector(std::string(info), std::string(info_separator)), force_update_use_with_caution);
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
@@ -1707,10 +1545,7 @@ const char* MONERO_Wallet_exportMultisigImages(void* wallet_ptr, const char* sep
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str;
wallet->exportMultisigImages(str);
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
@@ -1835,10 +1670,7 @@ const char* MONERO_Wallet_exportKeyImagesUR(void* wallet_ptr, size_t max_fragmen
DEBUG_START()
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = wallet->exportKeyImagesUR(max_fragment_length, all);
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
bool MONERO_Wallet_importKeyImages(void* wallet_ptr, const char* filename) {
@@ -1863,10 +1695,7 @@ const char* MONERO_Wallet_exportOutputsUR(void* wallet_ptr, size_t max_fragment_
DEBUG_START()
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = wallet->exportOutputsUR(max_fragment_length, all);
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
bool MONERO_Wallet_importOutputs(void* wallet_ptr, const char* filename) {
@@ -1982,10 +1811,7 @@ const char* MONERO_Wallet_getCacheAttribute(void* wallet_ptr, const char* key) {
DEBUG_START()
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = wallet->getCacheAttribute(std::string(key));
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
// virtual bool setUserNote(const std::string &txid, const std::string &note) = 0;
@@ -2000,10 +1826,7 @@ const char* MONERO_Wallet_getUserNote(void* wallet_ptr, const char* txid) {
DEBUG_START()
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = wallet->getUserNote(std::string(txid));
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
@@ -2011,10 +1834,7 @@ const char* MONERO_Wallet_getTxKey(void* wallet_ptr, const char* txid) {
DEBUG_START()
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = wallet->getTxKey(std::string(txid));
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
@@ -2022,10 +1842,7 @@ const char* MONERO_Wallet_signMessage(void* wallet_ptr, const char* message, con
DEBUG_START()
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = wallet->signMessage(std::string(message), std::string(address));
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
@@ -2121,10 +1938,7 @@ const char* MONERO_Wallet_deviceShowAddress(void* wallet_ptr, uint32_t accountIn
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = "";
wallet->deviceShowAddress(accountIndex, addressIndex, str);
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
// virtual bool reconnectDevice() = 0;
@@ -2216,6 +2030,22 @@ const char* MONERO_Wallet_serializeCacheToJson(void* wallet_ptr) {
DEBUG_END()
}
+const char* MONERO_Wallet_exportTrezorTdis(void *wallet_ptr) {
+ DEBUG_START()
+ Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
+ std::string result = wallet->exportTrezorTdis();
+ return strdup(result.c_str());
+ DEBUG_END()
+}
+
+bool MONERO_Wallet_importTrezorEncryptedKeyImagesJson(void *wallet_ptr, const char* json) {
+ DEBUG_START()
+ Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
+ bool result = wallet->importTrezorEncryptedKeyImagesJson(std::string(json));
+ return result;
+ DEBUG_END()
+}
+
void* MONERO_WalletManager_createWallet(void* wm_ptr, const char* path, const char* password, const char* language, int networkType) {
DEBUG_START()
Monero::WalletManager *wm = reinterpret_cast<Monero::WalletManager*>(wm_ptr);
@@ -2375,10 +2205,7 @@ const char* MONERO_WalletManager_errorString(void* wm_ptr) {
DEBUG_START()
Monero::WalletManager *wm = reinterpret_cast<Monero::WalletManager*>(wm_ptr);
std::string str = wm->errorString();
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
@@ -2459,10 +2286,7 @@ const char* MONERO_WalletManager_resolveOpenAlias(void* wm_ptr, const char* addr
DEBUG_START()
Monero::WalletManager *wm = reinterpret_cast<Monero::WalletManager*>(wm_ptr);
std::string str = wm->resolveOpenAlias(std::string(address), dnssec_valid);
- const std::string::size_type size = str.size();
- char *buffer = new char[size + 1]; //we need extra char for NUL
- memcpy(buffer, str.c_str(), size + 1);
- return buffer;
+ return strdup(str.c_str());
DEBUG_END()
}
diff --git a/monero_libwallet2_api_c/src/main/cpp/monero_wallet2_api_c.h b/monero_libwallet2_api_c/src/main/cpp/monero_wallet2_api_c.h
index 39bca89..f3cfdee 100644
--- a/monero_libwallet2_api_c/src/main/cpp/monero_wallet2_api_c.h
+++ b/monero_libwallet2_api_c/src/main/cpp/monero_wallet2_api_c.h
@@ -848,6 +848,9 @@ extern ADDAPI void MONERO_Wallet_setDeviceReceivedData(unsigned char* data, size
extern ADDAPI void MONERO_Wallet_setDeviceSendData(unsigned char* data, size_t len);
extern ADDAPI void MONERO_Wallet_setLedgerCallback(void (*sendToLedgerDevice)(unsigned char *command, unsigned int cmd_len));
extern ADDAPI const char* MONERO_Wallet_serializeCacheToJson(void* wallet_ptr);
+extern ADDAPI const char* MONERO_Wallet_exportTrezorTdis(void* wallet_ptr);
+extern ADDAPI bool MONERO_Wallet_importTrezorEncryptedKeyImagesJson(void* wallet_ptr, const char* json);
+
// };
// struct WalletManager