You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					126 lines
				
				4.2 KiB
			
		
		
			
		
	
	
					126 lines
				
				4.2 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								const bcrypt = require('../bcrypt')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('salt_length', () => {
							 | 
						||
| 
								 | 
							
								    const salt = bcrypt.genSaltSync(13);
							 | 
						||
| 
								 | 
							
								    expect(salt).toHaveLength(29);
							 | 
						||
| 
								 | 
							
								    const [_, version, rounds] = salt.split('$');
							 | 
						||
| 
								 | 
							
								    expect(version).toStrictEqual('2b')
							 | 
						||
| 
								 | 
							
								    expect(rounds).toStrictEqual('13')
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('salt_no_params', () => {
							 | 
						||
| 
								 | 
							
								    const salt = bcrypt.genSaltSync();
							 | 
						||
| 
								 | 
							
								    const [_, version, rounds] = salt.split('$');
							 | 
						||
| 
								 | 
							
								    expect(version).toStrictEqual('2b')
							 | 
						||
| 
								 | 
							
								    expect(rounds).toStrictEqual('10')
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('salt_rounds_is_string_number', () => {
							 | 
						||
| 
								 | 
							
								    expect(() => bcrypt.genSaltSync('10')).toThrowError('rounds must be a number');
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('salt_rounds_is_NaN', () => {
							 | 
						||
| 
								 | 
							
								    expect(() => bcrypt.genSaltSync('b')).toThrowError("rounds must be a number");
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('salt_minor_a', () => {
							 | 
						||
| 
								 | 
							
								    const salt = bcrypt.genSaltSync(10, 'a');
							 | 
						||
| 
								 | 
							
								    const [_, version, rounds] = salt.split('$');
							 | 
						||
| 
								 | 
							
								    expect(version).toStrictEqual('2a')
							 | 
						||
| 
								 | 
							
								    expect(rounds).toStrictEqual('10')
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('salt_minor_b', () => {
							 | 
						||
| 
								 | 
							
								    const salt = bcrypt.genSaltSync(10, 'b');
							 | 
						||
| 
								 | 
							
								    const [_, version, rounds] = salt.split('$');
							 | 
						||
| 
								 | 
							
								    expect(version).toStrictEqual('2b')
							 | 
						||
| 
								 | 
							
								    expect(rounds).toStrictEqual('10')
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('hash', () => {
							 | 
						||
| 
								 | 
							
								    expect(() => bcrypt.hashSync('password', bcrypt.genSaltSync(10))).not.toThrow()
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('hash_rounds', () => {
							 | 
						||
| 
								 | 
							
								    const hash = bcrypt.hashSync('password', 8);
							 | 
						||
| 
								 | 
							
								    expect(bcrypt.getRounds(hash)).toStrictEqual(8)
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('hash_empty_string', () => {
							 | 
						||
| 
								 | 
							
								    expect(() => bcrypt.hashSync('', bcrypt.genSaltSync(10))).not.toThrow();
							 | 
						||
| 
								 | 
							
								    expect(() => bcrypt.hashSync('password', '')).toThrowError('Invalid salt. Salt must be in the form of: $Vers$log2(NumRounds)$saltvalue');
							 | 
						||
| 
								 | 
							
								    expect(() => bcrypt.hashSync('', '')).toThrowError('Invalid salt. Salt must be in the form of: $Vers$log2(NumRounds)$saltvalue');
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('hash_pw_no_params', () => {
							 | 
						||
| 
								 | 
							
								    expect(() => bcrypt.hashSync()).toThrow('data and salt arguments required');
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('hash_pw_one_param', () => {
							 | 
						||
| 
								 | 
							
								    expect(() => bcrypt.hashSync('password')).toThrow('data and salt arguments required');
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('hash_pw_not_hash_str', () => {
							 | 
						||
| 
								 | 
							
								    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")
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('hash_salt_validity', () => {
							 | 
						||
| 
								 | 
							
								    expect(2);
							 | 
						||
| 
								 | 
							
								    expect(bcrypt.hashSync('password', '$2a$10$somesaltyvaluertsetrse')).toBeDefined()
							 | 
						||
| 
								 | 
							
								    expect(() => bcrypt.hashSync('password', 'some$value')).toThrow('Invalid salt. Salt must be in the form of: $Vers$log2(NumRounds)$saltvalue')
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('verify_salt', () => {
							 | 
						||
| 
								 | 
							
								    const salt = bcrypt.genSaltSync(10);
							 | 
						||
| 
								 | 
							
								    const split_salt = salt.split('$');
							 | 
						||
| 
								 | 
							
								    expect(split_salt[1]).toStrictEqual('2b')
							 | 
						||
| 
								 | 
							
								    expect(split_salt[2]).toStrictEqual('10')
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('verify_salt_min_rounds', () => {
							 | 
						||
| 
								 | 
							
								    const salt = bcrypt.genSaltSync(1);
							 | 
						||
| 
								 | 
							
								    const split_salt = salt.split('$');
							 | 
						||
| 
								 | 
							
								    expect(split_salt[1]).toStrictEqual('2b')
							 | 
						||
| 
								 | 
							
								    expect(split_salt[2]).toStrictEqual('04')
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('verify_salt_max_rounds', () => {
							 | 
						||
| 
								 | 
							
								    const salt = bcrypt.genSaltSync(100);
							 | 
						||
| 
								 | 
							
								    const split_salt = salt.split('$');
							 | 
						||
| 
								 | 
							
								    expect(split_salt[1]).toStrictEqual('2b')
							 | 
						||
| 
								 | 
							
								    expect(split_salt[2]).toStrictEqual('31')
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('hash_compare', () => {
							 | 
						||
| 
								 | 
							
								    const salt = bcrypt.genSaltSync(10);
							 | 
						||
| 
								 | 
							
								    expect(29).toStrictEqual(salt.length)
							 | 
						||
| 
								 | 
							
								    const hash = bcrypt.hashSync("test", salt);
							 | 
						||
| 
								 | 
							
								    expect(bcrypt.compareSync("test", hash)).toBeDefined()
							 | 
						||
| 
								 | 
							
								    expect(!(bcrypt.compareSync("blah", hash))).toBeDefined()
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('hash_compare_empty_strings', () => {
							 | 
						||
| 
								 | 
							
								    expect(!(bcrypt.compareSync("", "password"))).toBeDefined()
							 | 
						||
| 
								 | 
							
								    expect(!(bcrypt.compareSync("", ""))).toBeDefined()
							 | 
						||
| 
								 | 
							
								    expect(!(bcrypt.compareSync("password", ""))).toBeDefined()
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('hash_compare_invalid_strings', () => {
							 | 
						||
| 
								 | 
							
								    const fullString = 'envy1362987212538';
							 | 
						||
| 
								 | 
							
								    const hash = '$2a$10$XOPbrlUPQdwdJUpSrIF6X.LbE14qsMmKGhM1A8W9iqaG3vv1BD7WC';
							 | 
						||
| 
								 | 
							
								    const wut = ':';
							 | 
						||
| 
								 | 
							
								    expect(bcrypt.compareSync(fullString, hash)).toBe(true);
							 | 
						||
| 
								 | 
							
								    expect(bcrypt.compareSync(fullString, wut)).toBe(false);
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('getRounds', () => {
							 | 
						||
| 
								 | 
							
								    const hash = bcrypt.hashSync("test", bcrypt.genSaltSync(9));
							 | 
						||
| 
								 | 
							
								    expect(9).toStrictEqual(bcrypt.getRounds(hash))
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('getRounds', () => {
							 | 
						||
| 
								 | 
							
								    const hash = bcrypt.hashSync("test", bcrypt.genSaltSync(9));
							 | 
						||
| 
								 | 
							
								    expect(9).toStrictEqual(bcrypt.getRounds(hash))
							 | 
						||
| 
								 | 
							
								    expect(() => bcrypt.getRounds('')).toThrow("invalid hash provided");
							 | 
						||
| 
								 | 
							
								});
							 |