Skip to content

Commit

Permalink
more
Browse files Browse the repository at this point in the history
  • Loading branch information
janmazak committed Jan 26, 2021
1 parent 7dcd2d1 commit 8fd8e28
Show file tree
Hide file tree
Showing 7 changed files with 68 additions and 15 deletions.
1 change: 1 addition & 0 deletions src/signTx.c
Expand Up @@ -42,6 +42,7 @@ static inline void advanceStage()
// we should have received all inputs
ASSERT(ctx->currentInput == ctx->numInputs);
txHashBuilder_enterOutputs(&ctx->txHashBuilder);
signTxOutput_init();
ctx->stage = SIGN_STAGE_OUTPUTS;

if (ctx->numOutputs > 0) {
Expand Down
40 changes: 27 additions & 13 deletions src/signTxOutput.c
Expand Up @@ -6,7 +6,7 @@
#include "signTxUtils.h"
#include "uiScreens.h"
#include "txHashBuilder.h"
// #include "textUtils.h"
#include "textUtils.h"
// #include "hexUtils.h"
// #include "messageSigning.h"
#include "bufView.h"
Expand Down Expand Up @@ -130,7 +130,7 @@ static void signTx_handleOutput_address_ui_runStep()
);
}
UI_STEP(HANDLE_OUTPUT_ADDRESS_BYTES_STEP_DISPLAY_ADA_AMOUNT) {
ui_displayAmountScreen("Send ADA", subctx->stateData.output.adaAmount, this_fn);
ui_displayAmountScreen("Send", subctx->stateData.output.adaAmount, this_fn);
}
UI_STEP(HANDLE_OUTPUT_ADDRESS_BYTES_STEP_RESPOND) {
respondSuccessEmptyMsg();
Expand Down Expand Up @@ -205,7 +205,7 @@ static void signTx_handleOutput_addressParams_ui_runStep()
ui_displayStakingInfoScreen(&subctx->stateData.output.params, this_fn);
}
UI_STEP(HANDLE_OUTPUT_ADDRESS_PARAMS_STEP_DISPLAY_AMOUNT) {
ui_displayAmountScreen("Send ADA", subctx->stateData.output.adaAmount, this_fn);
ui_displayAmountScreen("Send", subctx->stateData.output.adaAmount, this_fn);
}
UI_STEP(HANDLE_OUTPUT_ADDRESS_PARAMS_STEP_RESPOND) {
respondSuccessEmptyMsg();
Expand Down Expand Up @@ -359,7 +359,7 @@ static void signTxOutput_handleTokenGroup_ui_runStep()
STATIC_ASSERT(SIZEOF(subctx->stateData.tokenGroup.policyId) == MINTING_POLICY_ID_SIZE, "inconsistent minting policy id size");

ui_displayHexBufferScreen(
"Policy id",
"Token policy id",
subctx->stateData.tokenGroup.policyId, MINTING_POLICY_ID_SIZE,
this_fn
);
Expand Down Expand Up @@ -444,18 +444,31 @@ static void signTxOutput_handleTokenAmount_ui_runStep()

UI_STEP_BEGIN(subctx->ui_step);

// TODO rethink what is displayed for these assets, decrease user clicks?
UI_STEP(HANDLE_TOKEN_AMOUNT_STEP_DISPLAY_NAME) {
ui_displayHexBufferScreen(
"Token name",
subctx->stateData.tokenAmount.assetName, subctx->stateData.tokenAmount.assetNameSize,
this_fn
);
token_amount_t* tokenAmount = &subctx->stateData.tokenAmount;
if (str_isTextPrintable(tokenAmount->assetName, tokenAmount->assetNameSize)) {
char name[ASSET_NAME_SIZE_MAX + 1];
ASSERT(tokenAmount->assetNameSize + 1 <= SIZEOF(name));
for (size_t i = 0; i < tokenAmount->assetNameSize; i++)
name[i] = tokenAmount->assetName[i];
name[tokenAmount->assetNameSize] = '\0';

ui_displayPaginatedText(
"Token name",
name,
this_fn
);
} else {
ui_displayHexBufferScreen(
"Token name",
subctx->stateData.tokenAmount.assetName, subctx->stateData.tokenAmount.assetNameSize,
this_fn
);
}
}
UI_STEP(HANDLE_TOKEN_AMOUNT_STEP_DISPLAY_AMOUNT) {
// TODO this should not display ADA
ui_displayAmountScreen(
"Token name",
ui_displayUint64Screen(
"Token amount",
subctx->stateData.tokenAmount.amount,
this_fn
);
Expand Down Expand Up @@ -492,6 +505,7 @@ static void signTxOutput_handleTokenAmountAPDU(uint8_t* wireDataBuffer, size_t w

VALIDATE(view_remainingSize(&view) == 8, ERR_INVALID_DATA);
tokenAmount->amount = parse_u8be(&view);
TRACE_UINT64(tokenAmount->amount);
// TODO validate something?
}

Expand Down
13 changes: 13 additions & 0 deletions src/textUtils.c
Expand Up @@ -182,6 +182,19 @@ void str_validateTextBuffer(const uint8_t* text, size_t textSize)
}
}

// check if it is printable ASCII between 33 and 126
bool str_isTextPrintable(const uint8_t* text, size_t textSize)
{
ASSERT(textSize < BUFFER_SIZE_PARANOIA);

for (size_t i = 0; i < textSize; i++) {
if (text[i] > 126) return false;
if (text[i] < 33) return false;
}

return true;
}

#ifdef DEVEL

// converts a text to bytes (suitable for CBORization) and validates if chars are allowed
Expand Down
1 change: 1 addition & 0 deletions src/textUtils.h
Expand Up @@ -32,6 +32,7 @@ size_t str_formatTtl(uint64_t ttl, char* out, size_t outSize);
size_t str_formatMetadata(const uint8_t* metadataHash, size_t metadataHashSize, char* out, size_t outSize);

void str_validateTextBuffer(const uint8_t* text, size_t textSize);
bool str_isTextPrintable(const uint8_t* text, size_t textSize);


#ifdef DEVEL
Expand Down
6 changes: 4 additions & 2 deletions src/txHashBuilder_test.c
Expand Up @@ -330,12 +330,14 @@ void run_txHashBuilder_test()
ITERATE(it, outputs) {
uint8_t tmp[70];
size_t tmpSize = decode_hex(PTR_PIC(it->rawAddressHex), tmp, SIZEOF(tmp));
txHashBuilder_addOutput(
txHashBuilder_addOutput_basicData(
&builder,
tmp, tmpSize,
it->amount
it->amount,
0
);
}
// TOOD add multiasset output

txHashBuilder_addFee(&builder, 42);

Expand Down
16 changes: 16 additions & 0 deletions src/uiScreens.c
Expand Up @@ -191,6 +191,22 @@ void ui_displayAmountScreen(
);
}

void ui_displayUint64Screen(
const char* screenHeader,
uint64_t value,
ui_callback_fn_t callback
)
{
char valueStr[30];
str_formatUint64(value, valueStr, SIZEOF(valueStr));

ui_displayPaginatedText(
screenHeader,
valueStr,
callback
);
}

void ui_displayNetworkParamsScreen(
const char* screenHeader,
uint8_t networkId,
Expand Down
6 changes: 6 additions & 0 deletions src/uiScreens.h
Expand Up @@ -34,6 +34,12 @@ void ui_displayAmountScreen(
ui_callback_fn_t callback
);

void ui_displayUint64Screen(
const char* screenHeader,
uint64_t value,
ui_callback_fn_t callback
);

void ui_displayNetworkParamsScreen(
const char* screenHeader,
uint8_t networkId,
Expand Down

0 comments on commit 8fd8e28

Please sign in to comment.