Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fixes bignumber cbor decoding #538

Merged
merged 30 commits into from
Jul 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
809ea38
Merge pull request #373 from GridPlus/dev
alex-miller-0 Apr 29, 2022
3be9142
Merge pull request #376 from GridPlus/dev
alex-miller-0 May 3, 2022
a6f124c
Merge pull request #379 from GridPlus/dev
alex-miller-0 May 3, 2022
2eebe30
Merge pull request #386 from GridPlus/dev
alex-miller-0 May 10, 2022
ba12dc5
Merge pull request #392 from GridPlus/dev
alex-miller-0 May 16, 2022
776adc9
Merge pull request #398 from GridPlus/dev
douglance May 17, 2022
9cba8af
Merge pull request #401 from GridPlus/dev
douglance May 19, 2022
7a1b3ab
Merge pull request #406 from GridPlus/dev
douglance Jun 1, 2022
021a52a
Merge pull request #409 from GridPlus/dev
douglance Jun 2, 2022
c8c14c3
Merge pull request #418 from GridPlus/dev
douglance Jun 23, 2022
347737f
Merge pull request #434 from GridPlus/dev
douglance Jul 6, 2022
b36495f
Merge pull request #440 from GridPlus/dev
alex-miller-0 Jul 19, 2022
1c44f5c
Merge pull request #442 from GridPlus/dev
alex-miller-0 Jul 19, 2022
fba1154
Merge pull request #448 from GridPlus/dev
douglance Aug 2, 2022
9958c0c
Merge pull request #455 from GridPlus/dev
alex-miller-0 Aug 18, 2022
c7219c6
Merge pull request #463 from GridPlus/dev
douglance Aug 23, 2022
71ab273
Merge pull request #470 from GridPlus/dev
netbonus Sep 23, 2022
b413e74
Merge pull request #472 from GridPlus/dev
netbonus Sep 23, 2022
8494183
Merge pull request #486 from GridPlus/dev
alex-miller-0 Nov 28, 2022
12a03c9
Merge pull request #498 from GridPlus/dev
alex-miller-0 Dec 2, 2022
ab0bac9
Merge pull request #502 from GridPlus/dev
alex-miller-0 Dec 7, 2022
e86b977
Merge pull request #513 from GridPlus/dev
alex-miller-0 Dec 15, 2022
d007ebb
Merge pull request #516 from GridPlus/dev
alex-miller-0 Dec 20, 2022
ba75842
Merge pull request #528 from GridPlus/dev
netbonus Feb 14, 2023
c68322c
Merge pull request #531 from GridPlus/dev
netbonus Mar 8, 2023
c4dd6f7
Merge pull request #534 from GridPlus/dev
alex-miller-0 May 1, 2023
8a8a1e3
fixes bignumber cbor decoding
netbonus Dec 8, 2023
68eb58c
Merge branch 'main' into dev
netbonus Jul 8, 2024
423e2d5
Restores files
netbonus Jul 8, 2024
3e04678
Merge branch 'dev' into fix-bignumber-decode
netbonus Jul 8, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 5 additions & 8 deletions src/__test__/e2e/eth.msg.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,9 @@
import { HARDENED_OFFSET } from '../../constants';
import { randomBytes } from '../../util';
import { buildEthMsgReq, buildRandomMsg } from '../utils/builders';
import { getN } from '../utils/getters';
import { initializeClient } from '../utils/initializeClient';
import { runEthMsg } from '../utils/runners';

const numRandom = getN() ? getN() : 20; // Number of random tests to conduct

describe('ETH Messages', () => {
const client = initializeClient();

Expand Down Expand Up @@ -101,8 +98,8 @@ describe('ETH Messages', () => {
).rejects.toThrow(/Invalid Request/);
});

describe(`Test ${numRandom} random payloads`, () => {
for (let i = 0; i < numRandom; i++) {
describe(`Test ${5} random payloads`, () => {
for (let i = 0; i < 5; i++) {
it(`Payload: ${i}`, async () => {
await runEthMsg(
buildEthMsgReq(
Expand Down Expand Up @@ -284,7 +281,7 @@ describe('ETH Messages', () => {
],
Order: [
{ name: 'sender', type: 'bytes32' },
{ name: 'priceX18', type: 'uint256' },
{ name: 'priceX18', type: 'int128' },
{ name: 'amount', type: 'int128' },
{ name: 'expiration', type: 'uint64' },
{ name: 'nonce', type: 'uint64' },
Expand Down Expand Up @@ -1296,8 +1293,8 @@ describe('ETH Messages', () => {
await runEthMsg(buildEthMsgReq(msg, 'eip712'), client);
});

describe(`test ${numRandom} random payloads`, () => {
for (let i = 0; i < numRandom; i++) {
describe('test 5 random payloads', () => {
for (let i = 0; i < 5; i++) {
it(`Payload #: ${i}`, async () => {
await runEthMsg(
buildEthMsgReq(buildRandomMsg('eip712', client), 'eip712'),
Expand Down
21 changes: 19 additions & 2 deletions src/ethereum.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ const validateEthereumMsgResponse = function (res, req) {
useEIP155: false,
});
} else if (input.protocol === 'eip712') {
req = convertBigNumbers(req);
const encoded = TypedDataUtils.eip712Hash(
req.input.payload,
SignTypedDataVersion.V4,
Expand All @@ -81,6 +82,22 @@ const validateEthereumMsgResponse = function (res, req) {
}
};

function convertBigNumbers(obj) {
if (BN.isBigNumber(obj)) {
return obj.toFixed();
} else if (Array.isArray(obj)) {
return obj.map(convertBigNumbers);
} else if (typeof obj === 'object' && obj !== null) {
const newObj = {};
for (const [key, value] of Object.entries(obj)) {
newObj[key] = convertBigNumbers(value);
}
return newObj;
} else {
return obj;
}
}

const buildEthereumTxRequest = function (data) {
try {
let { chainId = 1 } = data;
Expand Down Expand Up @@ -883,7 +900,7 @@ function parseEIP712Item(data, type, forJSParser = false) {
// TODO: Find another cbor lib that is compataible with the firmware's lib in a browser
// context. This is surprisingly difficult - I tried several libs and only cbor/borc have
// worked (borc is a supposedly "browser compatible" version of cbor)
data = new cbor.Encoder().semanticTypes[1][0](data);
data = new BN(data);
} else if (
ethMsgProtocol.TYPED_DATA.typeCodes[type] &&
(type.indexOf('uint') > -1 || type.indexOf('int') > -1)
Expand All @@ -902,7 +919,7 @@ function parseEIP712Item(data, type, forJSParser = false) {
data = `0x${b.toString('hex')}`;
} else {
// Load into bignumber.js used by cbor lib
data = new cbor.Encoder().semanticTypes[1][0](b.toString('hex'), 16);
data = new BN(b.toString('hex'), 16);
}
} else if (type === 'bool') {
// Booleans need to be cast to a u8
Expand Down
Loading