-
Notifications
You must be signed in to change notification settings - Fork 70
/
Copy pathpadding.js
51 lines (42 loc) · 1.63 KB
/
padding.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
const test = require('brittle')
const sodium = require('..')
test('sodium_pad / sodium_unpad', function (t) {
for (let i = 0; i < 2000; i++) {
const binLen = sodium.randombytes_uniform(200)
const blocksize = 1 + sodium.randombytes_uniform(100)
const binPaddedMaxlen = binLen + (blocksize - (binLen % blocksize))
const bingPaddedLong = Buffer.alloc(binPaddedMaxlen + 1)
const binPaddedLen = bingPaddedLong.slice(0, binPaddedMaxlen)
sodium.randombytes_buf(binPaddedLen)
const smallThrow = didThrow(function () {
sodium.sodium_pad(binPaddedLen.slice(0, binPaddedMaxlen - 1), binLen, blocksize)
})
if (smallThrow === false) t.fail('did not throw')
const zeroThrow = didThrow(function () {
sodium.sodium_pad(binPaddedLen, binLen, 0)
})
if (zeroThrow === false) t.fail('did not throw')
sodium.sodium_pad(bingPaddedLong, binLen, blocksize)
const binUnpaddedLen = sodium.sodium_pad(binPaddedLen, binLen, blocksize)
if (binUnpaddedLen !== binPaddedMaxlen) t.fail('binUnpaddedLen was not same')
const largeThrow = didThrow(function () {
sodium.sodium_unpad(binPaddedLen, binUnpaddedLen, binPaddedMaxlen + 1)
})
if (largeThrow === false) t.fail('did not throw')
const emptyThrow = didThrow(function () {
sodium.sodium_unpad(binPaddedLen, binUnpaddedLen, 0)
})
if (emptyThrow === false) t.fail('did not throw')
const len2 = sodium.sodium_unpad(binPaddedLen, binUnpaddedLen, blocksize)
if (len2 !== binLen) t.fail('len2 was not same')
}
t.pass()
})
function didThrow (fn) {
try {
fn()
return false
} catch (ex) {
return true
}
}