@alephium/web3 0.5.0-rc.12 → 0.5.0-rc.13
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.
- package/dist/alephium-web3.min.js +1 -1
- package/dist/alephium-web3.min.js.map +1 -1
- package/dist/src/signer/signer.d.ts +4 -2
- package/dist/src/signer/signer.js +26 -8
- package/dist/src/signer/types.d.ts +2 -0
- package/package.json +1 -1
- package/src/signer/signer.ts +33 -9
- package/src/signer/types.ts +8 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ExplorerProvider, NodeProvider } from '../api';
|
|
2
2
|
import { node } from '../api';
|
|
3
|
-
import { Account, EnableOptionsBase, Destination, SignDeployContractTxParams, SignDeployContractTxResult, SignExecuteScriptTxParams, SignExecuteScriptTxResult, SignMessageParams, SignMessageResult, SignTransferTxParams, SignTransferTxResult, SignUnsignedTxParams, SignUnsignedTxResult, SubmissionResult, SubmitTransactionParams, KeyType } from './types';
|
|
3
|
+
import { Account, EnableOptionsBase, Destination, SignDeployContractTxParams, SignDeployContractTxResult, SignExecuteScriptTxParams, SignExecuteScriptTxResult, SignMessageParams, SignMessageResult, SignTransferTxParams, SignTransferTxResult, SignUnsignedTxParams, SignUnsignedTxResult, SubmissionResult, SubmitTransactionParams, KeyType, MessageHasher } from './types';
|
|
4
4
|
export declare abstract class SignerProvider {
|
|
5
5
|
abstract get nodeProvider(): NodeProvider | undefined;
|
|
6
6
|
abstract get explorerProvider(): ExplorerProvider | undefined;
|
|
@@ -52,7 +52,9 @@ export declare abstract class SignerProviderWithCachedAccounts<T extends Account
|
|
|
52
52
|
getAccounts(): Promise<T[]>;
|
|
53
53
|
getAccount(address: string): Promise<T>;
|
|
54
54
|
}
|
|
55
|
-
export declare function
|
|
55
|
+
export declare function extendMessage(message: string): string;
|
|
56
|
+
export declare function hashMessage(message: string, hasher: MessageHasher): string;
|
|
57
|
+
export declare function verifySignedMessage(message: string, messageHasher: MessageHasher, publicKey: string, signature: string, keyType?: KeyType): boolean;
|
|
56
58
|
export declare function toApiDestination(data: Destination): node.Destination;
|
|
57
59
|
export declare function toApiDestinations(data: Destination[]): node.Destination[];
|
|
58
60
|
export declare function fromApiDestination(data: node.Destination): Destination;
|
|
@@ -43,7 +43,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
43
43
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
44
44
|
};
|
|
45
45
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
|
-
exports.fromApiDestination = exports.toApiDestinations = exports.toApiDestination = exports.verifySignedMessage = exports.SignerProviderWithCachedAccounts = exports.SignerProviderWithMultipleAccounts = exports.SignerProviderSimple = exports.InteractiveSignerProvider = exports.SignerProvider = void 0;
|
|
46
|
+
exports.fromApiDestination = exports.toApiDestinations = exports.toApiDestination = exports.verifySignedMessage = exports.hashMessage = exports.extendMessage = exports.SignerProviderWithCachedAccounts = exports.SignerProviderWithMultipleAccounts = exports.SignerProviderSimple = exports.InteractiveSignerProvider = exports.SignerProvider = void 0;
|
|
47
|
+
const buffer_1 = require("buffer/");
|
|
48
|
+
const crypto_1 = require("crypto");
|
|
47
49
|
const api_1 = require("../api");
|
|
48
50
|
const utils = __importStar(require("../utils"));
|
|
49
51
|
const blakejs_1 = __importDefault(require("blakejs"));
|
|
@@ -135,9 +137,8 @@ class SignerProviderSimple extends SignerProvider {
|
|
|
135
137
|
return { signature, ...response };
|
|
136
138
|
}
|
|
137
139
|
async signMessage(params) {
|
|
138
|
-
const
|
|
139
|
-
const
|
|
140
|
-
const signature = await this.signRaw(params.signerAddress, utils.binToHex(messageHash));
|
|
140
|
+
const messageHash = hashMessage(params.message, params.messageHasher);
|
|
141
|
+
const signature = await this.signRaw(params.signerAddress, messageHash);
|
|
141
142
|
return { signature: signature };
|
|
142
143
|
}
|
|
143
144
|
}
|
|
@@ -198,10 +199,27 @@ exports.SignerProviderWithCachedAccounts = SignerProviderWithCachedAccounts;
|
|
|
198
199
|
function extendMessage(message) {
|
|
199
200
|
return 'Alephium Signed Message: ' + message;
|
|
200
201
|
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
202
|
+
exports.extendMessage = extendMessage;
|
|
203
|
+
function hashMessage(message, hasher) {
|
|
204
|
+
switch (hasher) {
|
|
205
|
+
case 'alephium':
|
|
206
|
+
return utils.binToHex(blakejs_1.default.blake2b(extendMessage(message), undefined, 32));
|
|
207
|
+
case 'sha256':
|
|
208
|
+
const sha256 = (0, crypto_1.createHash)('sha256');
|
|
209
|
+
sha256.update(buffer_1.Buffer.from(message));
|
|
210
|
+
return utils.binToHex(sha256.digest());
|
|
211
|
+
case 'blake2b':
|
|
212
|
+
return utils.binToHex(blakejs_1.default.blake2b(message, undefined, 32));
|
|
213
|
+
case 'identity':
|
|
214
|
+
return message;
|
|
215
|
+
default:
|
|
216
|
+
throw Error(`Invalid message hasher: ${hasher}`);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
exports.hashMessage = hashMessage;
|
|
220
|
+
function verifySignedMessage(message, messageHasher, publicKey, signature, keyType) {
|
|
221
|
+
const messageHash = hashMessage(message, messageHasher);
|
|
222
|
+
return utils.verifySignature(messageHash, publicKey, signature, keyType);
|
|
205
223
|
}
|
|
206
224
|
exports.verifySignedMessage = verifySignedMessage;
|
|
207
225
|
function toApiDestination(data) {
|
|
@@ -88,10 +88,12 @@ export interface SignUnsignedTxResult {
|
|
|
88
88
|
gasAmount: number;
|
|
89
89
|
gasPrice: Number256;
|
|
90
90
|
}
|
|
91
|
+
export declare type MessageHasher = 'alephium' | 'sha256' | 'blake2b' | 'identity';
|
|
91
92
|
export interface SignMessageParams {
|
|
92
93
|
signerAddress: string;
|
|
93
94
|
signerKeyType?: KeyType;
|
|
94
95
|
message: string;
|
|
96
|
+
messageHasher: MessageHasher;
|
|
95
97
|
}
|
|
96
98
|
export interface SignMessageResult {
|
|
97
99
|
signature: string;
|
package/package.json
CHANGED
package/src/signer/signer.ts
CHANGED
|
@@ -16,6 +16,8 @@ You should have received a copy of the GNU Lesser General Public License
|
|
|
16
16
|
along with the library. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
|
+
import { Buffer } from 'buffer/'
|
|
20
|
+
import { createHash } from 'crypto'
|
|
19
21
|
import { ExplorerProvider, fromApiNumber256, fromApiTokens, NodeProvider, toApiNumber256, toApiTokens } from '../api'
|
|
20
22
|
import { node } from '../api'
|
|
21
23
|
import * as utils from '../utils'
|
|
@@ -38,7 +40,8 @@ import {
|
|
|
38
40
|
SignUnsignedTxResult,
|
|
39
41
|
SubmissionResult,
|
|
40
42
|
SubmitTransactionParams,
|
|
41
|
-
KeyType
|
|
43
|
+
KeyType,
|
|
44
|
+
MessageHasher
|
|
42
45
|
} from './types'
|
|
43
46
|
import { TransactionBuilder } from './tx-builder'
|
|
44
47
|
import { addressFromPublicKey, groupOfAddress } from '../utils'
|
|
@@ -176,9 +179,8 @@ export abstract class SignerProviderSimple extends SignerProvider {
|
|
|
176
179
|
}
|
|
177
180
|
|
|
178
181
|
async signMessage(params: SignMessageParams): Promise<SignMessageResult> {
|
|
179
|
-
const
|
|
180
|
-
const
|
|
181
|
-
const signature = await this.signRaw(params.signerAddress, utils.binToHex(messageHash))
|
|
182
|
+
const messageHash = hashMessage(params.message, params.messageHasher)
|
|
183
|
+
const signature = await this.signRaw(params.signerAddress, messageHash)
|
|
182
184
|
return { signature: signature }
|
|
183
185
|
}
|
|
184
186
|
|
|
@@ -242,14 +244,36 @@ export abstract class SignerProviderWithCachedAccounts<T extends Account> extend
|
|
|
242
244
|
}
|
|
243
245
|
}
|
|
244
246
|
|
|
245
|
-
function extendMessage(message: string): string {
|
|
247
|
+
export function extendMessage(message: string): string {
|
|
246
248
|
return 'Alephium Signed Message: ' + message
|
|
247
249
|
}
|
|
248
250
|
|
|
249
|
-
export function
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
251
|
+
export function hashMessage(message: string, hasher: MessageHasher): string {
|
|
252
|
+
switch (hasher) {
|
|
253
|
+
case 'alephium':
|
|
254
|
+
return utils.binToHex(blake.blake2b(extendMessage(message), undefined, 32))
|
|
255
|
+
case 'sha256':
|
|
256
|
+
const sha256 = createHash('sha256')
|
|
257
|
+
sha256.update(Buffer.from(message))
|
|
258
|
+
return utils.binToHex(sha256.digest())
|
|
259
|
+
case 'blake2b':
|
|
260
|
+
return utils.binToHex(blake.blake2b(message, undefined, 32))
|
|
261
|
+
case 'identity':
|
|
262
|
+
return message
|
|
263
|
+
default:
|
|
264
|
+
throw Error(`Invalid message hasher: ${hasher}`)
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
export function verifySignedMessage(
|
|
269
|
+
message: string,
|
|
270
|
+
messageHasher: MessageHasher,
|
|
271
|
+
publicKey: string,
|
|
272
|
+
signature: string,
|
|
273
|
+
keyType?: KeyType
|
|
274
|
+
): boolean {
|
|
275
|
+
const messageHash = hashMessage(message, messageHasher)
|
|
276
|
+
return utils.verifySignature(messageHash, publicKey, signature, keyType)
|
|
253
277
|
}
|
|
254
278
|
|
|
255
279
|
export function toApiDestination(data: Destination): node.Destination {
|
package/src/signer/types.ts
CHANGED
|
@@ -136,12 +136,19 @@ export interface SignUnsignedTxResult {
|
|
|
136
136
|
}
|
|
137
137
|
assertType<Eq<SignUnsignedTxResult, SignTransferTxResult>>
|
|
138
138
|
|
|
139
|
+
export type MessageHasher =
|
|
140
|
+
| 'alephium' // Message is prefixed with 'Alephium signed message: ' before hashed with blake2b
|
|
141
|
+
| 'sha256'
|
|
142
|
+
| 'blake2b'
|
|
143
|
+
| 'identity' // No hash is used, the message to be 32 bytes
|
|
144
|
+
|
|
139
145
|
export interface SignMessageParams {
|
|
140
146
|
signerAddress: string
|
|
141
147
|
signerKeyType?: KeyType
|
|
142
148
|
message: string
|
|
149
|
+
messageHasher: MessageHasher
|
|
143
150
|
}
|
|
144
|
-
assertType<Eq<SignMessageParams, { message: string } & SignerAddress>>()
|
|
151
|
+
assertType<Eq<SignMessageParams, { message: string; messageHasher: MessageHasher } & SignerAddress>>()
|
|
145
152
|
export interface SignMessageResult {
|
|
146
153
|
signature: string
|
|
147
154
|
}
|