Merge pull request #449 from LedgerHQ/tdj/eth_plugin_sdk_update

Update plugins SDK framework
This commit is contained in:
apaillier-ledger
2023-10-19 11:26:32 +02:00
committed by GitHub
24 changed files with 607 additions and 225 deletions

View File

@@ -1,3 +1,4 @@
#include <ctype.h>
#include "shared_context.h"
#include "utils.h"
#include "feature_signTx.h"
@@ -9,7 +10,7 @@
#include "ethUtils.h"
#include "common_ui.h"
#include "ui_callbacks.h"
#include <ctype.h>
#include "apdu_constants.h"
#define ERR_SILENT_MODE_CHECK_FAILED 0x6001
@@ -189,7 +190,9 @@ static void address_to_string(uint8_t *in,
cx_sha3_t *sha3,
uint64_t chainId) {
if (in_len != 0) {
getEthDisplayableAddress(in, out, out_len, sha3, chainId);
if (!getEthDisplayableAddress(in, out, out_len, sha3, chainId)) {
THROW(APDU_RESPONSE_ERROR_NO_INFO);
}
} else {
strlcpy(out, "Contract", out_len);
}
@@ -269,7 +272,9 @@ static void get_network_as_string(char *out, size_t out_size) {
if (name == NULL) {
// No network name found so simply copy the chain ID as the network name.
u64_to_string(chain_id, out, out_size);
if (!u64_to_string(chain_id, out, out_size)) {
THROW(0x6502);
}
} else {
// Network name found, simply copy it.
strlcpy(out, name, out_size);
@@ -294,7 +299,9 @@ static void get_public_key(uint8_t *out, uint8_t outLength) {
cx_ecfp_generate_pair(CX_CURVE_256K1, &publicKey, &privateKey, 1);
explicit_bzero(&privateKey, sizeof(privateKey));
explicit_bzero(privateKeyData, sizeof(privateKeyData));
getEthAddressFromKey(&publicKey, out, &global_sha3);
if (!getEthAddressFromKey(&publicKey, out, &global_sha3)) {
THROW(CX_INVALID_PARAMETER);
}
}
/* Local implmentation of strncasecmp, workaround of the segfaulting base implem
@@ -463,12 +470,16 @@ void finalizeParsing(bool direct) {
// Format the amount in a temporary buffer, if in swap case compare it with validated
// amount, else commit it
amountToString(tmpContent.txContent.value.value,
tmpContent.txContent.value.length,
decimals,
ticker,
displayBuffer,
sizeof(displayBuffer));
if (!amountToString(tmpContent.txContent.value.value,
tmpContent.txContent.value.length,
decimals,
ticker,
displayBuffer,
sizeof(displayBuffer))) {
PRINTF("OVERFLOW, amount to string failed\n");
THROW(EXCEPTION_OVERFLOW);
}
if (G_called_from_swap) {
// Ensure the values are the same that the ones that have been previously validated
if (strcmp(strings.common.fullAmount, displayBuffer) != 0) {