Add hmacSha{256, 512} functions (#233)
* Add hmacSha{256, 512} functions
* type
* Adjust
* Apply suggestions from code review
* Update packages/wasm-crypto/src/rs/hashing.rs
* Update packages/wasm-crypto/src/rs/hashing.rs
* Update packages/wasm-crypto/src/rs/hashing.rs
* Fix Rust side
* naming for wasm interfaces
* Remove type
* Bump common
This commit is contained in:
@@ -28,8 +28,8 @@
|
||||
"@polkadot/wasm-crypto-wasm": "^4.3.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@polkadot/util": "^7.8.2",
|
||||
"@polkadot/x-randomvalues": "^7.8.2"
|
||||
"@polkadot/util": "^7.9.1",
|
||||
"@polkadot/x-randomvalues": "^7.9.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@polkadot/util": "*",
|
||||
|
||||
@@ -9,11 +9,13 @@ import * as imports from './imports';
|
||||
|
||||
export { packageInfo } from './packageInfo';
|
||||
|
||||
const PTR_VEC = 8;
|
||||
|
||||
const wasmPromise = initWasm(wasmBytes, asmJsInit, imports).catch(() => null);
|
||||
|
||||
export const bip39Generate = withWasm((wasm) =>
|
||||
(words: 12 | 15 | 18 | 21 | 24): string => {
|
||||
wasm.ext_bip39_generate(8, words);
|
||||
wasm.ext_bip39_generate(PTR_VEC, words);
|
||||
|
||||
return resultString();
|
||||
}
|
||||
@@ -23,7 +25,7 @@ export const bip39ToEntropy = withWasm((wasm) =>
|
||||
(phrase: string): Uint8Array => {
|
||||
const [ptr0, len0] = allocString(phrase);
|
||||
|
||||
wasm.ext_bip39_to_entropy(8, ptr0, len0);
|
||||
wasm.ext_bip39_to_entropy(PTR_VEC, ptr0, len0);
|
||||
|
||||
return resultU8a();
|
||||
}
|
||||
@@ -34,7 +36,7 @@ export const bip39ToMiniSecret = withWasm((wasm) =>
|
||||
const [ptr0, len0] = allocString(phrase);
|
||||
const [ptr1, len1] = allocString(password);
|
||||
|
||||
wasm.ext_bip39_to_mini_secret(8, ptr0, len0, ptr1, len1);
|
||||
wasm.ext_bip39_to_mini_secret(PTR_VEC, ptr0, len0, ptr1, len1);
|
||||
|
||||
return resultU8a();
|
||||
}
|
||||
@@ -45,7 +47,7 @@ export const bip39ToSeed = withWasm((wasm) =>
|
||||
const [ptr0, len0] = allocString(phrase);
|
||||
const [ptr1, len1] = allocString(password);
|
||||
|
||||
wasm.ext_bip39_to_seed(8, ptr0, len0, ptr1, len1);
|
||||
wasm.ext_bip39_to_seed(PTR_VEC, ptr0, len0, ptr1, len1);
|
||||
|
||||
return resultU8a();
|
||||
}
|
||||
@@ -64,7 +66,7 @@ export const ed25519KeypairFromSeed = withWasm((wasm) =>
|
||||
(seed: Uint8Array): Uint8Array => {
|
||||
const [ptr0, len0] = allocU8a(seed);
|
||||
|
||||
wasm.ext_ed_from_seed(8, ptr0, len0);
|
||||
wasm.ext_ed_from_seed(PTR_VEC, ptr0, len0);
|
||||
|
||||
return resultU8a();
|
||||
}
|
||||
@@ -76,7 +78,7 @@ export const ed25519Sign = withWasm((wasm) =>
|
||||
const [ptr1, len1] = allocU8a(seckey);
|
||||
const [ptr2, len2] = allocU8a(message);
|
||||
|
||||
wasm.ext_ed_sign(8, ptr0, len0, ptr1, len1, ptr2, len2);
|
||||
wasm.ext_ed_sign(PTR_VEC, ptr0, len0, ptr1, len1, ptr2, len2);
|
||||
|
||||
return resultU8a();
|
||||
}
|
||||
@@ -98,7 +100,7 @@ export const sr25519DeriveKeypairHard = withWasm((wasm) =>
|
||||
const [ptr0, len0] = allocU8a(pair);
|
||||
const [ptr1, len1] = allocU8a(cc);
|
||||
|
||||
wasm.ext_sr_derive_keypair_hard(8, ptr0, len0, ptr1, len1);
|
||||
wasm.ext_sr_derive_keypair_hard(PTR_VEC, ptr0, len0, ptr1, len1);
|
||||
|
||||
return resultU8a();
|
||||
}
|
||||
@@ -109,7 +111,7 @@ export const sr25519DeriveKeypairSoft = withWasm((wasm) =>
|
||||
const [ptr0, len0] = allocU8a(pair);
|
||||
const [ptr1, len1] = allocU8a(cc);
|
||||
|
||||
wasm.ext_sr_derive_keypair_soft(8, ptr0, len0, ptr1, len1);
|
||||
wasm.ext_sr_derive_keypair_soft(PTR_VEC, ptr0, len0, ptr1, len1);
|
||||
|
||||
return resultU8a();
|
||||
}
|
||||
@@ -120,7 +122,7 @@ export const sr25519DerivePublicSoft = withWasm((wasm) =>
|
||||
const [ptr0, len0] = allocU8a(pubkey);
|
||||
const [ptr1, len1] = allocU8a(cc);
|
||||
|
||||
wasm.ext_sr_derive_public_soft(8, ptr0, len0, ptr1, len1);
|
||||
wasm.ext_sr_derive_public_soft(PTR_VEC, ptr0, len0, ptr1, len1);
|
||||
|
||||
return resultU8a();
|
||||
}
|
||||
@@ -130,7 +132,7 @@ export const sr25519KeypairFromSeed = withWasm((wasm) =>
|
||||
(seed: Uint8Array): Uint8Array => {
|
||||
const [ptr0, len0] = allocU8a(seed);
|
||||
|
||||
wasm.ext_sr_from_seed(8, ptr0, len0);
|
||||
wasm.ext_sr_from_seed(PTR_VEC, ptr0, len0);
|
||||
|
||||
return resultU8a();
|
||||
}
|
||||
@@ -142,7 +144,7 @@ export const sr25519Sign = withWasm((wasm) =>
|
||||
const [ptr1, len1] = allocU8a(secret);
|
||||
const [ptr2, len2] = allocU8a(message);
|
||||
|
||||
wasm.ext_sr_sign(8, ptr0, len0, ptr1, len1, ptr2, len2);
|
||||
wasm.ext_sr_sign(PTR_VEC, ptr0, len0, ptr1, len1, ptr2, len2);
|
||||
|
||||
return resultU8a();
|
||||
}
|
||||
@@ -164,7 +166,7 @@ export const sr25519Agree = withWasm((wasm) =>
|
||||
const [ptr0, len0] = allocU8a(pubkey);
|
||||
const [ptr1, len1] = allocU8a(secret);
|
||||
|
||||
wasm.ext_sr_agree(8, ptr0, len0, ptr1, len1);
|
||||
wasm.ext_sr_agree(PTR_VEC, ptr0, len0, ptr1, len1);
|
||||
|
||||
return resultU8a();
|
||||
}
|
||||
@@ -177,7 +179,7 @@ export const vrfSign = withWasm((wasm) =>
|
||||
const [ptr2, len2] = allocU8a(message);
|
||||
const [ptr3, len3] = allocU8a(extra);
|
||||
|
||||
wasm.ext_vrf_sign(8, ptr0, len0, ptr1, len1, ptr2, len2, ptr3, len3);
|
||||
wasm.ext_vrf_sign(PTR_VEC, ptr0, len0, ptr1, len1, ptr2, len2, ptr3, len3);
|
||||
|
||||
return resultU8a();
|
||||
}
|
||||
@@ -201,7 +203,29 @@ export const blake2b = withWasm((wasm) =>
|
||||
const [ptr0, len0] = allocU8a(data);
|
||||
const [ptr1, len1] = allocU8a(key);
|
||||
|
||||
wasm.ext_blake2b(8, ptr0, len0, ptr1, len1, size);
|
||||
wasm.ext_blake2b(PTR_VEC, ptr0, len0, ptr1, len1, size);
|
||||
|
||||
return resultU8a();
|
||||
}
|
||||
);
|
||||
|
||||
export const hmacSha256 = withWasm((wasm) =>
|
||||
(key: Uint8Array, data: Uint8Array): Uint8Array => {
|
||||
const [ptr0, len0] = allocU8a(key);
|
||||
const [ptr1, len1] = allocU8a(data);
|
||||
|
||||
wasm.ext_hmac_sha256(PTR_VEC, ptr0, len0, ptr1, len1);
|
||||
|
||||
return resultU8a();
|
||||
}
|
||||
);
|
||||
|
||||
export const hmacSha512 = withWasm((wasm) =>
|
||||
(key: Uint8Array, data: Uint8Array): Uint8Array => {
|
||||
const [ptr0, len0] = allocU8a(key);
|
||||
const [ptr1, len1] = allocU8a(data);
|
||||
|
||||
wasm.ext_hmac_sha512(PTR_VEC, ptr0, len0, ptr1, len1);
|
||||
|
||||
return resultU8a();
|
||||
}
|
||||
@@ -211,7 +235,7 @@ export const keccak256 = withWasm((wasm) =>
|
||||
(data: Uint8Array): Uint8Array => {
|
||||
const [ptr0, len0] = allocU8a(data);
|
||||
|
||||
wasm.ext_keccak256(8, ptr0, len0);
|
||||
wasm.ext_keccak256(PTR_VEC, ptr0, len0);
|
||||
|
||||
return resultU8a();
|
||||
}
|
||||
@@ -221,7 +245,7 @@ export const keccak512 = withWasm((wasm) =>
|
||||
(data: Uint8Array): Uint8Array => {
|
||||
const [ptr0, len0] = allocU8a(data);
|
||||
|
||||
wasm.ext_keccak512(8, ptr0, len0);
|
||||
wasm.ext_keccak512(PTR_VEC, ptr0, len0);
|
||||
|
||||
return resultU8a();
|
||||
}
|
||||
@@ -232,7 +256,7 @@ export const pbkdf2 = withWasm((wasm) =>
|
||||
const [ptr0, len0] = allocU8a(data);
|
||||
const [ptr1, len1] = allocU8a(salt);
|
||||
|
||||
wasm.ext_pbkdf2(8, ptr0, len0, ptr1, len1, rounds);
|
||||
wasm.ext_pbkdf2(PTR_VEC, ptr0, len0, ptr1, len1, rounds);
|
||||
|
||||
return resultU8a();
|
||||
}
|
||||
@@ -243,7 +267,7 @@ export const scrypt = withWasm((wasm) =>
|
||||
const [ptr0, len0] = allocU8a(password);
|
||||
const [ptr1, len1] = allocU8a(salt);
|
||||
|
||||
wasm.ext_scrypt(8, ptr0, len0, ptr1, len1, log2n, r, p);
|
||||
wasm.ext_scrypt(PTR_VEC, ptr0, len0, ptr1, len1, log2n, r, p);
|
||||
|
||||
return resultU8a();
|
||||
}
|
||||
@@ -253,7 +277,7 @@ export const sha256 = withWasm((wasm) =>
|
||||
(data: Uint8Array): Uint8Array => {
|
||||
const [ptr0, len0] = allocU8a(data);
|
||||
|
||||
wasm.ext_sha256(8, ptr0, len0);
|
||||
wasm.ext_sha256(PTR_VEC, ptr0, len0);
|
||||
|
||||
return resultU8a();
|
||||
}
|
||||
@@ -263,7 +287,7 @@ export const sha512 = withWasm((wasm) =>
|
||||
(data: Uint8Array): Uint8Array => {
|
||||
const [ptr0, len0] = allocU8a(data);
|
||||
|
||||
wasm.ext_sha512(8, ptr0, len0);
|
||||
wasm.ext_sha512(PTR_VEC, ptr0, len0);
|
||||
|
||||
return resultU8a();
|
||||
}
|
||||
@@ -273,7 +297,7 @@ export const twox = withWasm((wasm) =>
|
||||
(data: Uint8Array, rounds: number) => {
|
||||
const [ptr0, len0] = allocU8a(data);
|
||||
|
||||
wasm.ext_twox(8, ptr0, len0, rounds);
|
||||
wasm.ext_twox(PTR_VEC, ptr0, len0, rounds);
|
||||
|
||||
return resultU8a();
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
use blake2_rfc::blake2b::blake2b;
|
||||
use byteorder::{ByteOrder, LittleEndian};
|
||||
use hmac::Hmac;
|
||||
use hmac::{Hmac, Mac};
|
||||
use pbkdf2::pbkdf2;
|
||||
use scrypt::{ScryptParams, scrypt};
|
||||
use sha2::{Digest, Sha256, Sha512};
|
||||
@@ -41,6 +41,39 @@ pub fn ext_blake2b(data: &[u8], key: &[u8], size: u32) -> Vec<u8> {
|
||||
.to_vec()
|
||||
}
|
||||
|
||||
/// hmac with sha256
|
||||
#[wasm_bindgen]
|
||||
pub fn ext_hmac_sha256(key: &[u8], data: &[u8]) -> Vec<u8> {
|
||||
match Hmac::<Sha256>::new_varkey(key){
|
||||
Ok(mut mac) => {
|
||||
mac.input(data);
|
||||
|
||||
mac
|
||||
.result()
|
||||
.code()
|
||||
.to_vec()
|
||||
},
|
||||
Err(_) => panic!("Invalid key provided.")
|
||||
}
|
||||
}
|
||||
|
||||
/// hmac with sha512
|
||||
#[wasm_bindgen]
|
||||
pub fn ext_hmac_sha512(key: &[u8], data: &[u8]) -> Vec<u8> {
|
||||
match Hmac::<Sha512>::new_varkey(key) {
|
||||
Ok(mut mac) => {
|
||||
mac.input(data);
|
||||
|
||||
mac
|
||||
.result()
|
||||
.code()
|
||||
.to_vec()
|
||||
},
|
||||
Err(_) => panic!("Invalid key provided.")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// Create a keccak256 hash for the specified input
|
||||
///
|
||||
// * data: Arbitrary data to be hashed
|
||||
@@ -85,7 +118,7 @@ pub fn ext_pbkdf2(data: &[u8], salt: &[u8], rounds: u32) -> Vec<u8> {
|
||||
let mut result = [0u8; 64];
|
||||
|
||||
// we cast to usize here - due to the WASM, we'd rather have u32 inputs
|
||||
pbkdf2::<Hmac<Sha512>>(data, salt, rounds as usize, &mut result);
|
||||
pbkdf2::<Hmac::<Sha512>>(data, salt, rounds as usize, &mut result);
|
||||
|
||||
result.to_vec()
|
||||
}
|
||||
@@ -105,7 +138,7 @@ pub fn ext_scrypt(password: &[u8], salt: &[u8], log2_n: u8, r: u32, p: u32) -> V
|
||||
let mut result = [0u8; 64];
|
||||
|
||||
match scrypt(password, salt, ¶ms, &mut result) {
|
||||
Ok(_) => return result.to_vec(),
|
||||
Ok(_) => result.to_vec(),
|
||||
Err(_) => panic!("Invalid scrypt hash.")
|
||||
}
|
||||
}
|
||||
@@ -186,6 +219,26 @@ pub mod tests {
|
||||
assert_eq!(hash[..], expected[..]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn can_hmac_sha256() {
|
||||
let key = b"secret";
|
||||
let data = b"some message";
|
||||
let expected = hex!("f28a70b41263840e5c059a0a733336e0957efba87902aa8cca11441d4b0c96d7");
|
||||
let hash = ext_hmac_sha256(key, data);
|
||||
|
||||
assert_eq!(hash[..], expected[..]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn can_hmac_sha512() {
|
||||
let key = b"secret";
|
||||
let data = b"some message";
|
||||
let expected = hex!("295832e97ed77be75a9fa98029497e4a722c4b9a2f21b39d34f1befa931a39ec520fd24711d6f5c03501384ea66b83066a01a82c57a0460f8cd1f471fcce5841");
|
||||
let hash = ext_hmac_sha512(key, data);
|
||||
|
||||
assert_eq!(hash[..], expected[..]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn can_keccak512() {
|
||||
let data = b"test";
|
||||
|
||||
@@ -7,36 +7,71 @@
|
||||
export interface WasmCryptoInstance {
|
||||
memory: WebAssembly.Memory;
|
||||
|
||||
// wbindgen functions (required and used internally)
|
||||
|
||||
__wbindgen_free(a: number, b: number): void;
|
||||
|
||||
__wbindgen_malloc(a: number): number;
|
||||
|
||||
__wbindgen_realloc(a: number, b: number, c: number): number;
|
||||
|
||||
__wbindgen_exn_store(a: number): void;
|
||||
|
||||
ext_bip39_generate(a: number, b: number): void;
|
||||
ext_bip39_to_entropy(a: number, b: number, c: number): void;
|
||||
ext_bip39_to_mini_secret(a: number, b: number, c: number, d: number, e: number): void;
|
||||
ext_bip39_to_seed(a: number, b: number, c: number, d: number, e: number): void;
|
||||
ext_bip39_validate(a: number, b: number): number;
|
||||
ext_ed_from_seed(a: number, b: number, c: number): void;
|
||||
ext_ed_sign(a: number, b: number, c: number, d: number, e: number, f: number, g: number): void;
|
||||
ext_ed_verify(a: number, b: number, c: number, d: number, e: number, f: number): number;
|
||||
ext_blake2b(a: number, b: number, c: number, d: number, e: number, f: number): void;
|
||||
ext_keccak256(a: number, b: number, c: number): void;
|
||||
ext_keccak512(a: number, b: number, c: number): void;
|
||||
ext_pbkdf2(a: number, b: number, c: number, d: number, e: number, f: number): void;
|
||||
ext_scrypt(a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number): void;
|
||||
ext_sha256(a: number, b: number, c: number): void;
|
||||
ext_sha512(a: number, b: number, c: number): void;
|
||||
ext_twox(a: number, b: number, c: number, d: number): void;
|
||||
ext_sr_derive_keypair_hard(a: number, b: number, c: number, d: number, e: number): void;
|
||||
ext_sr_derive_keypair_soft(a: number, b: number, c: number, d: number, e: number): void;
|
||||
ext_sr_derive_public_soft(a: number, b: number, c: number, d: number, e: number): void;
|
||||
ext_sr_from_seed(a: number, b: number, c: number): void;
|
||||
ext_sr_sign(a: number, b: number, c: number, d: number, e: number, f: number, g: number): void;
|
||||
ext_sr_verify(a: number, b: number, c: number, d: number, e: number, f: number): number;
|
||||
ext_sr_agree(a: number, b: number, c: number, d: number, e: number): void;
|
||||
ext_vrf_sign(a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number): void;
|
||||
ext_vrf_verify(a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number): number;
|
||||
// exposed functions
|
||||
|
||||
ext_bip39_generate(resLen: 8, words: number): void;
|
||||
|
||||
ext_bip39_to_entropy(resLen: 8, ptrPhrase: number, lenPhrase: number): void;
|
||||
|
||||
ext_bip39_to_mini_secret(resLen: 8, ptrPhrase: number, lenPhrase: number, ptrPass: number, lenPass: number): void;
|
||||
|
||||
ext_bip39_to_seed(resLen: 8, ptrPhrase: number, lenPhrase: number, ptrPass: number, lenPass: number): void;
|
||||
|
||||
ext_bip39_validate(ptrPhrase: number, lenPhrase: number): number;
|
||||
|
||||
ext_ed_from_seed(resLen: 8, ptrSeed: number, lenSeed: number): void;
|
||||
|
||||
ext_ed_sign(resLen: 8, ptrPub: number, lenPub: number, ptrSec: number, lenSec: number, ptrMsg: number, lenMsg: number): void;
|
||||
|
||||
ext_ed_verify(ptrSig: number, lenSig: number, ptrMsg: number, lenMsg: number, ptrPub: number, lenPub: number): number;
|
||||
|
||||
ext_blake2b(resLen: 8, ptrData: number, lenData: number, ptrKey: number, lenKey: number, size: number): void;
|
||||
|
||||
ext_hmac_sha256(resLen: 8, ptrKey: number, lenKey: number, ptrData: number, lenData: number): void;
|
||||
|
||||
ext_hmac_sha512(resLen: 8, ptrKey: number, lenKey: number, ptrData: number, lenData: number): void;
|
||||
|
||||
ext_keccak256(resLen: 8, ptrData: number, lenData: number): void;
|
||||
|
||||
ext_keccak512(resLen: 8, ptrData: number, lenData: number): void;
|
||||
|
||||
ext_pbkdf2(resLen: 8, ptrData: number, lenData: number, ptrSalt: number, lenSalt: number, rounds: number): void;
|
||||
|
||||
ext_scrypt(resLen: 8, ptrPass: number, lenPass: number, ptrSalt: number, lenSalt: number, log2n: number, r: number, p: number): void;
|
||||
|
||||
ext_sha256(resLen: 8, ptrData: number, lenData: number): void;
|
||||
|
||||
ext_sha512(resLen: 8, ptrData: number, lenData: number): void;
|
||||
|
||||
ext_twox(resLen: 8, ptrData: number, lenData: number, rounds: number): void;
|
||||
|
||||
ext_sr_derive_keypair_hard(resLen: 8, ptrPair: number, lenPair: number, ptrCc: number, lenCc: number): void;
|
||||
|
||||
ext_sr_derive_keypair_soft(resLen: 8, ptrPub: number, lenPub: number, ptrCc: number, lenCc: number): void;
|
||||
|
||||
ext_sr_derive_public_soft(resLen: 8, ptrPub: number, lenPub: number, ptrCc: number, lenCc: number): void;
|
||||
|
||||
ext_sr_from_seed(resLen: 8, ptrSeed: number, lenSeed: number): void;
|
||||
|
||||
ext_sr_sign(resLen: 8, ptrPub: number, lenPub: number, ptrSec: number, lenSec: number, ptrMsg: number, lenMsg: number): void;
|
||||
|
||||
ext_sr_verify(ptrSig: number, lenSig: number, ptrMsg: number, lenMsg: number, ptrPub: number, lenPub: number): number;
|
||||
|
||||
ext_sr_agree(resLen: 8, ptrPub: number, lenPub: number, ptrSec: number, lenSec: number): void;
|
||||
|
||||
ext_vrf_sign(resLen: 8, ptrSec: number, lenSec: number, ptrCtx: number, lenCtx: number, ptrMsg: number, lenMsg: number, ptrExtra: number, lenExtra: number): void;
|
||||
|
||||
ext_vrf_verify(ptrPub: number, lenPub: number, ptrCtx: number, lenCtx: number, ptrMsg: number, lenMsg: number, ptrExtra: number, lenExtra: number, ptrProof: number, lenProof: number): number;
|
||||
}
|
||||
|
||||
export type AsmCreator = (wbg: Record<string, WebAssembly.ImportValue>) => WasmCryptoInstance;
|
||||
|
||||
@@ -11,6 +11,22 @@ function blake2bHash (wasm) {
|
||||
assert(hash === '0xba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d17d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923', 'ERROR: blake2bHash does not match');
|
||||
}
|
||||
|
||||
function hmacSha256 (wasm) {
|
||||
const hash = u8aToHex(wasm.hmacSha256(stringToU8a('secret'), stringToU8a('some message')));
|
||||
|
||||
console.log('\tRES', hash);
|
||||
|
||||
assert(hash === '0xf28a70b41263840e5c059a0a733336e0957efba87902aa8cca11441d4b0c96d7', 'ERROR: hmacSha256 does not match');
|
||||
}
|
||||
|
||||
function hmacSha512 (wasm) {
|
||||
const hash = u8aToHex(wasm.hmacSha512(stringToU8a('secret'), stringToU8a('some message')));
|
||||
|
||||
console.log('\tRES', hash);
|
||||
|
||||
assert(hash === '0x295832e97ed77be75a9fa98029497e4a722c4b9a2f21b39d34f1befa931a39ec520fd24711d6f5c03501384ea66b83066a01a82c57a0460f8cd1f471fcce5841', 'ERROR: hmacSha512 does not match');
|
||||
}
|
||||
|
||||
function keccak256 (wasm) {
|
||||
const hash = u8aToHex(wasm.keccak256(stringToU8a('test value')));
|
||||
|
||||
@@ -71,6 +87,8 @@ function twoxHash (wasm) {
|
||||
|
||||
module.exports = {
|
||||
blake2bHash,
|
||||
hmacSha256,
|
||||
hmacSha512,
|
||||
keccak256,
|
||||
keccak512,
|
||||
pbkdf2Hash,
|
||||
|
||||
76
yarn.lock
76
yarn.lock
@@ -1363,7 +1363,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@babel/runtime@npm:^7.16.0, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.8.4":
|
||||
"@babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.8.4":
|
||||
version: 7.16.3
|
||||
resolution: "@babel/runtime@npm:7.16.3"
|
||||
dependencies:
|
||||
@@ -1931,18 +1931,18 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@polkadot/util@npm:^7.8.2":
|
||||
version: 7.8.2
|
||||
resolution: "@polkadot/util@npm:7.8.2"
|
||||
"@polkadot/util@npm:^7.9.1":
|
||||
version: 7.9.1
|
||||
resolution: "@polkadot/util@npm:7.9.1"
|
||||
dependencies:
|
||||
"@babel/runtime": ^7.16.0
|
||||
"@polkadot/x-textdecoder": 7.8.2
|
||||
"@polkadot/x-textencoder": 7.8.2
|
||||
"@babel/runtime": ^7.16.3
|
||||
"@polkadot/x-textdecoder": 7.9.1
|
||||
"@polkadot/x-textencoder": 7.9.1
|
||||
"@types/bn.js": ^4.11.6
|
||||
bn.js: ^4.12.0
|
||||
camelcase: ^6.2.0
|
||||
camelcase: ^6.2.1
|
||||
ip-regex: ^4.3.0
|
||||
checksum: 6c7320c37c14b9a444a931654a728a5eca365554270168bcbd186dc9e9901240f07a2c1d8063c5833d7c1bdb7f081f9ae72a7f17e29420ffa9c12d2cfe65aa90
|
||||
checksum: 4da447116cafafc8138d7fbc9080b5712d781d406fb302a057476f0d51065c475d582bc90b19f11f42f657881e730ca376c1db15a329790f70bf013ac5106772
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1967,52 +1967,52 @@ __metadata:
|
||||
resolution: "@polkadot/wasm-crypto@workspace:packages/wasm-crypto"
|
||||
dependencies:
|
||||
"@babel/runtime": ^7.16.3
|
||||
"@polkadot/util": ^7.8.2
|
||||
"@polkadot/util": ^7.9.1
|
||||
"@polkadot/wasm-crypto-asmjs": ^4.3.1
|
||||
"@polkadot/wasm-crypto-wasm": ^4.3.1
|
||||
"@polkadot/x-randomvalues": ^7.8.2
|
||||
"@polkadot/x-randomvalues": ^7.9.1
|
||||
peerDependencies:
|
||||
"@polkadot/util": "*"
|
||||
"@polkadot/x-randomvalues": "*"
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@polkadot/x-global@npm:7.8.2":
|
||||
version: 7.8.2
|
||||
resolution: "@polkadot/x-global@npm:7.8.2"
|
||||
"@polkadot/x-global@npm:7.9.1":
|
||||
version: 7.9.1
|
||||
resolution: "@polkadot/x-global@npm:7.9.1"
|
||||
dependencies:
|
||||
"@babel/runtime": ^7.16.0
|
||||
checksum: 9fac7a7a6b6c1c2507e9bd6c04874627827202f789b35f76a4945b46e5afb1f726c6683250261b5b022531b308e60cda7b324bd5912b35ad14640515063f1358
|
||||
"@babel/runtime": ^7.16.3
|
||||
checksum: 8f03cdebfeea1c301f7bffd11900977d802e72c3e2cf51302b5c49d78514f82089afc0ee28293e54da07ffec3e1870c2b53fba02ffe22cfde478232dc3d597e9
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@polkadot/x-randomvalues@npm:^7.8.2":
|
||||
version: 7.8.2
|
||||
resolution: "@polkadot/x-randomvalues@npm:7.8.2"
|
||||
"@polkadot/x-randomvalues@npm:^7.9.1":
|
||||
version: 7.9.1
|
||||
resolution: "@polkadot/x-randomvalues@npm:7.9.1"
|
||||
dependencies:
|
||||
"@babel/runtime": ^7.16.0
|
||||
"@polkadot/x-global": 7.8.2
|
||||
checksum: 9f0927ed2429ed0f94ca5481b64eb378b139399282e9677637141bc4829bf76a85e37806d8050eab08b0969c54d2073d8f5899921a031c5c543ffda43ea0ed03
|
||||
"@babel/runtime": ^7.16.3
|
||||
"@polkadot/x-global": 7.9.1
|
||||
checksum: 46fe34aa7519a7bef3323ed681c31fd1c40433e33039c33a4673aa2c1396d3b6e0d95b67b28c1bdafc809810429a5d46dd78c79f00e328ea1b3e54b69b8122c4
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@polkadot/x-textdecoder@npm:7.8.2":
|
||||
version: 7.8.2
|
||||
resolution: "@polkadot/x-textdecoder@npm:7.8.2"
|
||||
"@polkadot/x-textdecoder@npm:7.9.1":
|
||||
version: 7.9.1
|
||||
resolution: "@polkadot/x-textdecoder@npm:7.9.1"
|
||||
dependencies:
|
||||
"@babel/runtime": ^7.16.0
|
||||
"@polkadot/x-global": 7.8.2
|
||||
checksum: 5e26717ce427070a5c9670517a998e7d822fe796b6ed67ed9aa06ad9d9971d88f3e8eb42ab2163a237f761390d9cc76791faa903e97085e65dc7c299926a9086
|
||||
"@babel/runtime": ^7.16.3
|
||||
"@polkadot/x-global": 7.9.1
|
||||
checksum: 4b494558f575da4a96adc283cda02265ca28be8bb01e10740aa078bca4bd91f3708b5ecfe5540b828eac280c9860b56a1461e4316a98d934388b4ebf444cf12e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@polkadot/x-textencoder@npm:7.8.2":
|
||||
version: 7.8.2
|
||||
resolution: "@polkadot/x-textencoder@npm:7.8.2"
|
||||
"@polkadot/x-textencoder@npm:7.9.1":
|
||||
version: 7.9.1
|
||||
resolution: "@polkadot/x-textencoder@npm:7.9.1"
|
||||
dependencies:
|
||||
"@babel/runtime": ^7.16.0
|
||||
"@polkadot/x-global": 7.8.2
|
||||
checksum: 3464d122aeaa2a45d3576c7862e0b703726cff86671b921a48a99d518209d9a13cfb86229f723003d3e91ce4d3b0f2bf48374becf5662fac890e229d2b31315d
|
||||
"@babel/runtime": ^7.16.3
|
||||
"@polkadot/x-global": 7.9.1
|
||||
checksum: afa5e0167cf023fa294ee1a7c07706e0f6be6b2f51e4be13db62515c7d8e21ae50a23421cd8604e56fed79b5ce51660f174670c6524ff12d92cb76a698ec4747
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -3180,10 +3180,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"camelcase@npm:^6.2.0":
|
||||
version: 6.2.0
|
||||
resolution: "camelcase@npm:6.2.0"
|
||||
checksum: 8335cfd0ecc472eae685896a42afd8c9dacd193a91f569120b931c87deb053a1ba82102031b9b48a4dbc1d18066caeacf2e4ace8c3c7f0d02936d348dc0b5a87
|
||||
"camelcase@npm:^6.2.0, camelcase@npm:^6.2.1":
|
||||
version: 6.2.1
|
||||
resolution: "camelcase@npm:6.2.1"
|
||||
checksum: d876272ef76391ebf8442fb7ea1d77e80ae179ce1339e021a8731b4895fd190dc19e148e045469cff5825d4c089089f3fff34d804d3f49115d55af97dd6ac0af
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
||||
Reference in New Issue
Block a user