-
Notifications
You must be signed in to change notification settings - Fork 4
/
encrypt-worker.js
62 lines (51 loc) · 1.23 KB
/
encrypt-worker.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/* eslint-env worker */
const nacl = require('nacl-stream')
onmessage = function (ev) {
switch (ev.data.name) {
case 'ENCRYPT_START': {
return startEncryption(ev.data.key, ev.data.nonce, ev.data.maxChunkLength)
}
case 'ENCRYPT_CHUNK': {
return encryptChunk(ev.data.chunk, ev.data.isLast)
}
case 'ENCRYPT_FINISH': {
return finishEncryption()
}
case 'ENCRYPT_CANCEL': {
return cancelEncryption(ev.data.reason)
}
default: {
throw new Error('worker received unknown message ' + ev.data.name)
}
}
}
let encryptor = null
function startEncryption (key, nonce, maxChunkLength) {
encryptor = nacl.stream.createEncryptor(key, nonce, maxChunkLength)
postMessage({
name: 'ENCRYPT_START_OK'
})
}
function encryptChunk (chunk, isLast) {
var encryptedChunk = encryptor.encryptChunk(chunk, isLast)
postMessage({
name: 'ENCRYPT_CHUNK_OK',
encryptedChunk: encryptedChunk,
isLast: isLast
})
}
function finishEncryption () {
encryptor.clean()
encryptor = null
postMessage({
name: 'ENCRYPT_FINISH_OK'
})
}
function cancelEncryption (reason) {
encryptor.clean()
encryptor = null
postMessage({
name: 'ENCRYPT_CANCEL_OK',
reason: reason
})
}