From f6bc61932befd61380eef15a73199413b83e97e8 Mon Sep 17 00:00:00 2001 From: Inokentii Mazhara Date: Mon, 29 May 2023 16:23:13 +0300 Subject: [PATCH 1/4] TW-693 Fix raw bytes sign error --- .../sign-payload-request-confirmation.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/modals/confirmation-modal/d-app-operations-confirmation/sign-payload-request-confirmation/sign-payload-request-confirmation.tsx b/src/modals/confirmation-modal/d-app-operations-confirmation/sign-payload-request-confirmation/sign-payload-request-confirmation.tsx index 84547dd26..9b005c831 100644 --- a/src/modals/confirmation-modal/d-app-operations-confirmation/sign-payload-request-confirmation/sign-payload-request-confirmation.tsx +++ b/src/modals/confirmation-modal/d-app-operations-confirmation/sign-payload-request-confirmation/sign-payload-request-confirmation.tsx @@ -1,4 +1,5 @@ -import { BeaconMessageType, SignPayloadRequestOutput } from '@airgap/beacon-sdk'; +import { BeaconMessageType, SigningType, SignPayloadRequestOutput } from '@airgap/beacon-sdk'; +import { char2Bytes } from '@taquito/utils'; import React, { FC, useMemo, useState } from 'react'; import { Text, View } from 'react-native'; import { map, switchMap } from 'rxjs/operators'; @@ -33,7 +34,9 @@ interface Props { const approveSignPayloadRequest = (message: SignPayloadRequestOutput) => Shelter.getSigner$(message.sourceAddress).pipe( - switchMap(signer => signer.sign(message.payload)), + switchMap(signer => + signer.sign(message.signingType === SigningType.RAW ? char2Bytes(message.payload) : message.payload) + ), switchMap(({ prefixSig }) => BeaconHandler.respond({ type: BeaconMessageType.SignPayloadResponse, From 1d0f9b2673fe2e3a9315cb3ae97bb2a29870571d Mon Sep 17 00:00:00 2001 From: Inokentii Mazhara Date: Tue, 30 May 2023 16:25:43 +0300 Subject: [PATCH 2/4] TW-693 Fix processing hex strings --- .../sign-payload-request-confirmation.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/modals/confirmation-modal/d-app-operations-confirmation/sign-payload-request-confirmation/sign-payload-request-confirmation.tsx b/src/modals/confirmation-modal/d-app-operations-confirmation/sign-payload-request-confirmation/sign-payload-request-confirmation.tsx index 9b005c831..94bf4dc4e 100644 --- a/src/modals/confirmation-modal/d-app-operations-confirmation/sign-payload-request-confirmation/sign-payload-request-confirmation.tsx +++ b/src/modals/confirmation-modal/d-app-operations-confirmation/sign-payload-request-confirmation/sign-payload-request-confirmation.tsx @@ -32,10 +32,16 @@ interface Props { message: SignPayloadRequestOutput; } +const payloadToHex = (payload: string) => { + const alreadyHexMatch = payload.match(/^(0x)?([0-9a-fA-F]+)$/); + + return alreadyHexMatch?.[2] ?? char2Bytes(payload); +}; + const approveSignPayloadRequest = (message: SignPayloadRequestOutput) => Shelter.getSigner$(message.sourceAddress).pipe( switchMap(signer => - signer.sign(message.signingType === SigningType.RAW ? char2Bytes(message.payload) : message.payload) + signer.sign(message.signingType === SigningType.RAW ? payloadToHex(message.payload) : message.payload) ), switchMap(({ prefixSig }) => BeaconHandler.respond({ From 3d1e76efecd1d842657602296511eaba3f8ecba3 Mon Sep 17 00:00:00 2001 From: Inokentii Mazhara Date: Wed, 31 May 2023 11:20:58 +0300 Subject: [PATCH 3/4] TW-693 Fix signing hexadecimal strings with odd amount of digits --- .../sign-payload-request-confirmation.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/modals/confirmation-modal/d-app-operations-confirmation/sign-payload-request-confirmation/sign-payload-request-confirmation.tsx b/src/modals/confirmation-modal/d-app-operations-confirmation/sign-payload-request-confirmation/sign-payload-request-confirmation.tsx index 94bf4dc4e..ce0239461 100644 --- a/src/modals/confirmation-modal/d-app-operations-confirmation/sign-payload-request-confirmation/sign-payload-request-confirmation.tsx +++ b/src/modals/confirmation-modal/d-app-operations-confirmation/sign-payload-request-confirmation/sign-payload-request-confirmation.tsx @@ -4,6 +4,8 @@ import React, { FC, useMemo, useState } from 'react'; import { Text, View } from 'react-native'; import { map, switchMap } from 'rxjs/operators'; +import { isDefined } from 'src/utils/is-defined'; + import { BeaconHandler } from '../../../../beacon/beacon-handler'; import { AccountDropdownItem } from '../../../../components/account-dropdown/account-dropdown-item/account-dropdown-item'; import { ButtonLargePrimary } from '../../../../components/button/button-large/button-large-primary/button-large-primary'; @@ -34,8 +36,9 @@ interface Props { const payloadToHex = (payload: string) => { const alreadyHexMatch = payload.match(/^(0x)?([0-9a-fA-F]+)$/); + const hexString = alreadyHexMatch?.[2]; - return alreadyHexMatch?.[2] ?? char2Bytes(payload); + return isDefined(hexString) && hexString.length % 2 === 0 ? hexString : char2Bytes(payload); }; const approveSignPayloadRequest = (message: SignPayloadRequestOutput) => From 6a31dd0f804385227dedbdc14b51d78b92e6e403 Mon Sep 17 00:00:00 2001 From: Inokentii Mazhara Date: Wed, 31 May 2023 11:48:21 +0300 Subject: [PATCH 4/4] TW-693 Refactor imports --- .../sign-payload-request-confirmation.tsx | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/modals/confirmation-modal/d-app-operations-confirmation/sign-payload-request-confirmation/sign-payload-request-confirmation.tsx b/src/modals/confirmation-modal/d-app-operations-confirmation/sign-payload-request-confirmation/sign-payload-request-confirmation.tsx index ce0239461..f1b6fef9a 100644 --- a/src/modals/confirmation-modal/d-app-operations-confirmation/sign-payload-request-confirmation/sign-payload-request-confirmation.tsx +++ b/src/modals/confirmation-modal/d-app-operations-confirmation/sign-payload-request-confirmation/sign-payload-request-confirmation.tsx @@ -4,29 +4,29 @@ import React, { FC, useMemo, useState } from 'react'; import { Text, View } from 'react-native'; import { map, switchMap } from 'rxjs/operators'; +import { BeaconHandler } from 'src/beacon/beacon-handler'; +import { AccountDropdownItem } from 'src/components/account-dropdown/account-dropdown-item/account-dropdown-item'; +import { ButtonLargePrimary } from 'src/components/button/button-large/button-large-primary/button-large-primary'; +import { ButtonLargeSecondary } from 'src/components/button/button-large/button-large-secondary/button-large-secondary'; +import { Divider } from 'src/components/divider/divider'; +import { HeaderTitle } from 'src/components/header/header-title/header-title'; +import { useNavigationSetOptions } from 'src/components/header/use-navigation-set-options.hook'; +import { Label } from 'src/components/label/label'; +import { ModalButtonsContainer } from 'src/components/modal-buttons-container/modal-buttons-container'; +import { ScreenContainer } from 'src/components/screen-container/screen-container'; +import { TextSegmentControl } from 'src/components/segmented-control/text-segment-control/text-segment-control'; +import { useDappRequestConfirmation } from 'src/hooks/request-confirmation/use-dapp-request-confirmation.hook'; +import { useParseSignPayload } from 'src/hooks/use-parse-sign-payload.hook'; +import { emptyAccount } from 'src/interfaces/account.interface'; +import { StacksEnum } from 'src/navigator/enums/stacks.enum'; +import { useNavigation } from 'src/navigator/hooks/use-navigation.hook'; +import { Shelter } from 'src/shelter/shelter'; +import { navigateAction } from 'src/store/root-state.actions'; +import { useAccountsListSelector } from 'src/store/wallet/wallet-selectors'; +import { formatSize } from 'src/styles/format-size'; +import { showSuccessToast } from 'src/toast/toast.utils'; import { isDefined } from 'src/utils/is-defined'; -import { BeaconHandler } from '../../../../beacon/beacon-handler'; -import { AccountDropdownItem } from '../../../../components/account-dropdown/account-dropdown-item/account-dropdown-item'; -import { ButtonLargePrimary } from '../../../../components/button/button-large/button-large-primary/button-large-primary'; -import { ButtonLargeSecondary } from '../../../../components/button/button-large/button-large-secondary/button-large-secondary'; -import { Divider } from '../../../../components/divider/divider'; -import { HeaderTitle } from '../../../../components/header/header-title/header-title'; -import { useNavigationSetOptions } from '../../../../components/header/use-navigation-set-options.hook'; -import { Label } from '../../../../components/label/label'; -import { ModalButtonsContainer } from '../../../../components/modal-buttons-container/modal-buttons-container'; -import { ScreenContainer } from '../../../../components/screen-container/screen-container'; -import { TextSegmentControl } from '../../../../components/segmented-control/text-segment-control/text-segment-control'; -import { useDappRequestConfirmation } from '../../../../hooks/request-confirmation/use-dapp-request-confirmation.hook'; -import { useParseSignPayload } from '../../../../hooks/use-parse-sign-payload.hook'; -import { emptyAccount } from '../../../../interfaces/account.interface'; -import { StacksEnum } from '../../../../navigator/enums/stacks.enum'; -import { useNavigation } from '../../../../navigator/hooks/use-navigation.hook'; -import { Shelter } from '../../../../shelter/shelter'; -import { navigateAction } from '../../../../store/root-state.actions'; -import { useAccountsListSelector } from '../../../../store/wallet/wallet-selectors'; -import { formatSize } from '../../../../styles/format-size'; -import { showSuccessToast } from '../../../../toast/toast.utils'; import { AppMetadataView } from '../app-metadata-view/app-metadata-view'; import { useSignPayloadRequestConfirmationStyles } from './sign-payload-request-confirmation.styles';