'use strict';

var bcrypt = require('bcryptjs');
var async = require('async');


process.on('message', function (msg) {
	if (msg.type === 'hash') {
		hashPassword(msg.password, msg.rounds);
	} else if (msg.type === 'compare') {
		bcrypt.compare(msg.password, msg.hash, done);
	}
});

function hashPassword(password, rounds) {
	async.waterfall([
		function (next) {
			bcrypt.genSalt(parseInt(rounds, 10), next);
		},
		function (salt, next) {
			bcrypt.hash(password, salt, next);
		},
	], done);
}

function done(err, result) {
	if (err) {
		process.send({err: err.message});
		return process.disconnect();
	}
	process.send({result: result});
	process.disconnect();
}