Skip to content

Commit 0f088a9

Browse files
feat: add loadAllWasm
Contributed by @Carrick-K7
1 parent 8e315e0 commit 0f088a9

File tree

4 files changed

+91
-2
lines changed

4 files changed

+91
-2
lines changed

src/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ import { Iso97971 } from './pad/pad-iso97971.js';
6565
import { NoPadding } from './pad/pad-nopadding.js';
6666
import { ZeroPadding } from './pad/pad-zeropadding.js';
6767
import { HexFormatter } from './format/format-hex.js';
68+
import { loadAllWasm } from './utils/wasm-utils';
6869

6970
export default {
7071
lib: {
@@ -147,6 +148,8 @@ export default {
147148
OpenSSL: OpenSSLKdf
148149
},
149150

151+
loadAllWasm,
152+
150153
MD5,
151154
HmacMD5,
152155
SHA1,

src/utils/wasm-utils.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import pako from 'pako';
2+
import index from '../index';
3+
24
/**
35
* Check if WebAssembly is supported or not
46
*
@@ -46,3 +48,14 @@ export const loadWasm = async function(wasmBytes, imports) {
4648
var loadResult = await WebAssembly.instantiate(wasmBytes, imports);
4749
return loadResult.instance.exports;
4850
};
51+
52+
export const loadAllWasm = async function() {
53+
await Promise.allSettled(
54+
Object.values(index.algo).map(algo => {
55+
if (!algo.loadWasm) {
56+
return;
57+
}
58+
return algo.loadWasm();
59+
})
60+
);
61+
};

test/algo.rabbit.profile.test.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ const data = {};
44

55
beforeAll(async () => {
66
data.key = C.enc.Hex.parse('000102030405060708090a0b0c0d0e0f');
7-
// TODO: this should be put in C.Rabbit.loadWasm later
8-
await C.MD5.loadWasm();
97
await C.Rabbit.loadWasm();
108
});
119

test/load.all.wasm.test.js

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import C from '../src/index';
2+
3+
beforeAll(async () => {
4+
await C.loadAllWasm();
5+
});
6+
7+
describe('load-all0wasm-test', () => {
8+
test('testLoader', () => {
9+
expect(C.algo.MD5.loadWasm).not.toBeNull();
10+
expect(C.algo.SHA1.loadWasm).not.toBeNull();
11+
expect(C.algo.SHA3.loadWasm).not.toBeNull();
12+
expect(C.algo.SHA224.loadWasm).not.toBeNull();
13+
expect(C.algo.SHA256.loadWasm).not.toBeNull();
14+
expect(C.algo.SHA384.loadWasm).not.toBeNull();
15+
expect(C.algo.SHA512.loadWasm).not.toBeNull();
16+
expect(C.algo.RIPEMD160.loadWasm).not.toBeNull();
17+
expect(C.algo.EvpKDF.loadWasm).not.toBeNull();
18+
expect(C.algo.AES.loadWasm).not.toBeNull();
19+
expect(C.algo.Blowfish.loadWasm).not.toBeNull();
20+
expect(C.algo.DES.loadWasm).not.toBeNull();
21+
expect(C.algo.TripleDES.loadWasm).not.toBeNull();
22+
expect(C.algo.Rabbit.loadWasm).not.toBeNull();
23+
expect(C.algo.RabbitLegacy.loadWasm).not.toBeNull();
24+
expect(C.algo.RC4.loadWasm).not.toBeNull();
25+
});
26+
27+
test('testHasherAndEncryption', () => {
28+
expect(C.MD5('').toString()).toBe('d41d8cd98f00b204e9800998ecf8427e');
29+
expect(C.SHA1('').toString()).toBe('da39a3ee5e6b4b0d3255bfef95601890afd80709');
30+
expect(C.SHA224('').toString()).toBe('d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f');
31+
expect(C.SHA256('').toString()).toBe('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855');
32+
expect(C.SHA384('').toString()).toBe('38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b');
33+
expect(C.SHA512('').toString()).toBe('cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e');
34+
expect(C.SHA3('', { outputLength: 512 }).toString()).toBe('0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e');
35+
expect(C.RIPEMD160('').toString()).toBe('9c1185a5c5e9fc54612808977ee8f548b2258d31');
36+
37+
// evpkdf
38+
expect(C.EvpKDF('password', 'saltsalt', { keySize: (256+128)/32 }).toString()).toBe('fdbdf3419fff98bdb0241390f62a9db35f4aba29d77566377997314ebfc709f20b5ca7b1081f94b1ac12e3c8ba87d05a');
39+
// aes
40+
expect(C.AES.encrypt(C.enc.Hex.parse('00112233445566778899aabbccddeeff'), C.enc.Hex.parse('000102030405060708090a0b0c0d0e0f'), {
41+
mode: C.mode.ECB,
42+
padding: C.pad.NoPadding
43+
}).ciphertext.toString()).toBe('69c4e0d86a7b0430d8cdb78070b4c55a');
44+
// blowfish
45+
expect(C.Blowfish.encrypt('Test',
46+
'pass',
47+
{
48+
salt: C.enc.Hex.parse('AA00000000000000'),
49+
hasher: C.algo.SHA256
50+
}).toString()).toBe('U2FsdGVkX1+qAAAAAAAAAKTIU8MPrBdH');
51+
// des
52+
expect(C.DES.encrypt(C.enc.Hex.parse('0000000000000000'), C.enc.Hex.parse('8000000000000000'), {
53+
mode: C.mode.ECB,
54+
padding: C.pad.NoPadding
55+
}).ciphertext.toString()).toBe('95a8d72813daa94d');
56+
// tripleDES
57+
expect(C.TripleDES.encrypt(C.enc.Hex.parse('0000000000000000'), C.enc.Hex.parse('800101010101010180010101010101018001010101010101'), {
58+
mode: C.mode.ECB,
59+
padding: C.pad.NoPadding
60+
}).ciphertext.toString()).toBe('95a8d72813daa94d');
61+
// rabbit
62+
expect(C.Rabbit.encrypt(C.enc.Hex.parse('00000000000000000000000000000000'), C.enc.Hex.parse('0053a6f94c9ff24598eb3e91e4378add'), {
63+
iv: C.enc.Hex.parse('0d74db42a91077de')
64+
}).ciphertext.toString())
65+
.toBe('75d186d6bc6905c64f1b2dfdd51f7bfc');
66+
// rabbitLegacy
67+
expect(C.RabbitLegacy.encrypt(C.enc.Hex.parse('00000000000000000000000000000000'), C.enc.Hex.parse('00000000000000000000000000000000'), {
68+
iv: C.enc.Hex.parse('0000000000000000')
69+
}).ciphertext.toString())
70+
.toBe('edb70567375dcd7cd89554f85e27a7c6');
71+
// rc4
72+
expect(C.RC4.encrypt(C.enc.Hex.parse('0000000000000000'), C.enc.Hex.parse('0123456789abcdef')).ciphertext.toString())
73+
.toBe('7494c2e7104b0879');
74+
});
75+
});

0 commit comments

Comments
 (0)