UNPKG

4.35 kBJavaScriptView Raw
1const bcrypt = require('../bcrypt')
2
3test('salt_length', () => {
4 const salt = bcrypt.genSaltSync(13);
5 expect(salt).toHaveLength(29);
6 const [_, version, rounds] = salt.split('$');
7 expect(version).toStrictEqual('2b')
8 expect(rounds).toStrictEqual('13')
9})
10
11test('salt_no_params', () => {
12 const salt = bcrypt.genSaltSync();
13 const [_, version, rounds] = salt.split('$');
14 expect(version).toStrictEqual('2b')
15 expect(rounds).toStrictEqual('10')
16})
17
18test('salt_rounds_is_string_number', () => {
19 expect(() => bcrypt.genSaltSync('10')).toThrowError('rounds must be a number');
20})
21
22test('salt_rounds_is_NaN', () => {
23 expect(() => bcrypt.genSaltSync('b')).toThrowError("rounds must be a number");
24})
25
26test('salt_minor_a', () => {
27 const salt = bcrypt.genSaltSync(10, 'a');
28 const [_, version, rounds] = salt.split('$');
29 expect(version).toStrictEqual('2a')
30 expect(rounds).toStrictEqual('10')
31})
32
33test('salt_minor_b', () => {
34 const salt = bcrypt.genSaltSync(10, 'b');
35 const [_, version, rounds] = salt.split('$');
36 expect(version).toStrictEqual('2b')
37 expect(rounds).toStrictEqual('10')
38})
39
40test('hash', () => {
41 expect(() => bcrypt.hashSync('password', bcrypt.genSaltSync(10))).not.toThrow()
42})
43
44test('hash_rounds', () => {
45 const hash = bcrypt.hashSync('password', 8);
46 expect(bcrypt.getRounds(hash)).toStrictEqual(8)
47})
48
49test('hash_empty_string', () => {
50 expect(() => bcrypt.hashSync('', bcrypt.genSaltSync(10))).not.toThrow();
51 expect(() => bcrypt.hashSync('password', '')).toThrowError('Invalid salt. Salt must be in the form of: $Vers$log2(NumRounds)$saltvalue');
52 expect(() => bcrypt.hashSync('', '')).toThrowError('Invalid salt. Salt must be in the form of: $Vers$log2(NumRounds)$saltvalue');
53})
54
55test('hash_pw_no_params', () => {
56 expect(() => bcrypt.hashSync()).toThrow('data and salt arguments required');
57})
58
59test('hash_pw_one_param', () => {
60 expect(() => bcrypt.hashSync('password')).toThrow('data and salt arguments required');
61})
62
63test('hash_pw_not_hash_str', () => {
64 expect(() => bcrypt.hashSync('password', {})).toThrow("data must be a string or Buffer and salt must either be a salt string or a number of rounds")
65})
66
67test('hash_salt_validity', () => {
68 expect(2);
69 expect(bcrypt.hashSync('password', '$2a$10$somesaltyvaluertsetrse')).toBeDefined()
70 expect(() => bcrypt.hashSync('password', 'some$value')).toThrow('Invalid salt. Salt must be in the form of: $Vers$log2(NumRounds)$saltvalue')
71})
72
73test('verify_salt', () => {
74 const salt = bcrypt.genSaltSync(10);
75 const split_salt = salt.split('$');
76 expect(split_salt[1]).toStrictEqual('2b')
77 expect(split_salt[2]).toStrictEqual('10')
78})
79
80test('verify_salt_min_rounds', () => {
81 const salt = bcrypt.genSaltSync(1);
82 const split_salt = salt.split('$');
83 expect(split_salt[1]).toStrictEqual('2b')
84 expect(split_salt[2]).toStrictEqual('04')
85})
86
87test('verify_salt_max_rounds', () => {
88 const salt = bcrypt.genSaltSync(100);
89 const split_salt = salt.split('$');
90 expect(split_salt[1]).toStrictEqual('2b')
91 expect(split_salt[2]).toStrictEqual('31')
92})
93
94test('hash_compare', () => {
95 const salt = bcrypt.genSaltSync(10);
96 expect(29).toStrictEqual(salt.length)
97 const hash = bcrypt.hashSync("test", salt);
98 expect(bcrypt.compareSync("test", hash)).toBeDefined()
99 expect(!(bcrypt.compareSync("blah", hash))).toBeDefined()
100})
101
102test('hash_compare_empty_strings', () => {
103 expect(!(bcrypt.compareSync("", "password"))).toBeDefined()
104 expect(!(bcrypt.compareSync("", ""))).toBeDefined()
105 expect(!(bcrypt.compareSync("password", ""))).toBeDefined()
106})
107
108test('hash_compare_invalid_strings', () => {
109 const fullString = 'envy1362987212538';
110 const hash = '$2a$10$XOPbrlUPQdwdJUpSrIF6X.LbE14qsMmKGhM1A8W9iqaG3vv1BD7WC';
111 const wut = ':';
112 expect(bcrypt.compareSync(fullString, hash)).toBe(true);
113 expect(bcrypt.compareSync(fullString, wut)).toBe(false);
114})
115
116test('getRounds', () => {
117 const hash = bcrypt.hashSync("test", bcrypt.genSaltSync(9));
118 expect(9).toStrictEqual(bcrypt.getRounds(hash))
119})
120
121test('getRounds', () => {
122 const hash = bcrypt.hashSync("test", bcrypt.genSaltSync(9));
123 expect(9).toStrictEqual(bcrypt.getRounds(hash))
124 expect(() => bcrypt.getRounds('')).toThrow("invalid hash provided");
125});