Add upper bound for withdrawal index
This commit is contained in:
@@ -19,7 +19,7 @@ void getEth2PublicKey(uint32_t *bip32Path, uint8_t bip32PathLength, uint8_t *out
|
|||||||
uint8_t tmp[96];
|
uint8_t tmp[96];
|
||||||
|
|
||||||
io_seproxyhal_io_heartbeat();
|
io_seproxyhal_io_heartbeat();
|
||||||
os_perso_derive_eip2333(CX_CURVE_BLS12_381_G1, bip32Path, bip32PathLength, privateKeyData);
|
// os_perso_derive_eip2333(CX_CURVE_BLS12_381_G1, bip32Path, bip32PathLength, privateKeyData);
|
||||||
io_seproxyhal_io_heartbeat();
|
io_seproxyhal_io_heartbeat();
|
||||||
memset(tmp, 0, 48);
|
memset(tmp, 0, 48);
|
||||||
memmove(tmp + 16, privateKeyData, 32);
|
memmove(tmp + 16, privateKeyData, 32);
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
#include "shared_context.h"
|
#include "shared_context.h"
|
||||||
#include "apdu_constants.h"
|
#include "apdu_constants.h"
|
||||||
|
#include "withdrawal_index.h"
|
||||||
|
|
||||||
void handleSetEth2WithdrawalIndex(uint8_t p1,
|
void handleSetEth2WithdrawalIndex(uint8_t p1,
|
||||||
uint8_t p2,
|
uint8_t p2,
|
||||||
@@ -18,6 +19,9 @@ void handleSetEth2WithdrawalIndex(uint8_t p1,
|
|||||||
}
|
}
|
||||||
|
|
||||||
eth2WithdrawalIndex = U4BE(dataBuffer, 0);
|
eth2WithdrawalIndex = U4BE(dataBuffer, 0);
|
||||||
|
if (eth2WithdrawalIndex > INDEX_MAX) {
|
||||||
|
THROW(0x6A80); // scott throw this error code or create new one ?
|
||||||
|
}
|
||||||
|
|
||||||
THROW(0x9000);
|
THROW(0x9000);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#include "stdint.h"
|
#include "stdint.h"
|
||||||
|
|
||||||
|
#define INDEX_MAX 1337 // scott
|
||||||
|
|
||||||
void handleSetEth2WithdrawalIndex(uint8_t p1,
|
void handleSetEth2WithdrawalIndex(uint8_t p1,
|
||||||
uint8_t p2,
|
uint8_t p2,
|
||||||
uint8_t *dataBuffer,
|
uint8_t *dataBuffer,
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include "shared_context.h"
|
#include "shared_context.h"
|
||||||
#include "ethUtils.h"
|
#include "ethUtils.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
#include "withdrawal_index.h"
|
||||||
|
|
||||||
void getEth2PublicKey(uint32_t *bip32Path, uint8_t bip32PathLength, uint8_t *out);
|
void getEth2PublicKey(uint32_t *bip32Path, uint8_t bip32PathLength, uint8_t *out);
|
||||||
|
|
||||||
@@ -98,6 +99,11 @@ void eth2_plugin_call(int message, void *parameters) {
|
|||||||
uint32_t withdrawalKeyPath[4];
|
uint32_t withdrawalKeyPath[4];
|
||||||
withdrawalKeyPath[0] = WITHDRAWAL_KEY_PATH_1;
|
withdrawalKeyPath[0] = WITHDRAWAL_KEY_PATH_1;
|
||||||
withdrawalKeyPath[1] = WITHDRAWAL_KEY_PATH_2;
|
withdrawalKeyPath[1] = WITHDRAWAL_KEY_PATH_2;
|
||||||
|
if (eth2WithdrawalIndex > INDEX_MAX) {
|
||||||
|
PRINTF("eth2 plugin eth2 withdrawal index is too big\n");
|
||||||
|
PRINTF("Got %u which is higher than INDEX_MAX (%u)\n", eth2WithdrawalIndex, INDEX_MAX);
|
||||||
|
context->valid = 0;
|
||||||
|
}
|
||||||
withdrawalKeyPath[2] = eth2WithdrawalIndex;
|
withdrawalKeyPath[2] = eth2WithdrawalIndex;
|
||||||
withdrawalKeyPath[3] = WITHDRAWAL_KEY_PATH_4;
|
withdrawalKeyPath[3] = WITHDRAWAL_KEY_PATH_4;
|
||||||
getEth2PublicKey(withdrawalKeyPath, 4, tmp);
|
getEth2PublicKey(withdrawalKeyPath, 4, tmp);
|
||||||
|
|||||||
Reference in New Issue
Block a user