Challenge implementation

This commit is contained in:
Alexandre Paillier
2023-02-24 17:37:24 +01:00
parent 1b40d252b4
commit 5e251c231b
5 changed files with 71 additions and 0 deletions
+5
View File
@@ -157,6 +157,11 @@ ifneq ($(CAL_CI_KEY),0)
DEFINES += HAVE_CAL_CI_KEY
endif
# ENS
ifneq ($(TARGET_NAME),TARGET_NANOS)
DEFINES += HAVE_TRUSTED_NAME
endif
# Enabling debug PRINTF
DEBUG:=0
ifneq ($(DEBUG),0)
+2
View File
@@ -24,6 +24,8 @@
#define INS_EIP712_STRUCT_DEF 0x1A
#define INS_EIP712_STRUCT_IMPL 0x1C
#define INS_EIP712_FILTERING 0x1E
#define INS_ENS_GET_CHALLENGE 0x20
#define INS_ENS_PROVIDE_INFO 0x22
#define P1_CONFIRM 0x01
#define P1_NON_CONFIRM 0x00
#define P2_NO_CHAINCODE 0x00
+20
View File
@@ -29,6 +29,8 @@
#include "handle_get_printable_amount.h"
#include "handle_check_address.h"
#include "commands_712.h"
#include "challenge.h"
#include "trusted_name.h"
#ifdef HAVE_STARKWARE
#include "stark_crypto.h"
@@ -743,6 +745,19 @@ void handleApdu(unsigned int *flags, unsigned int *tx) {
break;
#endif // HAVE_EIP712_FULL_SUPPORT
#ifdef HAVE_TRUSTED_NAME
case INS_ENS_GET_CHALLENGE:
handle_get_new_challenge();
break;
case INS_ENS_PROVIDE_INFO:
handle_provide_trusted_name(G_io_apdu_buffer[OFFSET_P1],
G_io_apdu_buffer[OFFSET_P2],
G_io_apdu_buffer + OFFSET_CDATA,
G_io_apdu_buffer[OFFSET_LC]);
break;
#endif // HAVE_TRUSTED_NAME
#if 0
case 0xFF: // return to dashboard
goto return_to_dashboard;
@@ -974,6 +989,11 @@ void coin_main(chain_config_t *coin_config) {
BLE_power(1, "Nano X");
#endif // HAVE_BLE
#ifdef HAVE_TRUSTED_NAME
// to prevent it from having a fixed value at boot
roll_challenge();
#endif // HAVE_TRUSTED_NAME
app_main();
}
CATCH(EXCEPTION_IO_RESET) {
+14
View File
@@ -0,0 +1,14 @@
#ifdef HAVE_TRUSTED_NAME
#ifndef CHALLENGE_H_
#define CHALLENGE_H_
#include <stdint.h>
void roll_challenge(void);
uint32_t get_challenge(void);
void handle_get_new_challenge(void);
#endif // CHALLENGE_H_
#endif // HAVE_TRUSTED_NAME
@@ -0,0 +1,30 @@
#ifdef HAVE_TRUSTED_NAME
#include <os.h>
#include <os_io.h>
#include <cx.h>
#include "apdu_constants.h"
#include "challenge.h"
#include "mem.h"
#include "mem_utils.h"
static uint32_t challenge;
void roll_challenge(void) {
challenge = cx_rng_u32();
}
uint32_t get_challenge(void) {
return challenge;
}
void handle_get_new_challenge(void) {
roll_challenge();
PRINTF("RANDOM DATA -> %u\n", get_challenge());
U4BE_ENCODE(G_io_apdu_buffer, 0, get_challenge());
U2BE_ENCODE(G_io_apdu_buffer, 4, APDU_RESPONSE_OK);
io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, 6);
}
#endif // HAVE_TRUSTED_NAME