/*
 * Copyright 2012 The Closure Compiler Authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * @fileoverview Definitions for bcrypt.js 2.
 * @externs
 * @author Daniel Wirtz <dcode@dcode.io>
 */

/**
 * @type {Object.<string,*>}
 */
var bcrypt = {};

/**
 * @param {?function(number):!Array.<number>} random
 */
bcrypt.setRandomFallback = function(random) {};

/**
 * @param {number=} rounds
 * @param {number=} seed_length
 * @returns {string}
 */
bcrypt.genSaltSync = function(rounds, seed_length) {};

/**
 * @param {(number|function(Error, ?string))=} rounds
 * @param {(number|function(Error, ?string))=} seed_length
 * @param {function(Error, string=)=} callback
 */
bcrypt.genSalt = function(rounds, seed_length, callback) {};

/**
 * @param {string} s
 * @param {(number|string)=} salt
 * @returns {?string}
 */
bcrypt.hashSync = function(s, salt) {};

/**
 * @param {string} s
 * @param {number|string} salt
 * @param {function(Error, string=)} callback
 * @expose
 */
bcrypt.hash = function(s, salt, callback) {};

/**
 * @param {string} s
 * @param {string} hash
 * @returns {boolean}
 * @throws {Error}
 */
bcrypt.compareSync = function(s, hash) {};

/**
 * @param {string} s
 * @param {string} hash
 * @param {function(Error, boolean)} callback
 * @throws {Error}
 */
bcrypt.compare = function(s, hash, callback) {};

/**
 * @param {string} hash
 * @returns {number}
 * @throws {Error}
 */
bcrypt.getRounds = function(hash) {};

/**
 * @param {string} hash
 * @returns {string}
 * @throws {Error}
 * @expose
 */
bcrypt.getSalt = function(hash) {};
