define([], function () { // Return a hashing function for a _sha helper (_sha-32 or _sha-64), a key length, a block size, and a set // of constants. return function (/* sha32/64 */_sha, /* Number */_keyLength, /* Blocksize */_blockSize, /* Array */_hash) { function hasher(/* String */data, /* sha32/64.outputTypes */outputType) { outputType = outputType || _sha.outputTypes.Base64; var wa = _sha.digest(_sha.toWord(data), data.length * 8, _hash, _keyLength); switch(outputType){ case _sha.outputTypes.Raw: { return wa; } case _sha.outputTypes.Hex: { return _sha.toHex(wa); } case _sha.outputTypes.String: { return _sha._toString(wa); } default: { return _sha.toBase64(wa); } } } hasher.hmac = function (/* String */data, /* String */key, /* sha32/64.outputTypes? */outputType) { outputType = outputType || _sha.outputTypes.Base64; // prepare the key var wa = _sha.toWord(key); if(wa.length > 16){ wa = _sha.digest(wa, key.length * 8, _hash, _keyLength); } // set up the pads var numWords = _blockSize / 32, ipad = new Array(numWords), opad = new Array(numWords); for(var i=0; i