on master help sign in
add key recovery parameter to homegrown signatures
b578685Liam Fitzgerald
src/lib/authToken.js+19−5
@@ -4,14 +4,28 @@ import { keccak256, WALLET_TYPES } from './wallet';
4
4
5const MESSAGE = 'Bridge Authentication Token';
5const MESSAGE = 'Bridge Authentication Token';
6
6
7+function signMessage(privateKey) {
8+ const { signature } = secp256k1.sign(
9+ keccak256('\x19Ethereum Signed Message:\n' + MESSAGE.length + MESSAGE),
10+ privateKey
11+ );
12+ // add key recovery parameter
13+ const ethSignature = new Uint8Array(65);
14+ ethSignature.set(signature);
15+ const v = (ethSignature[32] & 1) + 27;
16+ ethSignature[64] = v;
17+
18+ return ethSignature;
19+}
20+
7export const getAuthToken = ({ wallet, walletType, walletHdPath, web3 }) => {
21export const getAuthToken = ({ wallet, walletType, walletHdPath, web3 }) => {
8 if (walletType === WALLET_TYPES.METAMASK) {
22 if (walletType === WALLET_TYPES.METAMASK) {
9 return web3.eth.personal.sign(MESSAGE, wallet.address, '');
23 return web3.eth.personal.sign(MESSAGE, wallet.address, '');
10 }
24 }
11− const { signature } = secp256k1.sign(
12− keccak256('\x19Ethereum Signed Message:\n' + MESSAGE.length + MESSAGE),
13− wallet.privateKey
14− );
15
25
26+ const signature = signMessage(wallet.privateKey);
27+
28+ const token = `0x${Buffer.from(signature).toString('hex')}`;
29+
16− return signature;
30+ return token;
17};
31};