@alephium/web3 0.5.0-rc.11 → 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/api/api-alephium.d.ts +56 -6
- package/dist/src/api/api-alephium.js +5 -3
- package/dist/src/api/api-explorer.d.ts +155 -6
- package/dist/src/api/api-explorer.js +5 -3
- 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 +4 -4
- package/src/api/api-alephium.ts +177 -180
- package/src/api/api-explorer.ts +249 -76
- package/src/signer/signer.ts +33 -9
- package/src/signer/types.ts +8 -1
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
|
}
|