Skip to content

Commit ea0d135

Browse files
authored
Merge branch 'master' into rel/latest
2 parents 40b0133 + 9801dda commit ea0d135

File tree

29 files changed

+154
-212
lines changed

29 files changed

+154
-212
lines changed

modules/bitgo/test/v2/unit/internal/tssUtils/ecdsa.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1674,7 +1674,7 @@ describe('TSS Ecdsa Utils:', async function () {
16741674
'!@#$^0c70545b519bb7bbc7195fd4b7d5bfc873bfd38b18596e4b47a05b6a88d552e2e8319cb31e279b99dbe54115a983d35e86679af96d81b7478d1df368f76a8'; // 129 chars
16751675
should(() =>
16761676
ECDSAUtils.EcdsaUtils.validateCommonKeychainPublicKey(commonKeychainWithInvalidCharacters)
1677-
).throwError('Unknown point format');
1677+
).throwError(/^Invalid commonKeychain, error:/);
16781678
});
16791679
});
16801680

modules/sdk-coin-apt/src/apt.ts

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -183,16 +183,6 @@ export class Apt extends BaseCoin {
183183
throw new Error('Method not implemented.');
184184
}
185185

186-
/** @inheritDoc */
187-
getGasTankLowBalanceAlertThresholdFactor(): number {
188-
return 200;
189-
}
190-
191-
/** @inheritDoc */
192-
getGasTankMinBalanceRecommendationFactor(): number {
193-
return 1000;
194-
}
195-
196186
private getBuilder(): TransactionBuilderFactory {
197187
return new TransactionBuilderFactory(coins.get(this.getChain()));
198188
}

modules/sdk-coin-apt/test/unit/apt.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,11 @@ describe('APT:', function () {
5757
apt.getFamily().should.equal('apt');
5858
apt.getFullName().should.equal('Aptos');
5959
apt.getBaseFactor().should.equal(1e8);
60-
apt.getGasTankLowBalanceAlertThresholdFactor().should.equal(200);
61-
apt.getGasTankMinBalanceRecommendationFactor().should.equal(1000);
6260

6361
tapt.getChain().should.equal('tapt');
6462
tapt.getFamily().should.equal('apt');
6563
tapt.getFullName().should.equal('Testnet Aptos');
6664
tapt.getBaseFactor().should.equal(1e8);
67-
tapt.getGasTankLowBalanceAlertThresholdFactor().should.equal(200);
68-
tapt.getGasTankMinBalanceRecommendationFactor().should.equal(1000);
6965
});
7066

7167
it('is valid pub', function () {

modules/sdk-coin-arbeth/test/unit/arbeth.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,6 @@ describe('Arbitrum', function () {
106106
arbeth.getFamily().should.equal('arbeth');
107107
arbeth.getFullName().should.equal('Arbitrum Ethereum (L2 Chain)');
108108
arbeth.getBaseFactor().should.equal(1e18);
109-
arbeth.getGasTankLowBalanceAlertThresholdFactor().should.equal(2);
110-
arbeth.getGasTankMinBalanceRecommendationFactor().should.equal(10);
111109
});
112110

113111
it('should return the right info for tarbeth', function () {
@@ -118,8 +116,6 @@ describe('Arbitrum', function () {
118116
tarbeth.getFamily().should.equal('arbeth');
119117
tarbeth.getFullName().should.equal('Testnet Arbitrum Ethereum (L2 Chain)');
120118
tarbeth.getBaseFactor().should.equal(1e18);
121-
tarbeth.getGasTankLowBalanceAlertThresholdFactor().should.equal(2);
122-
tarbeth.getGasTankMinBalanceRecommendationFactor().should.equal(10);
123119
});
124120
});
125121

modules/sdk-coin-avaxp/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,10 @@
5151
"@bitgo/sdk-core": "^29.0.0",
5252
"@bitgo/statics": "^51.0.1",
5353
"@bitgo/utxo-lib": "^11.2.2",
54+
"@noble/curves": "1.8.1",
5455
"avalanche": "3.15.3",
5556
"bignumber.js": "^9.0.0",
5657
"create-hash": "^1.2.0",
57-
"elliptic": "^6.6.1",
5858
"ethereumjs-util": "7.1.5",
5959
"lodash": "^4.17.14",
6060
"safe-buffer": "^5.2.1"

modules/sdk-coin-avaxp/src/lib/utils.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import { Signature } from 'avalanche/dist/common';
2222
import { Credential } from 'avalanche/dist/common/credentials';
2323
import { NodeIDStringToBuffer } from 'avalanche/dist/utils';
2424
import * as createHash from 'create-hash';
25-
import { ec } from 'elliptic';
25+
import { secp256k1 } from '@noble/curves/secp256k1';
2626
import { ADDRESS_SEPARATOR, DeprecatedOutput, DeprecatedTx, Output } from './iface';
2727

2828
export class Utils implements BaseUtils {
@@ -101,15 +101,12 @@ export class Utils implements BaseUtils {
101101
if (pub.length === 66 && firstByte !== '02' && firstByte !== '03') return false;
102102

103103
if (!this.allHexChars(pub)) return false;
104-
105104
pubBuf = BufferAvax.from(pub, 'hex');
106105
}
107106
// validate the public key
108-
const secp256k1 = new ec('secp256k1');
109107
try {
110-
const keyPair = secp256k1.keyFromPublic(pubBuf);
111-
const { result } = keyPair.validate();
112-
return result;
108+
secp256k1.ProjectivePoint.fromHex(pubBuf.toString('hex'));
109+
return true;
113110
} catch (e) {
114111
return false;
115112
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
const getTxListRequestNonBitGoRecovery: Record<string, string> = {
2+
module: 'account',
3+
action: 'txlist',
4+
sort: 'desc',
5+
address: '0x594886d686261172b95fae7401841843504f156b',
6+
};
7+
8+
const getTxListResponseNonBitGoRecovery: Record<string, unknown> = {
9+
status: '1',
10+
result: [
11+
{
12+
hash: '0xede855d43d70ea1bb75db63d4f75113dae0845f0d4bdb0b2d8bda55249c70812',
13+
nonce: '23',
14+
from: '0x594886d686261172b95fae7401841843504f156b',
15+
},
16+
],
17+
message: 'OK',
18+
};
19+
20+
const getBalanceRequestNonBitGoRecovery: Record<string, string> = {
21+
module: 'account',
22+
action: 'balance',
23+
address: '0x594886d686261172b95fae7401841843504f156b',
24+
};
25+
26+
const getBalanceResponseNonBitGoRecovery: Record<string, unknown> = {
27+
status: '1',
28+
result: 100000000000000000,
29+
message: 'OK',
30+
};
31+
32+
export const mockDataNonBitGoRecovery = {
33+
recoveryDestination: '0x224056675da79dac836c330704e9b091a7fc2e1c',
34+
userKeyData:
35+
'{"iv":"1j/pXswlTT5JEkqmopflwA==","v":1,"iter":10000,"ks":256,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"yA1ls3UYGwk=","ct":"DWf+iaYWSig20VhHWiNYurPyONJO4rAMC0Erxp06SUlLVdLAiD4bHsjNhh3t8OeuVQLlAkfqDBOufVV6DGFcRaBK5KE/mjON2XSIVk+GW8K/ZbdxYpvyFX2zKQtONUP4OXhSrKghgJb7nHCTWtHFPuP734IIKTA1s+iPp4Ojafd7nwXh9uKV5lfD8hSKKt6oWcAqGIeyTk2EUl948wbKdxECgXA3noGHGeDEd4i17VnR44gu9A7A2YB2hQamrn5u1T6uAbNJomYcvD2szzo3bqEi9vFA8WMrX6MYvmTlH21NM5KsxZPPSIHaBlBL/w1bnwgrC6qLEQChnWOIinVepUmWj+NQWkRADbyz9gJLQZtYIcOO1YOoNMKr96a/0zKoktjOrL4d6e617RSWyeOC+OMCtIwBw/LHaQyFzCtuwdtSaG6xoDJIkT0mW7AFX6veu6xK6DM2S2/dNrFlF2cT8a0KO+L4uiA5QcsznPiYv7uUmC2SbX2nskBd2xe6+TpF9VcMMYNk6P01YXj+w9zVUtZRNRv9ke8rMq0Tg8LdorfDqCS15TB86P5iSEOgjP4xXzw5s+5QVhO1Y+4RQuDFW7tDRto0XWZlY7jFg/ NJ7PXOipNPasFjBKHROhM9gq5V4sT5opjbetUHqFGaJC4sRY4HvO9Y+oxFk7khJkK40EFlQzvDCkmDOTjVv/fb5N2kJjq7IGeZTsEeFA90fogUM2DGvwnBB0icggHLS2px40/RHlK2jz3V1XQp5ecddhLzc38/lik9MUsmtTlK3VB5WjGfDRSLBZqy1hjsvKlvKTbpVkg937X/Wun62c4kquYzSJIHd0UanAKd5D7O+oIoUZR7FgpbDQoutRhVflDTyYpOq7tSJOrYbjA1qEJVWJqeFIKdfQ9ZboT9aFq3aGQxuk7mz9CyrKVRQfPBrjzEbW8mKCqpJLUshKXkcETnlNzSBbOuPokIRz+nM3rlYFevk4oiA418QdH3rK+gPQv4NkKHGcZlb3Vzro85seOZVqzgITXadXUznBG0/mYmY+Iqe1zHI1nDDGrxCqzpK4v31M2e7xyPu/kMHZYKNvM0k2jy"}',
36+
backupKeyData:
37+
'{"iv":"LYD8I6UEfqMEmFgwC/YR+w==","v":1,"iter":10000,"ks":256,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"IxVKifwPPWU=","ct":"qw+MmwAoinYPgyAbVKGbKDKFaNv+tyj9W1ird+MdVrLBurYoccf1wESdBpLVIIEaljXHZD/uxXSxOHtIjM4tUpnwajI5fSG0pYa2p048uN4K54tBtCJqj1W1jPyDVdaGEi6TheI5jGjKPEnI3J4ZPbQ7BfeT0WceIX3S9dT+VETug6vAf4axU8phIejCRuHgnvtErx/xiKH3zSDnc3oOSjHfoz0ujR/ZLtb4FRPaXujgRDISqoR4CtN7io3myq2NArzNsYi6PluD/jp80My+1jImIrmDqY+DVgGTDBAOz97eL9lXS2uiw3VuoPUSsQCdCrIjnhsq0BtL/W53eZbrXH565Bykm6L6DqJLJeVOrIMUAG/An1X9iUSqmHDFr7SW2z6NCy624vC3ulBRUcji44XHcmm4eVU1SgZDlzB00wBTNxHObIVJwWX8ZP33bYjeav3WBClXrC3b0CqEVzY7F3nLT8I6q1bb0WrRzB3blX7Avf0FylnUN0QbN1mQLUA01LZYof3+gPFCfDEzT/qX8EpgcxLpGgd8T4sj7RKjv0rHBZ462l1yh4lN2PqmZW/10UkyTYYqr0Jw3neYFHQTLoS2FqBNkftyBYkO8eiVXvbeaHuCugiDBB963cNR3nE1a6UqHH1Ime1K6chAoUZlq5arfT3OPR4lPpWXXwigznNcUMMJVQhGVJI1siEOXR1b78fe12VTD1PKhRQC5J9UvE3nBRoXoEWkj1b3/UQfUF6ITQQYDg8lZYKdRYyOlrQDS56oVI1HF8uR0+IQSbtshWSw4OrN6FPHf6ZuhcwX3PSvZwXpNVndxKII8pgFAn0SyQAFsWVY/4OKCO/O+PJkg7ODcJo/S9BAqcxmInBWgnaLMEhCGl77xVELW/B8wVOEVC3ApGtQsjg1CQg/PWsJY5EDkVykejiRTZyim9C84hZSL6bSpDCGOWnEEkI1U9gQlE0kkj1ZBQpe7xxOJ7jhWqNC800orDNsSIdOlDvD/SXX1zHf88aby9VNkUUwb6D9cUItuVkL4gllk/7aTnt0UIoiy8X6Z3w3z3tQi4i9pEZNeM3kG0nlQX12Q7788YNR"}',
38+
walletRootAddress: '0x594886d686261172b95fae7401841843504f156b',
39+
walletPassphrase: 'test_1234_test',
40+
getTxListRequest: getTxListRequestNonBitGoRecovery,
41+
getTxListResponse: getTxListResponseNonBitGoRecovery,
42+
getBalanceRequest: getBalanceRequestNonBitGoRecovery,
43+
getBalanceResponse: getBalanceResponseNonBitGoRecovery,
44+
};

modules/sdk-coin-coredao/test/unit/coredao.ts

Lines changed: 18 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ import * as should from 'should';
33
import { TestBitGo, TestBitGoAPI } from '@bitgo/sdk-test';
44
import { BitGoAPI } from '@bitgo/sdk-api';
55

6-
import { Coredao, Tcoredao } from '../../src/index';
6+
import { Coredao, Tcoredao } from '../../src';
77
import nock from 'nock';
88

99
import { FeeMarketEIP1559Transaction } from '@ethereumjs/tx';
1010
import { stripHexPrefix } from '@ethereumjs/util';
11+
import { common } from '@bitgo/sdk-core';
12+
import { mockDataNonBitGoRecovery } from '../resources';
1113

1214
const bitgo: TestBitGoAPI = TestBitGo.decorate(BitGoAPI, { env: 'test' });
1315

@@ -46,67 +48,26 @@ describe('Coredao', function () {
4648

4749
describe('Build Recover Transaction', function () {
4850
const bitgo = TestBitGo.decorate(BitGoAPI, { env: 'test' });
49-
const getTxListRequest: Record<string, string> = {
50-
module: 'account',
51-
action: 'txlist',
52-
sort: 'desc',
53-
address: '0x594886d686261172b95fae7401841843504f156b',
54-
};
55-
56-
const getTxListResponse: Record<string, unknown> = {
57-
status: '1',
58-
result: [
59-
{
60-
hash: '0xede855d43d70ea1bb75db63d4f75113dae0845f0d4bdb0b2d8bda55249c70812',
61-
nonce: '23',
62-
from: '0x594886d686261172b95fae7401841843504f156b',
63-
},
64-
],
65-
message: 'OK',
66-
};
67-
68-
const getBalanceRequest: Record<string, string> = {
69-
module: 'account',
70-
action: 'balance',
71-
address: '0x594886d686261172b95fae7401841843504f156b',
72-
};
73-
74-
const getBalanceResponse: Record<string, unknown> = {
75-
status: '1',
76-
result: 100000000000000000,
77-
message: 'OK',
78-
};
79-
80-
const mockData = {
81-
recoveryDestination: '0x224056675da79dac836c330704e9b091a7fc2e1c',
82-
userKeyData:
83-
'{"iv":"1j/pXswlTT5JEkqmopflwA==","v":1,"iter":10000,"ks":256,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"yA1ls3UYGwk=","ct":"DWf+iaYWSig20VhHWiNYurPyONJO4rAMC0Erxp06SUlLVdLAiD4bHsjNhh3t8OeuVQLlAkfqDBOufVV6DGFcRaBK5KE/mjON2XSIVk+GW8K/ZbdxYpvyFX2zKQtONUP4OXhSrKghgJb7nHCTWtHFPuP734IIKTA1s+iPp4Ojafd7nwXh9uKV5lfD8hSKKt6oWcAqGIeyTk2EUl948wbKdxECgXA3noGHGeDEd4i17VnR44gu9A7A2YB2hQamrn5u1T6uAbNJomYcvD2szzo3bqEi9vFA8WMrX6MYvmTlH21NM5KsxZPPSIHaBlBL/w1bnwgrC6qLEQChnWOIinVepUmWj+NQWkRADbyz9gJLQZtYIcOO1YOoNMKr96a/0zKoktjOrL4d6e617RSWyeOC+OMCtIwBw/LHaQyFzCtuwdtSaG6xoDJIkT0mW7AFX6veu6xK6DM2S2/dNrFlF2cT8a0KO+L4uiA5QcsznPiYv7uUmC2SbX2nskBd2xe6+TpF9VcMMYNk6P01YXj+w9zVUtZRNRv9ke8rMq0Tg8LdorfDqCS15TB86P5iSEOgjP4xXzw5s+5QVhO1Y+4RQuDFW7tDRto0XWZlY7jFg/ NJ7PXOipNPasFjBKHROhM9gq5V4sT5opjbetUHqFGaJC4sRY4HvO9Y+oxFk7khJkK40EFlQzvDCkmDOTjVv/fb5N2kJjq7IGeZTsEeFA90fogUM2DGvwnBB0icggHLS2px40/RHlK2jz3V1XQp5ecddhLzc38/lik9MUsmtTlK3VB5WjGfDRSLBZqy1hjsvKlvKTbpVkg937X/Wun62c4kquYzSJIHd0UanAKd5D7O+oIoUZR7FgpbDQoutRhVflDTyYpOq7tSJOrYbjA1qEJVWJqeFIKdfQ9ZboT9aFq3aGQxuk7mz9CyrKVRQfPBrjzEbW8mKCqpJLUshKXkcETnlNzSBbOuPokIRz+nM3rlYFevk4oiA418QdH3rK+gPQv4NkKHGcZlb3Vzro85seOZVqzgITXadXUznBG0/mYmY+Iqe1zHI1nDDGrxCqzpK4v31M2e7xyPu/kMHZYKNvM0k2jy"}',
84-
backupKeyData:
85-
'{"iv":"LYD8I6UEfqMEmFgwC/YR+w==","v":1,"iter":10000,"ks":256,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"IxVKifwPPWU=","ct":"qw+MmwAoinYPgyAbVKGbKDKFaNv+tyj9W1ird+MdVrLBurYoccf1wESdBpLVIIEaljXHZD/uxXSxOHtIjM4tUpnwajI5fSG0pYa2p048uN4K54tBtCJqj1W1jPyDVdaGEi6TheI5jGjKPEnI3J4ZPbQ7BfeT0WceIX3S9dT+VETug6vAf4axU8phIejCRuHgnvtErx/xiKH3zSDnc3oOSjHfoz0ujR/ZLtb4FRPaXujgRDISqoR4CtN7io3myq2NArzNsYi6PluD/jp80My+1jImIrmDqY+DVgGTDBAOz97eL9lXS2uiw3VuoPUSsQCdCrIjnhsq0BtL/W53eZbrXH565Bykm6L6DqJLJeVOrIMUAG/An1X9iUSqmHDFr7SW2z6NCy624vC3ulBRUcji44XHcmm4eVU1SgZDlzB00wBTNxHObIVJwWX8ZP33bYjeav3WBClXrC3b0CqEVzY7F3nLT8I6q1bb0WrRzB3blX7Avf0FylnUN0QbN1mQLUA01LZYof3+gPFCfDEzT/qX8EpgcxLpGgd8T4sj7RKjv0rHBZ462l1yh4lN2PqmZW/10UkyTYYqr0Jw3neYFHQTLoS2FqBNkftyBYkO8eiVXvbeaHuCugiDBB963cNR3nE1a6UqHH1Ime1K6chAoUZlq5arfT3OPR4lPpWXXwigznNcUMMJVQhGVJI1siEOXR1b78fe12VTD1PKhRQC5J9UvE3nBRoXoEWkj1b3/UQfUF6ITQQYDg8lZYKdRYyOlrQDS56oVI1HF8uR0+IQSbtshWSw4OrN6FPHf6ZuhcwX3PSvZwXpNVndxKII8pgFAn0SyQAFsWVY/4OKCO/O+PJkg7ODcJo/S9BAqcxmInBWgnaLMEhCGl77xVELW/B8wVOEVC3ApGtQsjg1CQg/PWsJY5EDkVykejiRTZyim9C84hZSL6bSpDCGOWnEEkI1U9gQlE0kkj1ZBQpe7xxOJ7jhWqNC800orDNsSIdOlDvD/SXX1zHf88aby9VNkUUwb6D9cUItuVkL4gllk/7aTnt0UIoiy8X6Z3w3z3tQi4i9pEZNeM3kG0nlQX12Q7788YNR"}',
86-
walletRootAddress: '0x594886d686261172b95fae7401841843504f156b',
87-
walletPassphrase: 'test_1234_test',
88-
explorerUrl: 'https://app.test.btcs.network',
89-
getTxListRequest: getTxListRequest,
90-
getTxListResponse: getTxListResponse,
91-
getBalanceRequest: getBalanceRequest,
92-
getBalanceResponse: getBalanceResponse,
93-
};
51+
const explorerUrl = common.Environments[bitgo.getEnv()].coredaoExplorerBaseUrl as string;
9452

9553
it('should generate a signed non-bitgo recovery tx', async () => {
96-
nock(mockData.explorerUrl)
54+
nock(explorerUrl)
9755
.get('/api')
9856
.twice()
99-
.query(mockData.getTxListRequest)
100-
.reply(200, mockData.getTxListResponse);
101-
nock(mockData.explorerUrl).get('/api').query(mockData.getBalanceRequest).reply(200, mockData.getBalanceResponse);
57+
.query(mockDataNonBitGoRecovery.getTxListRequest)
58+
.reply(200, mockDataNonBitGoRecovery.getTxListResponse);
59+
nock(explorerUrl)
60+
.get('/api')
61+
.query(mockDataNonBitGoRecovery.getBalanceRequest)
62+
.reply(200, mockDataNonBitGoRecovery.getBalanceResponse);
10263

10364
const baseCoin: any = bitgo.coin('tcoredao');
10465
const transaction = await baseCoin.recover({
105-
userKey: mockData.userKeyData,
106-
backupKey: mockData.backupKeyData,
107-
walletContractAddress: mockData.walletRootAddress,
108-
walletPassphrase: mockData.walletPassphrase,
109-
recoveryDestination: mockData.recoveryDestination,
66+
userKey: mockDataNonBitGoRecovery.userKeyData,
67+
backupKey: mockDataNonBitGoRecovery.backupKeyData,
68+
walletContractAddress: mockDataNonBitGoRecovery.walletRootAddress,
69+
walletPassphrase: mockDataNonBitGoRecovery.walletPassphrase,
70+
recoveryDestination: mockDataNonBitGoRecovery.recoveryDestination,
11071
isTss: true,
11172
eip1559: { maxFeePerGas: 20000000000, maxPriorityFeePerGas: 10000000000 },
11273
gasLimit: 500000,
@@ -119,10 +80,10 @@ describe('Coredao', function () {
11980
transaction.should.have.property('id');
12081
transaction.should.have.property('tx');
12182
const tx = FeeMarketEIP1559Transaction.fromSerializedTx(Buffer.from(stripHexPrefix(transaction.tx), 'hex'));
122-
tx.getSenderAddress().toString().should.equal(mockData.walletRootAddress);
83+
tx.getSenderAddress().toString().should.equal(mockDataNonBitGoRecovery.walletRootAddress);
12384
const jsonTx = tx.toJSON();
12485
jsonTx.chainId?.should.equal('0x45a');
125-
jsonTx.to?.should.equal(mockData.recoveryDestination);
86+
jsonTx.to?.should.equal(mockDataNonBitGoRecovery.recoveryDestination);
12687
});
12788
});
12889
});

modules/sdk-coin-icp/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@
4646
"@dfinity/agent": "^2.2.0",
4747
"@dfinity/candid": "^2.2.0",
4848
"@dfinity/principal": "^2.2.0",
49-
"crc-32": "^1.2.2",
50-
"elliptic": "^6.6.1"
49+
"@noble/curves": "1.8.1",
50+
"crc-32": "^1.2.2"
5151
},
5252
"devDependencies": {
5353
"@bitgo/sdk-api": "^1.58.9",

modules/sdk-coin-icp/src/lib/utils.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
import { BaseUtils, KeyPair } from '@bitgo/sdk-core';
2-
import elliptic from 'elliptic';
2+
import { secp256k1 } from '@noble/curves/secp256k1';
33
import { Principal as DfinityPrincipal } from '@dfinity/principal';
44
import * as agent from '@dfinity/agent';
55
import crypto from 'crypto';
66
import crc32 from 'crc-32';
77
import { KeyPair as IcpKeyPair } from './keyPair';
88

9-
const Secp256k1Curve = new elliptic.ec('secp256k1');
10-
119
export class Utils implements BaseUtils {
1210
isValidAddress(address: string): boolean {
1311
throw new Error('Method not implemented.');
@@ -102,11 +100,9 @@ export class Utils implements BaseUtils {
102100
}
103101

104102
derivePrincipalFromPublicKey(publicKeyHex: string): DfinityPrincipal {
105-
const publicKeyBuffer = Buffer.from(publicKeyHex, 'hex');
106-
107103
try {
108-
const ellipticKey = Secp256k1Curve.keyFromPublic(publicKeyBuffer);
109-
const uncompressedPublicKeyHex = ellipticKey.getPublic(false, 'hex');
104+
const point = secp256k1.ProjectivePoint.fromHex(publicKeyHex);
105+
const uncompressedPublicKeyHex = point.toHex(false);
110106
const derEncodedKey = agent.wrapDER(Buffer.from(uncompressedPublicKeyHex, 'hex'), agent.SECP256K1_OID);
111107
const principalId = DfinityPrincipal.selfAuthenticating(Buffer.from(derEncodedKey));
112108
const principal = DfinityPrincipal.fromUint8Array(principalId.toUint8Array());

0 commit comments

Comments
 (0)