@dfns/sdk-keyimport-utils-nodejs 0.7.18 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/index.d.ts +9 -8
  2. package/index.js +38 -18
  3. package/package.json +7 -2
package/index.d.ts CHANGED
@@ -1,13 +1,14 @@
1
- import { ImportWalletBody, GetWalletResponse } from '@dfns/sdk/types/wallets';
1
+ import { ImportKeyBody, GetKeyResponse } from '@dfns/sdk/types/keys';
2
2
  import { ListSignersResponse } from '@dfns/sdk/types/signers';
3
3
  type Signer = ListSignersResponse['clusters'][number]['signers'][number];
4
- type KeyCurve = GetWalletResponse['signingKey']['curve'];
5
- declare const secp256k1KeySchemes: string[];
6
- type KeyScheme = typeof secp256k1KeySchemes[number];
7
- export declare const splitPrivateKeyForSigners: ({ signers, privateKey, keyCurve, keyScheme }: {
4
+ type KeyScheme = Exclude<GetKeyResponse['scheme'], 'DH'>;
5
+ type KeyCurve = GetKeyResponse['curve'];
6
+ export declare const splitPrivateKeyForSigners: ({ signers, keyScheme, keyCurve, privateKey, chainCode, masterKey, }: {
8
7
  signers: Signer[];
9
- privateKey: Uint8Array | Buffer;
10
8
  keyCurve: KeyCurve;
11
- keyScheme?: KeyScheme;
12
- }) => Pick<ImportWalletBody, "protocol" | "curve" | "minSigners" | "encryptedKeyShares">;
9
+ keyScheme: KeyScheme;
10
+ privateKey: Uint8Array | Buffer;
11
+ chainCode?: Uint8Array | Buffer;
12
+ masterKey?: boolean;
13
+ }) => Pick<ImportKeyBody, "curve" | "protocol" | "minSigners" | "encryptedKeyShares" | "masterKey">;
13
14
  export {};
package/index.js CHANGED
@@ -2,20 +2,33 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.splitPrivateKeyForSigners = void 0;
4
4
  const dfns_key_import_nodejs_1 = require("@dfns/dfns-key-import-nodejs");
5
- const secp256k1KeySchemes = ['Schnorr', 'ECDSA'];
6
- const getCurveAndProtocol = (keyCurve, keyScheme) => {
7
- if (keyScheme && (keyCurve !== 'secp256k1' || !secp256k1KeySchemes.includes(keyScheme))) {
8
- Error(`Unsupported key scheme for import: "${keyCurve}, ${keyScheme}"`);
9
- }
10
- switch (keyCurve) {
11
- case 'secp256k1':
12
- return { curve: dfns_key_import_nodejs_1.KeyCurve.Secp256k1, protocol: keyScheme === 'Schnorr' ? dfns_key_import_nodejs_1.KeyProtocol.FrostBitcoin : dfns_key_import_nodejs_1.KeyProtocol.Cggmp21 };
13
- case 'stark':
14
- return { curve: dfns_key_import_nodejs_1.KeyCurve.Stark, protocol: dfns_key_import_nodejs_1.KeyProtocol.Cggmp21 };
15
- case 'ed25519':
16
- return { curve: dfns_key_import_nodejs_1.KeyCurve.Ed25519, protocol: dfns_key_import_nodejs_1.KeyProtocol.Frost };
17
- default:
18
- throw Error(`Unsupported key curve for import: "${keyCurve}"`);
5
+ const getCurveAndProtocol = (scheme, curve) => {
6
+ if (scheme === 'ECDSA' && curve === 'secp256k1') {
7
+ return {
8
+ internalCurve: dfns_key_import_nodejs_1.KeyCurve.Secp256k1,
9
+ protocol: dfns_key_import_nodejs_1.KeyProtocol.Cggmp24,
10
+ };
11
+ }
12
+ else if (scheme === 'ECDSA' && curve === 'stark') {
13
+ return {
14
+ internalCurve: dfns_key_import_nodejs_1.KeyCurve.Stark,
15
+ protocol: dfns_key_import_nodejs_1.KeyProtocol.Cggmp24,
16
+ };
17
+ }
18
+ else if (scheme === 'EdDSA' && curve === 'ed25519') {
19
+ return {
20
+ internalCurve: dfns_key_import_nodejs_1.KeyCurve.Ed25519,
21
+ protocol: dfns_key_import_nodejs_1.KeyProtocol.Frost,
22
+ };
23
+ }
24
+ else if (scheme === 'Schnorr' && curve === 'secp256k1') {
25
+ return {
26
+ internalCurve: dfns_key_import_nodejs_1.KeyCurve.Secp256k1,
27
+ protocol: dfns_key_import_nodejs_1.KeyProtocol.FrostBitcoin,
28
+ };
29
+ }
30
+ else {
31
+ throw Error(`Unsupported key scheme for import: "${scheme}, ${curve}"`);
19
32
  }
20
33
  };
21
34
  const getSecretScalar = (privateKey, keyCurve) => {
@@ -26,17 +39,24 @@ const getSecretScalar = (privateKey, keyCurve) => {
26
39
  return dfns_key_import_nodejs_1.SecretScalar.fromBytesBE(privateKey);
27
40
  }
28
41
  };
29
- const splitPrivateKeyForSigners = ({ signers, privateKey, keyCurve, keyScheme }) => {
30
- const { curve, protocol } = getCurveAndProtocol(keyCurve, keyScheme);
42
+ const splitPrivateKeyForSigners = ({ signers, keyScheme, keyCurve, privateKey, chainCode, masterKey, }) => {
43
+ if (masterKey && !chainCode) {
44
+ throw Error('master key must have a chain code');
45
+ }
46
+ if (chainCode && !masterKey) {
47
+ throw Error('cannot import chain code if not master key');
48
+ }
49
+ const { internalCurve, protocol } = getCurveAndProtocol(keyScheme, keyCurve);
31
50
  // We set this as constant do not expose it, because Dfns API will only accept minSigners = 3 for now.
32
51
  const minSigners = 3;
33
52
  const secretScalar = getSecretScalar(privateKey, keyCurve);
34
- const result = (0, dfns_key_import_nodejs_1.buildKeyImportRequest)(secretScalar, dfns_key_import_nodejs_1.SignersInfo.new(signers), minSigners, protocol, curve);
53
+ const result = (0, dfns_key_import_nodejs_1.buildKeyImportRequest)(secretScalar, chainCode, dfns_key_import_nodejs_1.SignersInfo.new(signers), minSigners, protocol, internalCurve);
35
54
  return {
36
- curve: result.curve,
55
+ curve: keyCurve,
37
56
  protocol: result.protocol,
38
57
  minSigners: result.minSigners,
39
58
  encryptedKeyShares: result.encryptedKeyShares,
59
+ masterKey,
40
60
  };
41
61
  };
42
62
  exports.splitPrivateKeyForSigners = splitPrivateKeyForSigners;
package/package.json CHANGED
@@ -1,8 +1,13 @@
1
1
  {
2
2
  "name": "@dfns/sdk-keyimport-utils-nodejs",
3
- "version": "0.7.18",
3
+ "version": "0.8.0",
4
4
  "dependencies": {
5
- "@dfns/dfns-key-import-nodejs": "0.2.3"
5
+ "@dfns/dfns-key-import-nodejs": "0.4.0",
6
+ "buffer": "^6.0.3",
7
+ "cross-fetch": "^3.1.6"
8
+ },
9
+ "peerDependencies": {
10
+ "@dfns/sdk": "0.8.0"
6
11
  },
7
12
  "main": "./index.js",
8
13
  "type": "commonjs"