| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 | 
							- "use strict";
 
- Object.defineProperty(exports, "__esModule", { value: true });
 
- exports.hmac = exports.HMAC = void 0;
 
- const _assert_js_1 = require("./_assert.js");
 
- const utils_js_1 = require("./utils.js");
 
- // HMAC (RFC 2104)
 
- class HMAC extends utils_js_1.Hash {
 
-     constructor(hash, _key) {
 
-         super();
 
-         this.finished = false;
 
-         this.destroyed = false;
 
-         (0, _assert_js_1.hash)(hash);
 
-         const key = (0, utils_js_1.toBytes)(_key);
 
-         this.iHash = hash.create();
 
-         if (typeof this.iHash.update !== 'function')
 
-             throw new Error('Expected instance of class which extends utils.Hash');
 
-         this.blockLen = this.iHash.blockLen;
 
-         this.outputLen = this.iHash.outputLen;
 
-         const blockLen = this.blockLen;
 
-         const pad = new Uint8Array(blockLen);
 
-         // blockLen can be bigger than outputLen
 
-         pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);
 
-         for (let i = 0; i < pad.length; i++)
 
-             pad[i] ^= 0x36;
 
-         this.iHash.update(pad);
 
-         // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone
 
-         this.oHash = hash.create();
 
-         // Undo internal XOR && apply outer XOR
 
-         for (let i = 0; i < pad.length; i++)
 
-             pad[i] ^= 0x36 ^ 0x5c;
 
-         this.oHash.update(pad);
 
-         pad.fill(0);
 
-     }
 
-     update(buf) {
 
-         (0, _assert_js_1.exists)(this);
 
-         this.iHash.update(buf);
 
-         return this;
 
-     }
 
-     digestInto(out) {
 
-         (0, _assert_js_1.exists)(this);
 
-         (0, _assert_js_1.bytes)(out, this.outputLen);
 
-         this.finished = true;
 
-         this.iHash.digestInto(out);
 
-         this.oHash.update(out);
 
-         this.oHash.digestInto(out);
 
-         this.destroy();
 
-     }
 
-     digest() {
 
-         const out = new Uint8Array(this.oHash.outputLen);
 
-         this.digestInto(out);
 
-         return out;
 
-     }
 
-     _cloneInto(to) {
 
-         // Create new instance without calling constructor since key already in state and we don't know it.
 
-         to || (to = Object.create(Object.getPrototypeOf(this), {}));
 
-         const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;
 
-         to = to;
 
-         to.finished = finished;
 
-         to.destroyed = destroyed;
 
-         to.blockLen = blockLen;
 
-         to.outputLen = outputLen;
 
-         to.oHash = oHash._cloneInto(to.oHash);
 
-         to.iHash = iHash._cloneInto(to.iHash);
 
-         return to;
 
-     }
 
-     destroy() {
 
-         this.destroyed = true;
 
-         this.oHash.destroy();
 
-         this.iHash.destroy();
 
-     }
 
- }
 
- exports.HMAC = HMAC;
 
- /**
 
-  * HMAC: RFC2104 message authentication code.
 
-  * @param hash - function that would be used e.g. sha256
 
-  * @param key - message key
 
-  * @param message - message data
 
-  */
 
- const hmac = (hash, key, message) => new HMAC(hash, key).update(message).digest();
 
- exports.hmac = hmac;
 
- exports.hmac.create = (hash, key) => new HMAC(hash, key);
 
- //# sourceMappingURL=hmac.js.map
 
 
  |