Skip to content

Commit 09a7ce9

Browse files
Merge pull request #7209 from BitGo/BTC-2668.use-secp256k1-instead-of-utxolib
feat(utxo-lib): standardize secp256k1 cryptography implementation
2 parents 604af69 + ceed183 commit 09a7ce9

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+100
-267
lines changed

modules/abstract-utxo/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
]
4343
},
4444
"dependencies": {
45+
"@bitgo/secp256k1": "^1.5.0",
4546
"@bitgo/blockapis": "^1.12.0",
4647
"@bitgo/sdk-api": "^1.70.1",
4748
"@bitgo/sdk-core": "^36.12.0",

modules/abstract-utxo/src/abstractUtxoCoin.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ import { randomBytes } from 'crypto';
33

44
import _ from 'lodash';
55
import * as utxolib from '@bitgo/utxo-lib';
6-
import { bip32, bitgo, getMainnet, isMainnet, isTestnet } from '@bitgo/utxo-lib';
6+
import { bip32 } from '@bitgo/secp256k1';
7+
import { bitgo, getMainnet, isMainnet, isTestnet } from '@bitgo/utxo-lib';
78
import {
89
AddressCoinSpecific,
910
AddressTypeChainMismatchError,
@@ -46,7 +47,6 @@ import {
4647
Wallet,
4748
isValidPrv,
4849
isValidXprv,
49-
bitcoin,
5050
} from '@bitgo/sdk-core';
5151

5252
import {
@@ -1160,7 +1160,7 @@ export abstract class AbstractUtxoCoin extends BaseCoin {
11601160
throw new Error('invalid private key');
11611161
}
11621162
if (publicKey) {
1163-
const genPubKey = bitcoin.HDNode.fromBase58(prv).neutered().toBase58();
1163+
const genPubKey = bip32.fromBase58(prv).neutered().toBase58();
11641164
if (genPubKey !== publicKey) {
11651165
throw new Error('public key does not match private key');
11661166
}

modules/abstract-utxo/src/descriptor/builder/parse.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { BIP32Interface } from '@bitgo/utxo-lib';
2-
import * as utxolib from '@bitgo/utxo-lib';
1+
import { BIP32Interface, bip32 } from '@bitgo/secp256k1';
32
import { Descriptor } from '@bitgo/wasm-miniscript';
43

54
import { DescriptorBuilder, getDescriptorFromBuilder } from './builder';
@@ -55,7 +54,7 @@ function parseMulti(node: unknown): {
5554
});
5655
return {
5756
threshold,
58-
keys: keyWithPath.map((k) => utxolib.bip32.fromBase58(k.xpub)),
57+
keys: keyWithPath.map((k) => bip32.fromBase58(k.xpub)),
5958
path: paths[0],
6059
};
6160
}

modules/abstract-utxo/src/descriptor/createWallet/createDescriptorWallet.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { BitGoAPI } from '@bitgo/sdk-api';
2-
import * as utxolib from '@bitgo/utxo-lib';
2+
import { bip32 } from '@bitgo/secp256k1';
33
import { Wallet } from '@bitgo/sdk-core';
44

55
import { AbstractUtxoCoin } from '../../abstractUtxoCoin';
@@ -56,12 +56,12 @@ export async function createDescriptorWalletWithWalletPassphrase(
5656
if (!userKeychain.prv) {
5757
throw new Error('Missing private key');
5858
}
59-
const userKey = utxolib.bip32.fromBase58(userKeychain.prv);
59+
const userKey = bip32.fromBase58(userKeychain.prv);
6060
const cosigners = [backupKeychain, bitgoKeychain].map((keychain) => {
6161
if (!keychain.pub) {
6262
throw new Error('Missing public key');
6363
}
64-
return utxolib.bip32.fromBase58(keychain.pub);
64+
return bip32.fromBase58(keychain.pub);
6565
});
6666
return createDescriptorWallet(bitgo, coin, {
6767
...params,

modules/abstract-utxo/src/keychains.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import assert from 'assert';
22

33
import * as t from 'io-ts';
4-
import * as utxolib from '@bitgo/utxo-lib';
4+
import { BIP32Interface, bip32 } from '@bitgo/secp256k1';
55
import { IRequestTracer, IWallet, KeyIndices, promiseProps, Triple } from '@bitgo/sdk-core';
66

77
import { AbstractUtxoCoin } from './abstractUtxoCoin';
@@ -48,12 +48,12 @@ export function toKeychainTriple(keychains: UtxoNamedKeychains): Triple<UtxoKeyc
4848

4949
export function toBip32Triple(
5050
keychains: UtxoNamedKeychains | Triple<{ pub: string }> | Triple<string>
51-
): Triple<utxolib.BIP32Interface> {
51+
): Triple<BIP32Interface> {
5252
if (Array.isArray(keychains)) {
5353
return keychains.map((keychain: { pub: string } | string) => {
5454
const v = typeof keychain === 'string' ? keychain : keychain.pub;
55-
return utxolib.bip32.fromBase58(v);
56-
}) as Triple<utxolib.BIP32Interface>;
55+
return bip32.fromBase58(v);
56+
}) as Triple<BIP32Interface>;
5757
}
5858

5959
return toBip32Triple(toKeychainTriple(keychains));

modules/abstract-utxo/src/offlineVault/OfflineVaultHalfSigned.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1+
import { BIP32Interface, bip32 } from '@bitgo/secp256k1';
12
import * as utxolib from '@bitgo/utxo-lib';
2-
import { BIP32Interface } from '@bitgo/utxo-lib';
33
import { BaseCoin } from '@bitgo/sdk-core';
44

55
import { getNetworkFromChain } from '../names';
@@ -23,7 +23,7 @@ export function createHalfSigned(
2323
): OfflineVaultHalfSigned {
2424
const network = getNetworkFromChain(coin);
2525
if (typeof prv === 'string') {
26-
prv = utxolib.bip32.fromBase58(prv);
26+
prv = bip32.fromBase58(prv);
2727
}
2828
prv = BaseCoin.deriveKeyWithSeedBip32(prv, derivationId).key;
2929
if (!OfflineVaultSignable.is(tx)) {

modules/abstract-utxo/src/offlineVault/OfflineVaultSignable.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as utxolib from '@bitgo/utxo-lib';
1+
import { BIP32Interface, bip32 } from '@bitgo/secp256k1';
22
import { Triple } from '@bitgo/sdk-core';
33
import * as t from 'io-ts';
44

@@ -28,8 +28,8 @@ export type OfflineVaultUnsigned = t.TypeOf<typeof OfflineVaultSignable>;
2828

2929
type WithXpub = { xpub: string };
3030
type NamedKeys = { user: WithXpub; backup: WithXpub; bitgo: WithXpub };
31-
export function toKeyTriple(xpubs: NamedKeys): Triple<utxolib.BIP32Interface> {
31+
export function toKeyTriple(xpubs: NamedKeys): Triple<BIP32Interface> {
3232
return [xpubs.user.xpub, xpubs.backup.xpub, xpubs.bitgo.xpub].map((xpub) =>
33-
utxolib.bip32.fromBase58(xpub)
34-
) as Triple<utxolib.BIP32Interface>;
33+
bip32.fromBase58(xpub)
34+
) as Triple<BIP32Interface>;
3535
}

modules/abstract-utxo/src/recovery/crossChainRecovery.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as utxolib from '@bitgo/utxo-lib';
2-
import { bip32, BIP32Interface } from '@bitgo/utxo-lib';
2+
import { BIP32Interface, bip32 } from '@bitgo/secp256k1';
33
import { Dimensions } from '@bitgo/unspents';
44
import { BitGoBase, IWallet, Keychain, Triple, Wallet } from '@bitgo/sdk-core';
55
import { decrypt } from '@bitgo/sdk-api';

modules/abstract-utxo/src/transaction/fixedScript/explainTransaction.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import * as utxolib from '@bitgo/utxo-lib';
22
import { bip322 } from '@bitgo/utxo-core';
3-
import { bip32, BIP32Interface, bitgo } from '@bitgo/utxo-lib';
3+
import { BIP32Interface, bip32 } from '@bitgo/secp256k1';
4+
import { bitgo } from '@bitgo/utxo-lib';
45
import { Triple } from '@bitgo/sdk-core';
56
import * as utxocore from '@bitgo/utxo-core';
67

@@ -302,7 +303,7 @@ export function explainPsbt<TNumber extends number | bigint, Tx extends bitgo.Ut
302303
utxocore.paygo.verifyPayGoAddressProof(
303304
psbt,
304305
payGoVerificationInfo.outputIndex,
305-
utxolib.bip32.fromBase58(payGoVerificationInfo.verificationPubkey, utxolib.networks.bitcoin).publicKey
306+
bip32.fromBase58(payGoVerificationInfo.verificationPubkey, utxolib.networks.bitcoin).publicKey
306307
);
307308
} catch (e) {
308309
if (strict) {

modules/abstract-utxo/src/transaction/fixedScript/signTransaction.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import assert from 'assert';
22

33
import _ from 'lodash';
4-
import { bip32, BIP32Interface, bitgo } from '@bitgo/utxo-lib';
4+
import { BIP32Interface, bip32 } from '@bitgo/secp256k1';
5+
import { bitgo } from '@bitgo/utxo-lib';
56
import * as utxolib from '@bitgo/utxo-lib';
67
import { isTriple, Triple } from '@bitgo/sdk-core';
78

0 commit comments

Comments
 (0)