@ocap/wallet 1.19.0 → 1.19.2

Sign up to get free protection for your applications and to get access to all the features.
package/esm/index.d.ts ADDED
@@ -0,0 +1,89 @@
1
+ import { EncodingType, BytesType } from '@ocap/util';
2
+ import { DidType, DIDType, DIDTypeStr, DIDTypeArg } from '@arcblock/did';
3
+ type KeyPairType<T extends BytesType = string> = {
4
+ sk?: T;
5
+ pk?: T;
6
+ address?: string;
7
+ };
8
+ export type SerializedWallet = {
9
+ type: DIDTypeStr;
10
+ pk: string;
11
+ sk: string;
12
+ address: string;
13
+ };
14
+ export interface WalletObject<T extends BytesType = string> {
15
+ type: DIDType;
16
+ secretKey: T;
17
+ publicKey: T;
18
+ address: string;
19
+ hash(data: BytesType, round?: number, encoding?: 'hex'): string;
20
+ hash(data: BytesType, round?: number, encoding?: 'base16'): string;
21
+ hash(data: BytesType, round?: number, encoding?: 'base58'): string;
22
+ hash(data: BytesType, round?: number, encoding?: 'base64'): string;
23
+ hash(data: BytesType, round?: number, encoding?: 'buffer'): Buffer;
24
+ hash(data: BytesType, round?: number, encoding?: 'Uint8Array'): Uint8Array;
25
+ hash(data: BytesType, round?: number, encoding?: EncodingType): BytesType;
26
+ sign(data: BytesType, hashBeforeSign?: boolean, encoding?: 'hex'): string;
27
+ sign(data: BytesType, hashBeforeSign?: boolean, encoding?: 'base16'): string;
28
+ sign(data: BytesType, hashBeforeSign?: boolean, encoding?: 'base58'): string;
29
+ sign(data: BytesType, hashBeforeSign?: boolean, encoding?: 'base64'): string;
30
+ sign(data: BytesType, hashBeforeSign?: boolean, encoding?: 'buffer'): Buffer;
31
+ sign(data: BytesType, hashBeforeSign?: boolean, encoding?: 'Uint8Array'): Uint8Array;
32
+ sign(data: BytesType, hashBeforeSign?: boolean, encoding?: EncodingType): BytesType;
33
+ verify(data: BytesType, signature: BytesType, hashBeforeVerify?: boolean, extra?: any): Promise<boolean>;
34
+ ethHash(data: string): string;
35
+ ethSign(data: string, hashBeforeSign?: boolean): string;
36
+ ethVerify(data: string, signature: string, hashBeforeVerify?: boolean): boolean;
37
+ toJSON(): SerializedWallet;
38
+ /**
39
+ * @deprecated ES6: use `wallet.address` instead
40
+ */
41
+ toAddress(): string;
42
+ }
43
+ export declare const WalletType: typeof DidType;
44
+ /**
45
+ * Generate an wallet instance that can be used to sign a message or verify a signature
46
+ */
47
+ export declare function Wallet<T extends BytesType = string>(keyPair: KeyPairType<T>, t?: DIDTypeArg): WalletObject<T>;
48
+ /**
49
+ * Generate a wallet from secretKey
50
+ *
51
+ * @example
52
+ * const assert = require('assert');
53
+ * const { fromSecretKey } = require('@ocap/wallet');
54
+ *
55
+ * const sk =
56
+ * '0xD67C071B6F51D2B61180B9B1AA9BE0DD0704619F0E30453AB4A592B036EDE644E4852B7091317E3622068E62A5127D1FB0D4AE2FC50213295E10652D2F0ABFC7';
57
+ * const sig =
58
+ * '0x08a102851c38c072e42756c1cc70938b5499c8e9358dfe5f383823f56cdb282ffda60fcd581a02c6c673069e5afc0bf09abbe3639b61b84d64fd58ef9f083003';
59
+ *
60
+ * const wallet = fromSecretKey(sk, type);
61
+ * const message = 'data to sign';
62
+ * const signature = wallet.sign(message);
63
+ * assert.equal(signature, sig, "signature should match");
64
+ * assert.ok(wallet.verify(message, signature), "signature should be verified");
65
+ */
66
+ export declare function fromSecretKey<T extends BytesType = string>(sk: T, _type?: DIDTypeArg): WalletObject<T>;
67
+ /**
68
+ * Generate a wallet from publicKey
69
+ */
70
+ export declare function fromPublicKey<T extends BytesType = string>(pk: T, _type?: DIDTypeArg): WalletObject<T>;
71
+ /**
72
+ * Generate a wallet from address (did)
73
+ *
74
+ * Since we do not know the publicKey and secretKey, this kind of wallet cannot be used for signing and verifying
75
+ */
76
+ export declare function fromAddress<T extends BytesType = string>(address: string): WalletObject<T>;
77
+ /**
78
+ * Generate a wallet by generating a random secretKey
79
+ */
80
+ export declare function fromRandom<T extends BytesType = string>(_type?: DIDTypeArg): WalletObject<T>;
81
+ /**
82
+ * Generating a wallet from a serialized json presentation of another wallet
83
+ */
84
+ export declare function fromJSON<T extends BytesType = string>(json: SerializedWallet): WalletObject<T>;
85
+ /**
86
+ * Check if an object is valid wallet object
87
+ */
88
+ export declare function isValid(wallet: WalletObject, canSign?: boolean): boolean;
89
+ export {};
package/esm/index.js ADDED
@@ -0,0 +1,161 @@
1
+ import { toHex } from '@ocap/util';
2
+ import { getSigner, getHasher } from '@ocap/mcrypto';
3
+ import { toAddress, fromPublicKey as DIDFromPublicKey, toTypeInfo, DidType, } from '@arcblock/did';
4
+ export const WalletType = DidType;
5
+ /**
6
+ * Generate an wallet instance that can be used to sign a message or verify a signature
7
+ */
8
+ export function Wallet(keyPair, t = 'default') {
9
+ const type = DidType(t);
10
+ const signer = getSigner(type.pk);
11
+ const hasher = getHasher(type.hash);
12
+ return {
13
+ type,
14
+ secretKey: keyPair.sk,
15
+ publicKey: keyPair.pk,
16
+ address: keyPair.pk ? DIDFromPublicKey(keyPair.pk, type) : keyPair.address,
17
+ // @ts-ignore
18
+ hash(data, round = 1, encoding = 'hex') {
19
+ return hasher(data, round, encoding);
20
+ },
21
+ // @ts-ignore
22
+ sign(data, hashBeforeSign = true, encoding = 'hex') {
23
+ if (!keyPair.sk) {
24
+ throw new Error('Cannot sign data without a secretKey');
25
+ }
26
+ if (hashBeforeSign) {
27
+ const hash = hasher(data, 1);
28
+ return signer.sign(hash, keyPair.sk, encoding);
29
+ }
30
+ return signer.sign(data, keyPair.sk, encoding);
31
+ },
32
+ // eslint-disable-next-line require-await
33
+ async verify(data, signature, hashBeforeVerify = true, extra) {
34
+ if (!keyPair.pk) {
35
+ throw new Error('Cannot verify data without a publicKey');
36
+ }
37
+ const hash = hashBeforeVerify ? hasher(data, 1) : data;
38
+ return signer.verify(hash, signature, keyPair.pk, extra);
39
+ },
40
+ ethHash(data) {
41
+ if (typeof signer.ethHash !== 'function') {
42
+ throw new Error('ethHash is not supported by signer');
43
+ }
44
+ return signer.ethHash(data);
45
+ },
46
+ ethSign(data, hashBeforeSign = true) {
47
+ if (!keyPair.sk) {
48
+ throw new Error('Cannot sign data without a secretKey');
49
+ }
50
+ if (typeof signer.ethHash !== 'function') {
51
+ throw new Error('ethSign is not supported by signer');
52
+ }
53
+ if (hashBeforeSign) {
54
+ return signer.ethSign(signer.ethHash(data), toHex(keyPair.sk));
55
+ }
56
+ return signer.ethSign(data, toHex(keyPair.sk));
57
+ },
58
+ ethVerify(data, signature, hashBeforeVerify = true) {
59
+ if (typeof signer.ethHash !== 'function') {
60
+ throw new Error('ethVerify is not supported by signer');
61
+ }
62
+ const hash = hashBeforeVerify ? signer.ethHash(data) : data;
63
+ return signer.ethRecover(hash, signature) === this.address;
64
+ },
65
+ // deprecated
66
+ toAddress() {
67
+ return keyPair.pk ? DIDFromPublicKey(keyPair.pk, type) : keyPair.address;
68
+ },
69
+ toJSON() {
70
+ return {
71
+ type: DidType.toJSON(type),
72
+ sk: toHex(keyPair.sk),
73
+ pk: toHex(keyPair.pk),
74
+ address: this.address,
75
+ };
76
+ },
77
+ };
78
+ }
79
+ /**
80
+ * Generate a wallet from secretKey
81
+ *
82
+ * @example
83
+ * const assert = require('assert');
84
+ * const { fromSecretKey } = require('@ocap/wallet');
85
+ *
86
+ * const sk =
87
+ * '0xD67C071B6F51D2B61180B9B1AA9BE0DD0704619F0E30453AB4A592B036EDE644E4852B7091317E3622068E62A5127D1FB0D4AE2FC50213295E10652D2F0ABFC7';
88
+ * const sig =
89
+ * '0x08a102851c38c072e42756c1cc70938b5499c8e9358dfe5f383823f56cdb282ffda60fcd581a02c6c673069e5afc0bf09abbe3639b61b84d64fd58ef9f083003';
90
+ *
91
+ * const wallet = fromSecretKey(sk, type);
92
+ * const message = 'data to sign';
93
+ * const signature = wallet.sign(message);
94
+ * assert.equal(signature, sig, "signature should match");
95
+ * assert.ok(wallet.verify(message, signature), "signature should be verified");
96
+ */
97
+ export function fromSecretKey(sk, _type = 'default') {
98
+ const type = DidType(_type);
99
+ const keyPair = { sk, pk: getSigner(type.pk).getPublicKey(sk) };
100
+ return Wallet(keyPair, type);
101
+ }
102
+ /**
103
+ * Generate a wallet from publicKey
104
+ */
105
+ export function fromPublicKey(pk, _type = 'default') {
106
+ return Wallet({ pk }, DidType(_type));
107
+ }
108
+ /**
109
+ * Generate a wallet from address (did)
110
+ *
111
+ * Since we do not know the publicKey and secretKey, this kind of wallet cannot be used for signing and verifying
112
+ */
113
+ export function fromAddress(address) {
114
+ return Wallet({ address: toAddress(address) }, toTypeInfo(address));
115
+ }
116
+ /**
117
+ * Generate a wallet by generating a random secretKey
118
+ */
119
+ export function fromRandom(_type = 'default') {
120
+ const type = DidType(_type);
121
+ const signer = getSigner(type.pk);
122
+ const keyPair = signer.genKeyPair();
123
+ return Wallet({ sk: keyPair.secretKey, pk: keyPair.publicKey }, type);
124
+ }
125
+ /**
126
+ * Generating a wallet from a serialized json presentation of another wallet
127
+ */
128
+ export function fromJSON(json) {
129
+ const type = DidType.fromJSON(json.type);
130
+ // @ts-ignore
131
+ return Wallet(json, type);
132
+ }
133
+ /**
134
+ * Check if an object is valid wallet object
135
+ */
136
+ export function isValid(wallet, canSign = true) {
137
+ if (!wallet || typeof wallet !== 'object') {
138
+ return false;
139
+ }
140
+ if (typeof wallet.verify !== 'function') {
141
+ return false;
142
+ }
143
+ if (typeof wallet.toAddress !== 'function') {
144
+ return false;
145
+ }
146
+ if (typeof wallet.toJSON !== 'function') {
147
+ return false;
148
+ }
149
+ if (!wallet.type || !wallet.publicKey) {
150
+ return false;
151
+ }
152
+ if (canSign) {
153
+ if (!wallet.secretKey) {
154
+ return false;
155
+ }
156
+ if (typeof wallet.sign !== 'function') {
157
+ return false;
158
+ }
159
+ }
160
+ return true;
161
+ }
package/lib/index.d.ts ADDED
@@ -0,0 +1,89 @@
1
+ import { EncodingType, BytesType } from '@ocap/util';
2
+ import { DidType, DIDType, DIDTypeStr, DIDTypeArg } from '@arcblock/did';
3
+ type KeyPairType<T extends BytesType = string> = {
4
+ sk?: T;
5
+ pk?: T;
6
+ address?: string;
7
+ };
8
+ export type SerializedWallet = {
9
+ type: DIDTypeStr;
10
+ pk: string;
11
+ sk: string;
12
+ address: string;
13
+ };
14
+ export interface WalletObject<T extends BytesType = string> {
15
+ type: DIDType;
16
+ secretKey: T;
17
+ publicKey: T;
18
+ address: string;
19
+ hash(data: BytesType, round?: number, encoding?: 'hex'): string;
20
+ hash(data: BytesType, round?: number, encoding?: 'base16'): string;
21
+ hash(data: BytesType, round?: number, encoding?: 'base58'): string;
22
+ hash(data: BytesType, round?: number, encoding?: 'base64'): string;
23
+ hash(data: BytesType, round?: number, encoding?: 'buffer'): Buffer;
24
+ hash(data: BytesType, round?: number, encoding?: 'Uint8Array'): Uint8Array;
25
+ hash(data: BytesType, round?: number, encoding?: EncodingType): BytesType;
26
+ sign(data: BytesType, hashBeforeSign?: boolean, encoding?: 'hex'): string;
27
+ sign(data: BytesType, hashBeforeSign?: boolean, encoding?: 'base16'): string;
28
+ sign(data: BytesType, hashBeforeSign?: boolean, encoding?: 'base58'): string;
29
+ sign(data: BytesType, hashBeforeSign?: boolean, encoding?: 'base64'): string;
30
+ sign(data: BytesType, hashBeforeSign?: boolean, encoding?: 'buffer'): Buffer;
31
+ sign(data: BytesType, hashBeforeSign?: boolean, encoding?: 'Uint8Array'): Uint8Array;
32
+ sign(data: BytesType, hashBeforeSign?: boolean, encoding?: EncodingType): BytesType;
33
+ verify(data: BytesType, signature: BytesType, hashBeforeVerify?: boolean, extra?: any): Promise<boolean>;
34
+ ethHash(data: string): string;
35
+ ethSign(data: string, hashBeforeSign?: boolean): string;
36
+ ethVerify(data: string, signature: string, hashBeforeVerify?: boolean): boolean;
37
+ toJSON(): SerializedWallet;
38
+ /**
39
+ * @deprecated ES6: use `wallet.address` instead
40
+ */
41
+ toAddress(): string;
42
+ }
43
+ export declare const WalletType: typeof DidType;
44
+ /**
45
+ * Generate an wallet instance that can be used to sign a message or verify a signature
46
+ */
47
+ export declare function Wallet<T extends BytesType = string>(keyPair: KeyPairType<T>, t?: DIDTypeArg): WalletObject<T>;
48
+ /**
49
+ * Generate a wallet from secretKey
50
+ *
51
+ * @example
52
+ * const assert = require('assert');
53
+ * const { fromSecretKey } = require('@ocap/wallet');
54
+ *
55
+ * const sk =
56
+ * '0xD67C071B6F51D2B61180B9B1AA9BE0DD0704619F0E30453AB4A592B036EDE644E4852B7091317E3622068E62A5127D1FB0D4AE2FC50213295E10652D2F0ABFC7';
57
+ * const sig =
58
+ * '0x08a102851c38c072e42756c1cc70938b5499c8e9358dfe5f383823f56cdb282ffda60fcd581a02c6c673069e5afc0bf09abbe3639b61b84d64fd58ef9f083003';
59
+ *
60
+ * const wallet = fromSecretKey(sk, type);
61
+ * const message = 'data to sign';
62
+ * const signature = wallet.sign(message);
63
+ * assert.equal(signature, sig, "signature should match");
64
+ * assert.ok(wallet.verify(message, signature), "signature should be verified");
65
+ */
66
+ export declare function fromSecretKey<T extends BytesType = string>(sk: T, _type?: DIDTypeArg): WalletObject<T>;
67
+ /**
68
+ * Generate a wallet from publicKey
69
+ */
70
+ export declare function fromPublicKey<T extends BytesType = string>(pk: T, _type?: DIDTypeArg): WalletObject<T>;
71
+ /**
72
+ * Generate a wallet from address (did)
73
+ *
74
+ * Since we do not know the publicKey and secretKey, this kind of wallet cannot be used for signing and verifying
75
+ */
76
+ export declare function fromAddress<T extends BytesType = string>(address: string): WalletObject<T>;
77
+ /**
78
+ * Generate a wallet by generating a random secretKey
79
+ */
80
+ export declare function fromRandom<T extends BytesType = string>(_type?: DIDTypeArg): WalletObject<T>;
81
+ /**
82
+ * Generating a wallet from a serialized json presentation of another wallet
83
+ */
84
+ export declare function fromJSON<T extends BytesType = string>(json: SerializedWallet): WalletObject<T>;
85
+ /**
86
+ * Check if an object is valid wallet object
87
+ */
88
+ export declare function isValid(wallet: WalletObject, canSign?: boolean): boolean;
89
+ export {};
package/lib/index.js ADDED
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WalletType = void 0;
4
+ exports.Wallet = Wallet;
5
+ exports.fromSecretKey = fromSecretKey;
6
+ exports.fromPublicKey = fromPublicKey;
7
+ exports.fromAddress = fromAddress;
8
+ exports.fromRandom = fromRandom;
9
+ exports.fromJSON = fromJSON;
10
+ exports.isValid = isValid;
11
+ const util_1 = require("@ocap/util");
12
+ const mcrypto_1 = require("@ocap/mcrypto");
13
+ const did_1 = require("@arcblock/did");
14
+ exports.WalletType = did_1.DidType;
15
+ /**
16
+ * Generate an wallet instance that can be used to sign a message or verify a signature
17
+ */
18
+ function Wallet(keyPair, t = 'default') {
19
+ const type = (0, did_1.DidType)(t);
20
+ const signer = (0, mcrypto_1.getSigner)(type.pk);
21
+ const hasher = (0, mcrypto_1.getHasher)(type.hash);
22
+ return {
23
+ type,
24
+ secretKey: keyPair.sk,
25
+ publicKey: keyPair.pk,
26
+ address: keyPair.pk ? (0, did_1.fromPublicKey)(keyPair.pk, type) : keyPair.address,
27
+ // @ts-ignore
28
+ hash(data, round = 1, encoding = 'hex') {
29
+ return hasher(data, round, encoding);
30
+ },
31
+ // @ts-ignore
32
+ sign(data, hashBeforeSign = true, encoding = 'hex') {
33
+ if (!keyPair.sk) {
34
+ throw new Error('Cannot sign data without a secretKey');
35
+ }
36
+ if (hashBeforeSign) {
37
+ const hash = hasher(data, 1);
38
+ return signer.sign(hash, keyPair.sk, encoding);
39
+ }
40
+ return signer.sign(data, keyPair.sk, encoding);
41
+ },
42
+ // eslint-disable-next-line require-await
43
+ async verify(data, signature, hashBeforeVerify = true, extra) {
44
+ if (!keyPair.pk) {
45
+ throw new Error('Cannot verify data without a publicKey');
46
+ }
47
+ const hash = hashBeforeVerify ? hasher(data, 1) : data;
48
+ return signer.verify(hash, signature, keyPair.pk, extra);
49
+ },
50
+ ethHash(data) {
51
+ if (typeof signer.ethHash !== 'function') {
52
+ throw new Error('ethHash is not supported by signer');
53
+ }
54
+ return signer.ethHash(data);
55
+ },
56
+ ethSign(data, hashBeforeSign = true) {
57
+ if (!keyPair.sk) {
58
+ throw new Error('Cannot sign data without a secretKey');
59
+ }
60
+ if (typeof signer.ethHash !== 'function') {
61
+ throw new Error('ethSign is not supported by signer');
62
+ }
63
+ if (hashBeforeSign) {
64
+ return signer.ethSign(signer.ethHash(data), (0, util_1.toHex)(keyPair.sk));
65
+ }
66
+ return signer.ethSign(data, (0, util_1.toHex)(keyPair.sk));
67
+ },
68
+ ethVerify(data, signature, hashBeforeVerify = true) {
69
+ if (typeof signer.ethHash !== 'function') {
70
+ throw new Error('ethVerify is not supported by signer');
71
+ }
72
+ const hash = hashBeforeVerify ? signer.ethHash(data) : data;
73
+ return signer.ethRecover(hash, signature) === this.address;
74
+ },
75
+ // deprecated
76
+ toAddress() {
77
+ return keyPair.pk ? (0, did_1.fromPublicKey)(keyPair.pk, type) : keyPair.address;
78
+ },
79
+ toJSON() {
80
+ return {
81
+ type: did_1.DidType.toJSON(type),
82
+ sk: (0, util_1.toHex)(keyPair.sk),
83
+ pk: (0, util_1.toHex)(keyPair.pk),
84
+ address: this.address,
85
+ };
86
+ },
87
+ };
88
+ }
89
+ /**
90
+ * Generate a wallet from secretKey
91
+ *
92
+ * @example
93
+ * const assert = require('assert');
94
+ * const { fromSecretKey } = require('@ocap/wallet');
95
+ *
96
+ * const sk =
97
+ * '0xD67C071B6F51D2B61180B9B1AA9BE0DD0704619F0E30453AB4A592B036EDE644E4852B7091317E3622068E62A5127D1FB0D4AE2FC50213295E10652D2F0ABFC7';
98
+ * const sig =
99
+ * '0x08a102851c38c072e42756c1cc70938b5499c8e9358dfe5f383823f56cdb282ffda60fcd581a02c6c673069e5afc0bf09abbe3639b61b84d64fd58ef9f083003';
100
+ *
101
+ * const wallet = fromSecretKey(sk, type);
102
+ * const message = 'data to sign';
103
+ * const signature = wallet.sign(message);
104
+ * assert.equal(signature, sig, "signature should match");
105
+ * assert.ok(wallet.verify(message, signature), "signature should be verified");
106
+ */
107
+ function fromSecretKey(sk, _type = 'default') {
108
+ const type = (0, did_1.DidType)(_type);
109
+ const keyPair = { sk, pk: (0, mcrypto_1.getSigner)(type.pk).getPublicKey(sk) };
110
+ return Wallet(keyPair, type);
111
+ }
112
+ /**
113
+ * Generate a wallet from publicKey
114
+ */
115
+ function fromPublicKey(pk, _type = 'default') {
116
+ return Wallet({ pk }, (0, did_1.DidType)(_type));
117
+ }
118
+ /**
119
+ * Generate a wallet from address (did)
120
+ *
121
+ * Since we do not know the publicKey and secretKey, this kind of wallet cannot be used for signing and verifying
122
+ */
123
+ function fromAddress(address) {
124
+ return Wallet({ address: (0, did_1.toAddress)(address) }, (0, did_1.toTypeInfo)(address));
125
+ }
126
+ /**
127
+ * Generate a wallet by generating a random secretKey
128
+ */
129
+ function fromRandom(_type = 'default') {
130
+ const type = (0, did_1.DidType)(_type);
131
+ const signer = (0, mcrypto_1.getSigner)(type.pk);
132
+ const keyPair = signer.genKeyPair();
133
+ return Wallet({ sk: keyPair.secretKey, pk: keyPair.publicKey }, type);
134
+ }
135
+ /**
136
+ * Generating a wallet from a serialized json presentation of another wallet
137
+ */
138
+ function fromJSON(json) {
139
+ const type = did_1.DidType.fromJSON(json.type);
140
+ // @ts-ignore
141
+ return Wallet(json, type);
142
+ }
143
+ /**
144
+ * Check if an object is valid wallet object
145
+ */
146
+ function isValid(wallet, canSign = true) {
147
+ if (!wallet || typeof wallet !== 'object') {
148
+ return false;
149
+ }
150
+ if (typeof wallet.verify !== 'function') {
151
+ return false;
152
+ }
153
+ if (typeof wallet.toAddress !== 'function') {
154
+ return false;
155
+ }
156
+ if (typeof wallet.toJSON !== 'function') {
157
+ return false;
158
+ }
159
+ if (!wallet.type || !wallet.publicKey) {
160
+ return false;
161
+ }
162
+ if (canSign) {
163
+ if (!wallet.secretKey) {
164
+ return false;
165
+ }
166
+ if (typeof wallet.sign !== 'function') {
167
+ return false;
168
+ }
169
+ }
170
+ return true;
171
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ocap/wallet",
3
- "version": "1.19.0",
3
+ "version": "1.19.2",
4
4
  "description": "Utility function to create and use an forge compatible crypto wallet",
5
5
  "keywords": [
6
6
  "crypto",
@@ -21,15 +21,11 @@
21
21
  "homepage": "https://github.com/ArcBlock/blockchain/tree/master/core/forge-wallet",
22
22
  "license": "Apache-2.0",
23
23
  "main": "./lib/index.js",
24
- "module": "./lib/index.js",
25
- "types": "./esm/index.d.ts",
26
- "exports": {
27
- ".": {
28
- "import": "./esm/index.js",
29
- "require": "./lib/index.js",
30
- "default": "./esm/index.js"
31
- }
32
- },
24
+ "types": "./lib/index.d.ts",
25
+ "files": [
26
+ "lib",
27
+ "esm"
28
+ ],
33
29
  "devDependencies": {
34
30
  "@arcblock/eslint-config-ts": "0.3.3",
35
31
  "@types/jest": "^29.5.13",
@@ -59,9 +55,9 @@
59
55
  "url": "https://github.com/ArcBlock/blockchain/issues"
60
56
  },
61
57
  "dependencies": {
62
- "@arcblock/did": "1.19.0",
63
- "@ocap/mcrypto": "1.19.0",
64
- "@ocap/util": "1.19.0"
58
+ "@arcblock/did": "1.19.2",
59
+ "@ocap/mcrypto": "1.19.2",
60
+ "@ocap/util": "1.19.2"
65
61
  },
66
- "gitHead": "1b6fac03988fb18507c8ef4c21de282762005f87"
62
+ "gitHead": "6fd339211e6500fbb5cac6401a25130e629345b9"
67
63
  }
package/.eslintrc.js DELETED
@@ -1,12 +0,0 @@
1
- const path = require('path');
2
-
3
- module.exports = {
4
- root: true,
5
- extends: ['@arcblock/eslint-config-ts/base'],
6
- parserOptions: {
7
- project: path.resolve(__dirname, 'tsconfig.eslint.json'),
8
- },
9
- rules: {
10
- '@typescript-eslint/comma-dangle': 'off',
11
- },
12
- };
package/docs/README.md DELETED
@@ -1,186 +0,0 @@
1
- ## Modules
2
-
3
- <dl>
4
- <dt><a href="#module_@ocap/wallet">@ocap/wallet</a></dt>
5
- <dd><p>This module wraps common utility functions to help developers manipulate crypto wallets</p>
6
- </dd>
7
- </dl>
8
-
9
- ## Typedefs
10
-
11
- <dl>
12
- <dt><a href="#WalletObject">WalletObject</a></dt>
13
- <dd></dd>
14
- </dl>
15
-
16
- ## @ocap/wallet
17
-
18
- This module wraps common utility functions to help developers manipulate crypto wallets
19
-
20
- **Requires**: `module:@ocap/mcrypto`, `module:@arcblock/did`\
21
- **Example**
22
-
23
- ```js
24
- yarn add @ocap/wallet
25
- ```
26
-
27
- * [Wallet(keyPair, \[type\])](#Wallet) ⇒ [`WalletObject`](#WalletObject)
28
- * [fromSecretKey(sk, \[type\])](#fromSecretKey) ⇒ [`WalletObject`](#WalletObject)
29
- * [fromPublicKey(pk, \[type\])](#fromPublicKey) ⇒ [`WalletObject`](#WalletObject)
30
- * [fromAddress(address)](#fromAddress) ⇒ [`WalletObject`](#WalletObject)
31
- * [fromRandom(\[type\])](#fromRandom) ⇒ [`WalletObject`](#WalletObject)
32
- * [fromJSON(json)](#fromJSON) ⇒ [`WalletObject`](#WalletObject)
33
- * [isValid(wallet, canSign)](#isValid)
34
-
35
- ### Wallet(keyPair, \[type]) ⇒ [`WalletObject`](#WalletObject)
36
-
37
- Generate an wallet instance that can be used to sign a message or verify a signature
38
-
39
- **Kind**: static method\
40
- **Returns**: [`WalletObject`](#WalletObject) - wallet object that can be used to sign/verify/getAddress\
41
- **Access**: public
42
-
43
- | Param | Type | Default | Description |
44
- | --- | --- | --- | --- |
45
- | keyPair | `object` | | the key pair |
46
- | keyPair.sk | `string` | | the secretKey |
47
- | keyPair.pk | `string` | | the wallet publicKey |
48
- | \[type] | `DidType` | `&#x27;default&#x27;` | wallet type |
49
-
50
- ### fromSecretKey(sk, \[type]) ⇒ [`WalletObject`](#WalletObject)
51
-
52
- Generate a wallet from secretKey
53
-
54
- **Kind**: static method\
55
- **Returns**: [`WalletObject`](#WalletObject) - wallet object that can be used to sign/verify/getAddress\
56
- **Access**: public
57
-
58
- | Param | Type | Default | Description |
59
- | --- | --- | --- | --- |
60
- | sk | `string` | | the secret key, `hex encoded string` |
61
- | \[type] | `DidType` | `&#x27;default&#x27;` | wallet type |
62
-
63
- **Example**
64
-
65
- ```js
66
- const assert = require('assert');
67
- const { fromSecretKey } = require('@ocap/wallet');
68
-
69
- const sk =
70
- '0xD67C071B6F51D2B61180B9B1AA9BE0DD0704619F0E30453AB4A592B036EDE644E4852B7091317E3622068E62A5127D1FB0D4AE2FC50213295E10652D2F0ABFC7';
71
- const sig =
72
- '0x08a102851c38c072e42756c1cc70938b5499c8e9358dfe5f383823f56cdb282ffda60fcd581a02c6c673069e5afc0bf09abbe3639b61b84d64fd58ef9f083003';
73
-
74
- const wallet = fromSecretKey(sk, type);
75
- const message = 'data to sign';
76
- const signature = wallet.sign(message);
77
- assert.equal(signature, sig, "signature should match");
78
- assert.ok(wallet.verify(message, signature), "signature should be verified");
79
- ```
80
-
81
- ### fromPublicKey(pk, \[type]) ⇒ [`WalletObject`](#WalletObject)
82
-
83
- Generate a wallet from publicKey
84
-
85
- **Kind**: static method\
86
- **Returns**: [`WalletObject`](#WalletObject) - wallet object that can be used to sign/verify/getAddress\
87
- **Access**: public
88
-
89
- | Param | Type | Default | Description |
90
- | --- | --- | --- | --- |
91
- | pk | `string` | | the public key, `hex encoded string` |
92
- | \[type] | `DidType` | `&#x27;default&#x27;` | wallet type |
93
-
94
- ### fromAddress(address) ⇒ [`WalletObject`](#WalletObject)
95
-
96
- Generate a wallet from address (did)
97
-
98
- Since we do not know the publicKey and secretKey, this kind of wallet cannot be used for signing and verifying
99
-
100
- **Kind**: static method\
101
- **Returns**: [`WalletObject`](#WalletObject) - wallet object that can be used to sign/verify/getAddress\
102
- **Access**: public
103
-
104
- | Param | Type | Description |
105
- | --- | --- | --- |
106
- | address | `string` | the wallet address |
107
-
108
- **Example**
109
-
110
- ```js
111
- const assert = require('assert');
112
- const { fromAddress } = require('@ocap/wallet');
113
-
114
- const address = 'zNKtCNqYWLYWYW3gWRA1vnRykfCBZYHZvzKr';
115
- const wallet = fromAddress(address);
116
- console.log(wallet.toJSON());
117
- ```
118
-
119
- ### fromRandom(\[type]) ⇒ [`WalletObject`](#WalletObject)
120
-
121
- Generate a wallet by generating a random secretKey
122
-
123
- **Kind**: static method\
124
- **Returns**: [`WalletObject`](#WalletObject) - wallet object that can be used to sign/verify/getAddress\
125
- **Access**: public
126
-
127
- | Param | Type | Default | Description |
128
- | --- | --- | --- | --- |
129
- | \[type] | `DidType` | `&#x27;default&#x27;` | wallet type |
130
-
131
- **Example**
132
-
133
- ```js
134
- const { fromRandom } = require('@ocap/wallet');
135
- const wallet = fromRandom();
136
- // Do something with wallet
137
- ```
138
-
139
- ### fromJSON(json) ⇒ [`WalletObject`](#WalletObject)
140
-
141
- Generating a wallet from a serialized json presentation of another wallet
142
-
143
- **Kind**: static method\
144
- **Returns**: [`WalletObject`](#WalletObject) - wallet object that can be used to sign/verify/getAddress\
145
- **Access**: public
146
-
147
- | Param | Type | Description |
148
- | --- | --- | --- |
149
- | json | `object` | json presentation of a wallet |
150
-
151
- **Example**
152
-
153
- ```js
154
- const { fromJSON, fromRandom } = require('@ocap/wallet');
155
- const wallet = fromRandom();
156
- const wallet2 = fromJSON(wallet.toJSON());
157
- // wallet2 is identical to wallet
158
- ```
159
-
160
- ### isValid(wallet, canSign)
161
-
162
- Check if an object is valid wallet object
163
-
164
- **Kind**: static method\
165
- **Access**: public
166
-
167
- | Param | Type | Default | Description |
168
- | --- | --- | --- | --- |
169
- | wallet | `object` | | |
170
- | canSign | `boolean` | `true` | should the wallet support sign |
171
-
172
- ## WalletObject
173
-
174
- **Kind**: global typedef\
175
- **Access**: public\
176
- **Properties**
177
-
178
- | Name | Type | Description |
179
- | --- | --- | --- |
180
- | type | `DidType` | Indicates the wallet type |
181
- | secretKey | `secretKey` | Wallet secretKey |
182
- | publicKey | `publicKey` | Wallet publicKey |
183
- | sign | `function` | Sign `data`, data is hashed using the `HashType` defined in type before signing |
184
- | verify | `function` | Verify `signature`, data is hashed using the `HashType` defined in type before verifying |
185
- | toAddress | `function` | Get wallet address without `did:abt:` prefix |
186
- | toJSON | `function` | Serialize wallet to json object, checkout [fromJSON](fromJSON) for deserialisation |
package/jest.config.js DELETED
@@ -1,7 +0,0 @@
1
- const base = require('../../jest.config.base');
2
-
3
- module.exports = {
4
- ...base,
5
- preset: 'ts-jest',
6
- collectCoverageFrom: ['<rootDir>/core/wallet/src/*.ts', '<rootDir>/core/wallet/src/**/*.ts'],
7
- };
package/src/index.ts DELETED
@@ -1,235 +0,0 @@
1
- import { toHex, EncodingType, BytesType } from '@ocap/util';
2
- import { getSigner, getHasher } from '@ocap/mcrypto';
3
- import {
4
- toAddress,
5
- fromPublicKey as DIDFromPublicKey,
6
- toTypeInfo,
7
- DidType,
8
- DIDType,
9
- DIDTypeStr,
10
- DIDTypeArg,
11
- } from '@arcblock/did';
12
-
13
- type KeyPairType<T extends BytesType = string> = {
14
- sk?: T;
15
- pk?: T;
16
- address?: string;
17
- };
18
-
19
- export type SerializedWallet = {
20
- type: DIDTypeStr;
21
- pk: string;
22
- sk: string;
23
- address: string;
24
- };
25
-
26
- export interface WalletObject<T extends BytesType = string> {
27
- type: DIDType;
28
- secretKey: T;
29
- publicKey: T;
30
- address: string;
31
-
32
- hash(data: BytesType, round?: number, encoding?: 'hex'): string;
33
- hash(data: BytesType, round?: number, encoding?: 'base16'): string;
34
- hash(data: BytesType, round?: number, encoding?: 'base58'): string;
35
- hash(data: BytesType, round?: number, encoding?: 'base64'): string;
36
- hash(data: BytesType, round?: number, encoding?: 'buffer'): Buffer;
37
- hash(data: BytesType, round?: number, encoding?: 'Uint8Array'): Uint8Array;
38
- hash(data: BytesType, round?: number, encoding?: EncodingType): BytesType;
39
-
40
- sign(data: BytesType, hashBeforeSign?: boolean, encoding?: 'hex'): string;
41
- sign(data: BytesType, hashBeforeSign?: boolean, encoding?: 'base16'): string;
42
- sign(data: BytesType, hashBeforeSign?: boolean, encoding?: 'base58'): string;
43
- sign(data: BytesType, hashBeforeSign?: boolean, encoding?: 'base64'): string;
44
- sign(data: BytesType, hashBeforeSign?: boolean, encoding?: 'buffer'): Buffer;
45
- sign(data: BytesType, hashBeforeSign?: boolean, encoding?: 'Uint8Array'): Uint8Array;
46
- sign(data: BytesType, hashBeforeSign?: boolean, encoding?: EncodingType): BytesType;
47
-
48
- verify(data: BytesType, signature: BytesType, hashBeforeVerify?: boolean, extra?: any): Promise<boolean>;
49
-
50
- ethHash(data: string): string;
51
- ethSign(data: string, hashBeforeSign?: boolean): string;
52
- ethVerify(data: string, signature: string, hashBeforeVerify?: boolean): boolean;
53
-
54
- toJSON(): SerializedWallet;
55
-
56
- /**
57
- * @deprecated ES6: use `wallet.address` instead
58
- */
59
- toAddress(): string;
60
- }
61
-
62
- export const WalletType = DidType;
63
-
64
- /**
65
- * Generate an wallet instance that can be used to sign a message or verify a signature
66
- */
67
- export function Wallet<T extends BytesType = string>(
68
- keyPair: KeyPairType<T>,
69
- t: DIDTypeArg = 'default'
70
- ): WalletObject<T> {
71
- const type = DidType(t);
72
- const signer = getSigner(type.pk);
73
- const hasher = getHasher(type.hash);
74
- return {
75
- type,
76
- secretKey: keyPair.sk,
77
- publicKey: keyPair.pk,
78
- address: keyPair.pk ? DIDFromPublicKey(keyPair.pk, type) : keyPair.address,
79
-
80
- // @ts-ignore
81
- hash(data: BytesType, round = 1, encoding: EncodingType = 'hex'): BytesType {
82
- return hasher(data, round, encoding);
83
- },
84
-
85
- // @ts-ignore
86
- sign(data: BytesType, hashBeforeSign = true, encoding: EncodingType = 'hex'): BytesType {
87
- if (!keyPair.sk) {
88
- throw new Error('Cannot sign data without a secretKey');
89
- }
90
- if (hashBeforeSign) {
91
- const hash = hasher(data, 1);
92
- return signer.sign(hash, keyPair.sk, encoding);
93
- }
94
- return signer.sign(data, keyPair.sk, encoding);
95
- },
96
-
97
- // eslint-disable-next-line require-await
98
- async verify(data: BytesType, signature: BytesType, hashBeforeVerify = true, extra?: any): Promise<boolean> {
99
- if (!keyPair.pk) {
100
- throw new Error('Cannot verify data without a publicKey');
101
- }
102
- const hash = hashBeforeVerify ? hasher(data, 1) : data;
103
- return signer.verify(hash, signature, keyPair.pk, extra);
104
- },
105
-
106
- ethHash(data: string): string {
107
- if (typeof signer.ethHash !== 'function') {
108
- throw new Error('ethHash is not supported by signer');
109
- }
110
- return signer.ethHash(data);
111
- },
112
- ethSign(data: string, hashBeforeSign = true): string {
113
- if (!keyPair.sk) {
114
- throw new Error('Cannot sign data without a secretKey');
115
- }
116
- if (typeof signer.ethHash !== 'function') {
117
- throw new Error('ethSign is not supported by signer');
118
- }
119
- if (hashBeforeSign) {
120
- return signer.ethSign(signer.ethHash(data), toHex(keyPair.sk));
121
- }
122
- return signer.ethSign(data, toHex(keyPair.sk));
123
- },
124
- ethVerify(data: string, signature: string, hashBeforeVerify = true): boolean {
125
- if (typeof signer.ethHash !== 'function') {
126
- throw new Error('ethVerify is not supported by signer');
127
- }
128
- const hash = hashBeforeVerify ? signer.ethHash(data) : data;
129
- return signer.ethRecover(hash, signature) === this.address;
130
- },
131
-
132
- // deprecated
133
- toAddress(): string {
134
- return keyPair.pk ? DIDFromPublicKey(keyPair.pk, type) : keyPair.address;
135
- },
136
-
137
- toJSON(): SerializedWallet {
138
- return {
139
- type: DidType.toJSON(type),
140
- sk: toHex(keyPair.sk),
141
- pk: toHex(keyPair.pk),
142
- address: this.address,
143
- };
144
- },
145
- };
146
- }
147
-
148
- /**
149
- * Generate a wallet from secretKey
150
- *
151
- * @example
152
- * const assert = require('assert');
153
- * const { fromSecretKey } = require('@ocap/wallet');
154
- *
155
- * const sk =
156
- * '0xD67C071B6F51D2B61180B9B1AA9BE0DD0704619F0E30453AB4A592B036EDE644E4852B7091317E3622068E62A5127D1FB0D4AE2FC50213295E10652D2F0ABFC7';
157
- * const sig =
158
- * '0x08a102851c38c072e42756c1cc70938b5499c8e9358dfe5f383823f56cdb282ffda60fcd581a02c6c673069e5afc0bf09abbe3639b61b84d64fd58ef9f083003';
159
- *
160
- * const wallet = fromSecretKey(sk, type);
161
- * const message = 'data to sign';
162
- * const signature = wallet.sign(message);
163
- * assert.equal(signature, sig, "signature should match");
164
- * assert.ok(wallet.verify(message, signature), "signature should be verified");
165
- */
166
- export function fromSecretKey<T extends BytesType = string>(sk: T, _type: DIDTypeArg = 'default'): WalletObject<T> {
167
- const type = DidType(_type);
168
- const keyPair = { sk, pk: getSigner(type.pk).getPublicKey(sk) as T };
169
- return Wallet<T>(keyPair, type);
170
- }
171
-
172
- /**
173
- * Generate a wallet from publicKey
174
- */
175
- export function fromPublicKey<T extends BytesType = string>(pk: T, _type: DIDTypeArg = 'default'): WalletObject<T> {
176
- return Wallet<T>({ pk }, DidType(_type));
177
- }
178
-
179
- /**
180
- * Generate a wallet from address (did)
181
- *
182
- * Since we do not know the publicKey and secretKey, this kind of wallet cannot be used for signing and verifying
183
- */
184
- export function fromAddress<T extends BytesType = string>(address: string): WalletObject<T> {
185
- return Wallet<T>({ address: toAddress(address) }, toTypeInfo(address));
186
- }
187
-
188
- /**
189
- * Generate a wallet by generating a random secretKey
190
- */
191
- export function fromRandom<T extends BytesType = string>(_type: DIDTypeArg = 'default'): WalletObject<T> {
192
- const type = DidType(_type);
193
- const signer = getSigner(type.pk);
194
- const keyPair = signer.genKeyPair();
195
- return Wallet<T>({ sk: keyPair.secretKey as T, pk: keyPair.publicKey as T }, type);
196
- }
197
-
198
- /**
199
- * Generating a wallet from a serialized json presentation of another wallet
200
- */
201
- export function fromJSON<T extends BytesType = string>(json: SerializedWallet): WalletObject<T> {
202
- const type = DidType.fromJSON(json.type);
203
- // @ts-ignore
204
- return Wallet<T>(json, type);
205
- }
206
-
207
- /**
208
- * Check if an object is valid wallet object
209
- */
210
- export function isValid(wallet: WalletObject, canSign = true): boolean {
211
- if (!wallet || typeof wallet !== 'object') {
212
- return false;
213
- }
214
- if (typeof wallet.verify !== 'function') {
215
- return false;
216
- }
217
- if (typeof wallet.toAddress !== 'function') {
218
- return false;
219
- }
220
- if (typeof wallet.toJSON !== 'function') {
221
- return false;
222
- }
223
- if (!wallet.type || !wallet.publicKey) {
224
- return false;
225
- }
226
- if (canSign) {
227
- if (!wallet.secretKey) {
228
- return false;
229
- }
230
- if (typeof wallet.sign !== 'function') {
231
- return false;
232
- }
233
- }
234
- return true;
235
- }
@@ -1,116 +0,0 @@
1
- import { types } from '@ocap/mcrypto';
2
- import { fromBase64 } from '@ocap/util';
3
- import { fromRandom, fromPublicKey, fromSecretKey, fromJSON, fromAddress, isValid } from '../src/index';
4
-
5
- const sk =
6
- '0xD67C071B6F51D2B61180B9B1AA9BE0DD0704619F0E30453AB4A592B036EDE644E4852B7091317E3622068E62A5127D1FB0D4AE2FC50213295E10652D2F0ABFC7';
7
- const pk = '0xE4852B7091317E3622068E62A5127D1FB0D4AE2FC50213295E10652D2F0ABFC7';
8
- const appId = 'zNKtCNqYWLYWYW3gWRA1vnRykfCBZYHZvzKr';
9
- const sig =
10
- '0x8122c608f61b04f6b574f005dc8e0463d393a7fb50e0426bca587b20778a8a9f6376bab87bc3983b0a5f1c9581f6d94162317c715a3c1c0f086be1e514399109';
11
- const type = {
12
- role: types.RoleType.ROLE_APPLICATION,
13
- pk: types.KeyType.ED25519,
14
- hash: types.HashType.SHA3,
15
- address: types.EncodingType.BASE58,
16
- };
17
- describe('#Wallet', () => {
18
- test('should have basic functions', () => {
19
- expect(typeof fromPublicKey).toEqual('function');
20
- expect(typeof fromSecretKey).toEqual('function');
21
- expect(typeof fromJSON).toEqual('function');
22
- });
23
-
24
- test('should serialize to json as expected', () => {
25
- const wallet = fromPublicKey(pk, type);
26
- const json = wallet.toJSON();
27
- expect(json.address).toEqual(appId);
28
- const wallet2 = fromJSON(json);
29
- expect(wallet2.address).toEqual(appId);
30
- expect(wallet2.address).toEqual(appId);
31
- });
32
-
33
- test('should throw error when sign without sk', () => {
34
- const wallet = fromPublicKey(pk, type);
35
- const hash = wallet.hash('abc');
36
- expect(hash).toEqual('0x3a985da74fe225b2045c172d6bd390bd855f086e3e9d525b46bfe24511431532');
37
- try {
38
- wallet.sign('data to sign');
39
- } catch (err) {
40
- expect(err).toBeTruthy();
41
- }
42
- });
43
-
44
- test('should sign when sk is provided', async () => {
45
- const wallet = fromSecretKey(sk, type);
46
- const hash = wallet.hash('abc');
47
- expect(hash).toEqual('0x3a985da74fe225b2045c172d6bd390bd855f086e3e9d525b46bfe24511431532');
48
- const message = 'data to sign';
49
- const signature = wallet.sign(message);
50
- expect(signature).toEqual(sig);
51
- expect(await wallet.verify(message, signature)).toEqual(true);
52
- expect(() => fromSecretKey('abc')).toThrow();
53
- });
54
-
55
- test('should gen type from address', () => {
56
- const wallet = fromAddress(appId);
57
- expect(wallet.type.pk).toEqual(type.pk);
58
- expect(wallet.type.hash).toEqual(type.hash);
59
- expect(wallet.type.role).toEqual(type.role);
60
- });
61
-
62
- test('should detect invalid wallets', () => {
63
- const wallet = fromRandom();
64
- expect(isValid(wallet)).toEqual(true);
65
- const wallet2 = fromPublicKey(pk, type);
66
- expect(isValid(wallet2, false)).toEqual(true);
67
- });
68
-
69
- test('should generate base58 address', () => {
70
- const wallet = fromRandom();
71
- expect(wallet.toAddress().startsWith('z')).toBeTruthy();
72
- expect(wallet.address.startsWith('z')).toBeTruthy();
73
- expect(() => wallet.ethHash('abc')).toThrow();
74
- expect(() => wallet.ethSign('abc')).toThrow();
75
- });
76
-
77
- test('should generate base16 address', () => {
78
- const wallet = fromRandom('eth');
79
- expect(wallet.address.startsWith('0x')).toBeTruthy();
80
- });
81
-
82
- test('should work with ethereum', async () => {
83
- // eslint-disable-next-line
84
- const sk = '0xfe51dc1dfe30e2f4b06f7941bdfe0341704c10e28d28e4ecd7871f8f0204fa33';
85
- const address = '0x5547a73ed3c2Ad599114866fA1d5E8a02147D1C9';
86
- const data = '0xef56b956483ebe2fa8ed6c35c8b884d940d57fdf535a70a2df245661c9cf42e4';
87
- // eslint-disable-next-line
88
- const sig = '0x242ad32e16c38307e2909600cb641da17734121d9d50df93b6240db40ad3fc2d562f3e41cc6409730cbb81c5bc90a914f24baf0d3537a7db8334dc67ed2000fe1c'; // prettier-ignore
89
- const wallet = fromSecretKey(sk, 'eth');
90
- expect(wallet.address).toEqual(address);
91
- expect(wallet.ethSign(data)).toEqual(sig);
92
- expect(wallet.ethHash(data)).toEqual('0x9f5dc66bef3e8053b02c4cb6a8504cb4d7e48862245a4d34fc69bc615080d276');
93
- expect(await wallet.ethVerify(data, sig)).toEqual(true);
94
- expect(() => fromSecretKey('abc', 'eth')).toThrow();
95
- });
96
-
97
- test('should work with passkey', async () => {
98
- const publicKey = fromBase64(
99
- 'pQECAyYgASFYIA3GyM4rSxM_HyV52QTRwGJOdkXurky3cwTLvb_gKSF-Ilggpd0fhMlPdxHBl45_eJxqywCRl-a4IDpeFa4pcfmrxuM'
100
- );
101
-
102
- const wallet = fromPublicKey(publicKey, 'passkey');
103
- expect(wallet.address).toEqual('z3i165rPumFgyQZpZ1W3VLEYBPuV2xSCAjoqo');
104
-
105
- const challenge = '0x7E093B990CB41A97990657D6AD688BD4E28267C9FCC0A36BC15D241D5D302CEF';
106
- const response = {
107
- authenticatorData: 'u_rJjitfFaLnT_p0uECHZ0CSuRQE7psYSUxv2p-nql0dAAAAAA',
108
- clientDataJSON:
109
- 'eyJ0eXBlIjoid2ViYXV0aG4uZ2V0IiwiY2hhbGxlbmdlIjoiZmdrN21ReTBHcGVaQmxmV3JXaUwxT0tDWjhuOHdLTnJ3VjBrSFYwd0xPOCIsIm9yaWdpbiI6Imh0dHBzOi8vYmJxYXhlN2lhZGZpbWRkY2c0cmZycHRmdXp4bW12NWI2dnBudXB1bmk0NC5kaWQuYWJ0bmV0LmlvIiwiY3Jvc3NPcmlnaW4iOmZhbHNlfQ',
110
- signature: 'MEUCIQCo51Gg_3UrSotxrguG92iXcuSbW5fNZqcSsHS8zlZbdAIgEmaBD0cQeiML3Mr60HSPP176EyqNvqfTdEV1oGWhQ-o',
111
- };
112
-
113
- const verified = await wallet.verify(challenge, response.signature, false, JSON.stringify(response));
114
- expect(verified).toEqual(true);
115
- });
116
- });
package/tsconfig.cjs.json DELETED
@@ -1,9 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.json",
3
- "include": ["src"],
4
- "exclude": ["node_modules", "tests"],
5
- "compilerOptions": {
6
- "module": "commonjs",
7
- "outDir": "lib"
8
- }
9
- }
@@ -1,4 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.json",
3
- "include": ["src", "tests", ".eslintrc.js", "jest.config.js"]
4
- }
package/tsconfig.esm.json DELETED
@@ -1,9 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.json",
3
- "include": ["src"],
4
- "exclude": ["node_modules", "tests"],
5
- "compilerOptions": {
6
- "module": "esnext",
7
- "outDir": "esm"
8
- }
9
- }