| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- (function () {
- var C = typeof window === 'undefined' ? require('./Crypto').Crypto : window.Crypto;
- // Shortcuts
- var util = C.util;
- var charenc = C.charenc;
- var UTF8 = charenc.UTF8;
- var Binary = charenc.Binary;
- C.HMAC = function (hasher, message, key, options) {
- // Convert to byte arrays
- if (message.constructor == String) {
- message = UTF8.stringToBytes(message);
- }
- if (key.constructor == String) {
- key = UTF8.stringToBytes(key);
- }
- /* else, assume byte arrays already */
- // Allow arbitrary length keys
- if (key.length > hasher._blocksize * 4) {
- key = hasher(key, {
- asBytes: true
- });
- }
- // XOR keys with pad constants
- var okey = key.slice(0);
- var ikey = key.slice(0);
- for (var i = 0; i < hasher._blocksize * 4; i++) {
- okey[i] ^= 92;
- ikey[i] ^= 54;
- }
- var hmacbytes = hasher(
- okey.concat(
- hasher(ikey.concat(message), {
- asBytes: true
- })
- ),
- {
- asBytes: true
- }
- );
- return options && options.asBytes ? hmacbytes : options && options.asString ? Binary.bytesToString(hmacbytes) : util.bytesToHex(hmacbytes);
- };
- })();
|