on master help sign in
add trezor support to auth token
commit89094fe26ae1c68b284cd88fc1ec652eed4bd492 authorLiam Fitzgerald <liam@urizen.co> dateFri 27 Mar 2020, 14:16 (7 years ago) parent2988d5f
3 files changed+30−3
src/lib/authToken.js+4 src/lib/trezor.js+15 src/views/Login/Trezor.js+11−3
src/lib/authToken.js+4
@@ -2,6 +2,7 @@ import * as secp256k1 from 'secp256k1';
22
33import { keccak256, WALLET_TYPES } from './wallet';
44import { ledgerSignMessage } from './ledger';
5+import { trezorSignMessage } from './trezor';
56
67const MESSAGE = 'Bridge Authentication Token';
78
@@ -41,6 +42,9 @@ export const getAuthToken = async ({
4142 const { v, r, s } = await ledgerSignMessage(MESSAGE, walletHdPath);
4243 return signatureToHex(v, r, s);
4344 }
45+ if (walletType === WALLET_TYPES.TREZOR) {
46+ return trezorSignMessage(MESSAGE, walletHdPath);
47+ }
4448
4549 const signature = signMessage(wallet.privateKey);
4650
src/lib/trezor.js+15
@@ -36,4 +36,19 @@ const trezorSignTransaction = async (txn, hdpath) => {
3636 return txn;
3737};
3838
39+export const trezorSignMessage = async (message, hdPath) => {
40+ const sig = await TrezorConnect.ethereumSignTransaction({
41+ path: hdPath,
42+ message,
43+ });
44+
45+ if (!sig.success) {
46+ throw new Error(sig.payload.error);
47+ }
48+
49+ const { signature } = sig.payload;
50+
51+ return signature;
52+};
53+
3954export { TREZOR_PATH, trezorSignTransaction };
src/views/Login/Trezor.js+11−3
@@ -8,9 +8,10 @@ import { Text, Grid, H5, CheckboxInput, SelectInput } from 'indigo-react';
88
99import { useWallet } from 'store/wallet';
1010
11−import { TREZOR_PATH } from 'lib/trezor';
11+import { TREZOR_PATH, trezorSignMessage } from 'lib/trezor';
1212import { WALLET_TYPES } from 'lib/wallet';
1313import useLoginView from 'lib/useLoginView';
14+import { getAuthToken } from 'lib/authToken';
1415
1516import {
1617 composeValidator,
@@ -35,7 +36,7 @@ const ACCOUNT_OPTIONS = times(20, i => ({
3536export default function Trezor({ className, goHome }) {
3637 useLoginView(WALLET_TYPES.TREZOR);
3738
38− const { setWallet, setWalletHdPath } = useWallet();
39+ const { setWallet, setWalletHdPath, setAuthToken } = useWallet();
3940
4041 const validate = useMemo(
4142 () =>
@@ -67,10 +68,17 @@ export default function Trezor({ className, goHome }) {
6768 const pub = secp256k1.publicKeyConvert(publicKey, true);
6869 const hd = bip32.fromPublicKey(pub, chainCode);
6970
71+ const authToken = await getAuthToken({
72+ wallet: hd,
73+ walletType: WALLET_TYPES.TREZOR,
74+ walletHdPath: values.hdPath,
75+ });
76+
77+ setAuthToken(authToken);
7078 setWallet(Just(hd));
7179 setWalletHdPath(values.hdPath);
7280 },
73− [setWallet, setWalletHdPath]
81+ [setAuthToken, setWallet, setWalletHdPath]
7482 );
7583
7684 const onValues = useCallback(({ valid, values, form }) => {