pull/44/merge
cyfung1031 2 years ago committed by GitHub
commit 720e81d746
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

3
.gitignore vendored

@ -2,3 +2,6 @@
/covreporter/
/.nyc_output/
/coverage/
**/.DS_Store
**/Thumbs.db
bun.lockb

@ -0,0 +1,3 @@
{
"liveServer.settings.port": 5501
}

@ -0,0 +1,206 @@
/**
* [js-md5]{@link https://github.com/emn178/js-md5}
*
* @namespace md5
* @version 0.8.3
* @author Chen, Yi-Cyuan [emn178@gmail.com]
* @copyright Chen, Yi-Cyuan 2014-2023
* @license MIT
*/
(function() {
"use strict";
var root = "object" === typeof window ? window : {};
var WEB_WORKER = "undefined" !== typeof WorkerGlobalScope && !!WorkerGlobalScope;
var NODE_JS = "object" === typeof process && process.versions && process.versions.node;
NODE_JS ? root = global : WEB_WORKER && (root = self);
var COMMON_JS = "object" === typeof module && module.exports;
var AMD = "function" === typeof define && define.amd;
var ArrayBuffer_ = ArrayBuffer;
var HEX_CHARS = "0123456789abcdef".split("");
var EXTRA = [ 128, 32768, 8388608, -2147483648 ];
var OUTPUT_TYPES = [ "hex", "array", "digest", "buffer", "arrayBuffer", "base64" ];
var BASE64_ENCODE_CHAR = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");
var isArray = Array.isArray;
var isView = ArrayBuffer_.isView;
var buffer8, blocks = [];
var buffer;
buffer = new ArrayBuffer_(68), buffer8 = new Uint8Array(buffer), blocks = new Uint32Array(buffer);
var formatMessage = function(message) {
var type = typeof message;
if ("string" === type) return [ message, true ];
if ("object" !== type || null === message) throw new Error("input is invalid type");
if (message.constructor === ArrayBuffer_) return [ new Uint8Array(message), false ];
if (isArray(message) || isView(message)) return [ message, false ];
throw new Error("input is invalid type");
};
function Md5(sharedMemory) {
var buffer;
sharedMemory ? (blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0,
this.blocks = blocks, this.buffer8 = buffer8) : (buffer = new ArrayBuffer_(68),
this.buffer8 = new Uint8Array(buffer), this.blocks = new Uint32Array(buffer)),
this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0,
this.finalized = this.hashed = false, this.first = true;
}
Md5.prototype.update = function(message) {
if (this.finalized) throw new Error("finalize already called");
var result = formatMessage(message);
message = result[0];
var isString = result[1];
var code, i, index = 0, length = message.length, blocks = this.blocks;
var buffer8 = this.buffer8;
while (index < length) {
if (this.hashed && (this.hashed = false, blocks[0] = blocks[16], blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0),
isString) for (i = this.start; index < length && i < 64; ++index) code = message.charCodeAt(index),
code < 128 ? buffer8[i++] = code : (code < 2048 ? buffer8[i++] = 192 | code >>> 6 : (code < 55296 || code >= 57344 ? buffer8[i++] = 224 | code >>> 12 : (code = 65536 + ((1023 & code) << 10 | 1023 & message.charCodeAt(++index)),
buffer8[i++] = 240 | code >>> 18, buffer8[i++] = 128 | code >>> 12 & 63),
buffer8[i++] = 128 | code >>> 6 & 63), buffer8[i++] = 128 | 63 & code); else for (i = this.start; index < length && i < 64; ++index) buffer8[i++] = message[index];
this.lastByteIndex = i, this.bytes += i - this.start, i >= 64 ? (this.start = i - 64,
this.hash(), this.hashed = true) : this.start = i;
}
return this.bytes > 4294967295 && (this.hBytes += this.bytes / 4294967296 << 0,
this.bytes = this.bytes % 4294967296), this;
}, Md5.prototype.finalize = function() {
if (this.finalized) return;
this.finalized = true;
var blocks = this.blocks, i = this.lastByteIndex;
blocks[i >>> 2] |= EXTRA[3 & i], i >= 56 && (this.hashed || this.hash(),
blocks[0] = blocks[16], blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0),
blocks[14] = this.bytes << 3, blocks[15] = this.hBytes << 3 | this.bytes >>> 29,
this.hash();
}, Md5.prototype.hash = function() {
var a, b, c, d, bc, da, blocks = this.blocks;
this.first ? (a = blocks[0] - 680876937, a = (a << 7 | a >>> 25) - 271733879 << 0,
d = (-1732584194 ^ 2004318071 & a) + blocks[1] - 117830708, d = (d << 12 | d >>> 20) + a << 0,
c = (-271733879 ^ d & (-271733879 ^ a)) + blocks[2] - 1126478375, c = (c << 17 | c >>> 15) + d << 0,
b = (a ^ c & (d ^ a)) + blocks[3] - 1316259209) : (a = this.h0, b = this.h1,
c = this.h2, d = this.h3, a += (d ^ b & (c ^ d)) + blocks[0] - 680876936,
a = (a << 7 | a >>> 25) + b << 0, d += (c ^ a & (b ^ c)) + blocks[1] - 389564586,
d = (d << 12 | d >>> 20) + a << 0, c += (b ^ d & (a ^ b)) + blocks[2] + 606105819,
c = (c << 17 | c >>> 15) + d << 0, b += (a ^ c & (d ^ a)) + blocks[3] - 1044525330),
b = (b << 22 | b >>> 10) + c << 0, a += (d ^ b & (c ^ d)) + blocks[4] - 176418897,
a = (a << 7 | a >>> 25) + b << 0, d += (c ^ a & (b ^ c)) + blocks[5] + 1200080426,
d = (d << 12 | d >>> 20) + a << 0, c += (b ^ d & (a ^ b)) + blocks[6] - 1473231341,
c = (c << 17 | c >>> 15) + d << 0, b += (a ^ c & (d ^ a)) + blocks[7] - 45705983,
b = (b << 22 | b >>> 10) + c << 0, a += (d ^ b & (c ^ d)) + blocks[8] + 1770035416,
a = (a << 7 | a >>> 25) + b << 0, d += (c ^ a & (b ^ c)) + blocks[9] - 1958414417,
d = (d << 12 | d >>> 20) + a << 0, c += (b ^ d & (a ^ b)) + blocks[10] - 42063,
c = (c << 17 | c >>> 15) + d << 0, b += (a ^ c & (d ^ a)) + blocks[11] - 1990404162,
b = (b << 22 | b >>> 10) + c << 0, a += (d ^ b & (c ^ d)) + blocks[12] + 1804603682,
a = (a << 7 | a >>> 25) + b << 0, d += (c ^ a & (b ^ c)) + blocks[13] - 40341101,
d = (d << 12 | d >>> 20) + a << 0, c += (b ^ d & (a ^ b)) + blocks[14] - 1502002290,
c = (c << 17 | c >>> 15) + d << 0, b += (a ^ c & (d ^ a)) + blocks[15] + 1236535329,
b = (b << 22 | b >>> 10) + c << 0, a += (c ^ d & (b ^ c)) + blocks[1] - 165796510,
a = (a << 5 | a >>> 27) + b << 0, d += (b ^ c & (a ^ b)) + blocks[6] - 1069501632,
d = (d << 9 | d >>> 23) + a << 0, c += (a ^ b & (d ^ a)) + blocks[11] + 643717713,
c = (c << 14 | c >>> 18) + d << 0, b += (d ^ a & (c ^ d)) + blocks[0] - 373897302,
b = (b << 20 | b >>> 12) + c << 0, a += (c ^ d & (b ^ c)) + blocks[5] - 701558691,
a = (a << 5 | a >>> 27) + b << 0, d += (b ^ c & (a ^ b)) + blocks[10] + 38016083,
d = (d << 9 | d >>> 23) + a << 0, c += (a ^ b & (d ^ a)) + blocks[15] - 660478335,
c = (c << 14 | c >>> 18) + d << 0, b += (d ^ a & (c ^ d)) + blocks[4] - 405537848,
b = (b << 20 | b >>> 12) + c << 0, a += (c ^ d & (b ^ c)) + blocks[9] + 568446438,
a = (a << 5 | a >>> 27) + b << 0, d += (b ^ c & (a ^ b)) + blocks[14] - 1019803690,
d = (d << 9 | d >>> 23) + a << 0, c += (a ^ b & (d ^ a)) + blocks[3] - 187363961,
c = (c << 14 | c >>> 18) + d << 0, b += (d ^ a & (c ^ d)) + blocks[8] + 1163531501,
b = (b << 20 | b >>> 12) + c << 0, a += (c ^ d & (b ^ c)) + blocks[13] - 1444681467,
a = (a << 5 | a >>> 27) + b << 0, d += (b ^ c & (a ^ b)) + blocks[2] - 51403784,
d = (d << 9 | d >>> 23) + a << 0, c += (a ^ b & (d ^ a)) + blocks[7] + 1735328473,
c = (c << 14 | c >>> 18) + d << 0, b += (d ^ a & (c ^ d)) + blocks[12] - 1926607734,
b = (b << 20 | b >>> 12) + c << 0, bc = b ^ c, a += (bc ^ d) + blocks[5] - 378558,
a = (a << 4 | a >>> 28) + b << 0, d += (bc ^ a) + blocks[8] - 2022574463,
d = (d << 11 | d >>> 21) + a << 0, da = d ^ a, c += (da ^ b) + blocks[11] + 1839030562,
c = (c << 16 | c >>> 16) + d << 0, b += (da ^ c) + blocks[14] - 35309556,
b = (b << 23 | b >>> 9) + c << 0, bc = b ^ c, a += (bc ^ d) + blocks[1] - 1530992060,
a = (a << 4 | a >>> 28) + b << 0, d += (bc ^ a) + blocks[4] + 1272893353,
d = (d << 11 | d >>> 21) + a << 0, da = d ^ a, c += (da ^ b) + blocks[7] - 155497632,
c = (c << 16 | c >>> 16) + d << 0, b += (da ^ c) + blocks[10] - 1094730640,
b = (b << 23 | b >>> 9) + c << 0, bc = b ^ c, a += (bc ^ d) + blocks[13] + 681279174,
a = (a << 4 | a >>> 28) + b << 0, d += (bc ^ a) + blocks[0] - 358537222,
d = (d << 11 | d >>> 21) + a << 0, da = d ^ a, c += (da ^ b) + blocks[3] - 722521979,
c = (c << 16 | c >>> 16) + d << 0, b += (da ^ c) + blocks[6] + 76029189,
b = (b << 23 | b >>> 9) + c << 0, bc = b ^ c, a += (bc ^ d) + blocks[9] - 640364487,
a = (a << 4 | a >>> 28) + b << 0, d += (bc ^ a) + blocks[12] - 421815835,
d = (d << 11 | d >>> 21) + a << 0, da = d ^ a, c += (da ^ b) + blocks[15] + 530742520,
c = (c << 16 | c >>> 16) + d << 0, b += (da ^ c) + blocks[2] - 995338651,
b = (b << 23 | b >>> 9) + c << 0, a += (c ^ (b | ~d)) + blocks[0] - 198630844,
a = (a << 6 | a >>> 26) + b << 0, d += (b ^ (a | ~c)) + blocks[7] + 1126891415,
d = (d << 10 | d >>> 22) + a << 0, c += (a ^ (d | ~b)) + blocks[14] - 1416354905,
c = (c << 15 | c >>> 17) + d << 0, b += (d ^ (c | ~a)) + blocks[5] - 57434055,
b = (b << 21 | b >>> 11) + c << 0, a += (c ^ (b | ~d)) + blocks[12] + 1700485571,
a = (a << 6 | a >>> 26) + b << 0, d += (b ^ (a | ~c)) + blocks[3] - 1894986606,
d = (d << 10 | d >>> 22) + a << 0, c += (a ^ (d | ~b)) + blocks[10] - 1051523,
c = (c << 15 | c >>> 17) + d << 0, b += (d ^ (c | ~a)) + blocks[1] - 2054922799,
b = (b << 21 | b >>> 11) + c << 0, a += (c ^ (b | ~d)) + blocks[8] + 1873313359,
a = (a << 6 | a >>> 26) + b << 0, d += (b ^ (a | ~c)) + blocks[15] - 30611744,
d = (d << 10 | d >>> 22) + a << 0, c += (a ^ (d | ~b)) + blocks[6] - 1560198380,
c = (c << 15 | c >>> 17) + d << 0, b += (d ^ (c | ~a)) + blocks[13] + 1309151649,
b = (b << 21 | b >>> 11) + c << 0, a += (c ^ (b | ~d)) + blocks[4] - 145523070,
a = (a << 6 | a >>> 26) + b << 0, d += (b ^ (a | ~c)) + blocks[11] - 1120210379,
d = (d << 10 | d >>> 22) + a << 0, c += (a ^ (d | ~b)) + blocks[2] + 718787259,
c = (c << 15 | c >>> 17) + d << 0, b += (d ^ (c | ~a)) + blocks[9] - 343485551,
b = (b << 21 | b >>> 11) + c << 0, this.first ? (this.h0 = a + 1732584193 << 0,
this.h1 = b - 271733879 << 0, this.h2 = c - 1732584194 << 0, this.h3 = d + 271733878 << 0,
this.first = false) : (this.h0 = this.h0 + a << 0, this.h1 = this.h1 + b << 0,
this.h2 = this.h2 + c << 0, this.h3 = this.h3 + d << 0);
}, Md5.prototype.hex = function() {
this.finalize();
var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;
return HEX_CHARS[h0 >>> 4 & 15] + HEX_CHARS[15 & h0] + HEX_CHARS[h0 >>> 12 & 15] + HEX_CHARS[h0 >>> 8 & 15] + HEX_CHARS[h0 >>> 20 & 15] + HEX_CHARS[h0 >>> 16 & 15] + HEX_CHARS[h0 >>> 28 & 15] + HEX_CHARS[h0 >>> 24 & 15] + HEX_CHARS[h1 >>> 4 & 15] + HEX_CHARS[15 & h1] + HEX_CHARS[h1 >>> 12 & 15] + HEX_CHARS[h1 >>> 8 & 15] + HEX_CHARS[h1 >>> 20 & 15] + HEX_CHARS[h1 >>> 16 & 15] + HEX_CHARS[h1 >>> 28 & 15] + HEX_CHARS[h1 >>> 24 & 15] + HEX_CHARS[h2 >>> 4 & 15] + HEX_CHARS[15 & h2] + HEX_CHARS[h2 >>> 12 & 15] + HEX_CHARS[h2 >>> 8 & 15] + HEX_CHARS[h2 >>> 20 & 15] + HEX_CHARS[h2 >>> 16 & 15] + HEX_CHARS[h2 >>> 28 & 15] + HEX_CHARS[h2 >>> 24 & 15] + HEX_CHARS[h3 >>> 4 & 15] + HEX_CHARS[15 & h3] + HEX_CHARS[h3 >>> 12 & 15] + HEX_CHARS[h3 >>> 8 & 15] + HEX_CHARS[h3 >>> 20 & 15] + HEX_CHARS[h3 >>> 16 & 15] + HEX_CHARS[h3 >>> 28 & 15] + HEX_CHARS[h3 >>> 24 & 15];
}, Md5.prototype.toString = Md5.prototype.hex, Md5.prototype.digest = function() {
this.finalize();
var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;
return [ 255 & h0, h0 >>> 8 & 255, h0 >>> 16 & 255, h0 >>> 24 & 255, 255 & h1, h1 >>> 8 & 255, h1 >>> 16 & 255, h1 >>> 24 & 255, 255 & h2, h2 >>> 8 & 255, h2 >>> 16 & 255, h2 >>> 24 & 255, 255 & h3, h3 >>> 8 & 255, h3 >>> 16 & 255, h3 >>> 24 & 255 ];
}, Md5.prototype.array = Md5.prototype.digest, Md5.prototype.arrayBuffer = function() {
this.finalize();
var buffer = new ArrayBuffer(16);
var blocks = new Uint32Array(buffer);
return blocks[0] = this.h0, blocks[1] = this.h1, blocks[2] = this.h2, blocks[3] = this.h3,
buffer;
}, Md5.prototype.buffer = Md5.prototype.arrayBuffer, Md5.prototype.base64 = function() {
var v1, v2, v3, base64Str = "", bytes = this.array();
for (var i = 0; i < 15; ) v1 = bytes[i++], v2 = bytes[i++], v3 = bytes[i++],
base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] + BASE64_ENCODE_CHAR[63 & (v1 << 4 | v2 >>> 4)] + BASE64_ENCODE_CHAR[63 & (v2 << 2 | v3 >>> 6)] + BASE64_ENCODE_CHAR[63 & v3];
return v1 = bytes[i], base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] + BASE64_ENCODE_CHAR[v1 << 4 & 63] + "==",
base64Str;
};
var nodeJsEnv = NODE_JS ? {
crypto: require("crypto"),
Buffer: require("buffer").Buffer,
bufferFrom: Buffer.from && true ? Buffer.from : function(message) {
return new Buffer(message);
}
} : {};
var createOutputMethod = function(outputType) {
return function(message) {
return new Md5(true).update(message)[outputType]();
};
};
var md5Base = createOutputMethod("hex");
NODE_JS && function() {
var md5BaseOriginal = md5Base;
var {
crypto,
Buffer,
bufferFrom
} = nodeJsEnv;
md5Base = function(message) {
if (null === message || void 0 === message) throw new Error("input is invalid type");
if ("string" === typeof message) return crypto.createHash("md5").update(message, "utf8").digest("hex");
if (message.constructor === ArrayBuffer_ && (message = new Uint8Array(message)),
isArray(message) || isView(message) || message.constructor === Buffer) return crypto.createHash("md5").update(bufferFrom(message)).digest("hex");
return md5BaseOriginal(message);
};
}(), md5Base.create = function() {
return new Md5();
}, md5Base.update = function(message) {
return md5Base.create().update(message);
};
for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
var type = OUTPUT_TYPES[i];
md5Base[type] = createOutputMethod(type);
}
var exports = md5Base;
exports.md5 = exports, COMMON_JS ? module.exports = exports : (root.md5 = exports,
AMD && define(function() {
return exports;
}));
})();

File diff suppressed because one or more lines are too long

@ -0,0 +1,247 @@
/**
* [js-md5]{@link https://github.com/emn178/js-md5}
*
* @namespace md5
* @version 0.8.3
* @author Chen, Yi-Cyuan [emn178@gmail.com]
* @copyright Chen, Yi-Cyuan 2014-2023
* @license MIT
*/
(function() {
"use strict";
var root = "object" === typeof window ? window : {};
var WEB_WORKER = "undefined" !== typeof WorkerGlobalScope && !!WorkerGlobalScope;
var NODE_JS = "object" === typeof process && process.versions && process.versions.node;
NODE_JS ? root = global : WEB_WORKER && (root = self);
var COMMON_JS = "object" === typeof module && module.exports;
var AMD = "function" === typeof define && define.amd;
var ArrayBuffer_ = ArrayBuffer;
var HEX_CHARS = "0123456789abcdef".split("");
var EXTRA = [ 128, 32768, 8388608, -2147483648 ];
var OUTPUT_TYPES = [ "hex", "array", "digest", "buffer", "arrayBuffer", "base64" ];
var BASE64_ENCODE_CHAR = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");
var isArray = Array.isArray;
var isView = ArrayBuffer_.isView;
isArray || (isArray = function(obj) {
return "[object Array]" === Object.prototype.toString.call(obj);
}), isView || (isView = function(obj) {
return "object" === typeof obj && obj.buffer && obj.buffer.constructor === ArrayBuffer_;
});
var buffer8, blocks = [];
var buffer;
buffer = new ArrayBuffer_(68), buffer8 = new Uint8Array(buffer), blocks = new Uint32Array(buffer);
var formatMessage = function(message) {
var type = typeof message;
if ("string" === type) return [ message, true ];
if ("object" !== type || null === message) throw new Error("input is invalid type");
if (message.constructor === ArrayBuffer_) return [ new Uint8Array(message), false ];
if (isArray(message) || isView(message)) return [ message, false ];
throw new Error("input is invalid type");
};
function Md5(sharedMemory) {
var buffer;
sharedMemory ? (blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0,
this.blocks = blocks, this.buffer8 = buffer8) : (buffer = new ArrayBuffer_(68),
this.buffer8 = new Uint8Array(buffer), this.blocks = new Uint32Array(buffer)),
this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0,
this.finalized = this.hashed = false, this.first = true;
}
Md5.prototype.update = function(message) {
if (this.finalized) throw new Error("finalize already called");
var result = formatMessage(message);
message = result[0];
var isString = result[1];
var code, i, index = 0, length = message.length, blocks = this.blocks;
var buffer8 = this.buffer8;
while (index < length) {
if (this.hashed && (this.hashed = false, blocks[0] = blocks[16], blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0),
isString) for (i = this.start; index < length && i < 64; ++index) code = message.charCodeAt(index),
code < 128 ? buffer8[i++] = code : (code < 2048 ? buffer8[i++] = 192 | code >>> 6 : (code < 55296 || code >= 57344 ? buffer8[i++] = 224 | code >>> 12 : (code = 65536 + ((1023 & code) << 10 | 1023 & message.charCodeAt(++index)),
buffer8[i++] = 240 | code >>> 18, buffer8[i++] = 128 | code >>> 12 & 63),
buffer8[i++] = 128 | code >>> 6 & 63), buffer8[i++] = 128 | 63 & code); else for (i = this.start; index < length && i < 64; ++index) buffer8[i++] = message[index];
this.lastByteIndex = i, this.bytes += i - this.start, i >= 64 ? (this.start = i - 64,
this.hash(), this.hashed = true) : this.start = i;
}
return this.bytes > 4294967295 && (this.hBytes += this.bytes / 4294967296 << 0,
this.bytes = this.bytes % 4294967296), this;
}, Md5.prototype.finalize = function() {
if (this.finalized) return;
this.finalized = true;
var blocks = this.blocks, i = this.lastByteIndex;
blocks[i >>> 2] |= EXTRA[3 & i], i >= 56 && (this.hashed || this.hash(),
blocks[0] = blocks[16], blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0),
blocks[14] = this.bytes << 3, blocks[15] = this.hBytes << 3 | this.bytes >>> 29,
this.hash();
}, Md5.prototype.hash = function() {
var a, b, c, d, bc, da, blocks = this.blocks;
this.first ? (a = blocks[0] - 680876937, a = (a << 7 | a >>> 25) - 271733879 << 0,
d = (-1732584194 ^ 2004318071 & a) + blocks[1] - 117830708, d = (d << 12 | d >>> 20) + a << 0,
c = (-271733879 ^ d & (-271733879 ^ a)) + blocks[2] - 1126478375, c = (c << 17 | c >>> 15) + d << 0,
b = (a ^ c & (d ^ a)) + blocks[3] - 1316259209) : (a = this.h0, b = this.h1,
c = this.h2, d = this.h3, a += (d ^ b & (c ^ d)) + blocks[0] - 680876936,
a = (a << 7 | a >>> 25) + b << 0, d += (c ^ a & (b ^ c)) + blocks[1] - 389564586,
d = (d << 12 | d >>> 20) + a << 0, c += (b ^ d & (a ^ b)) + blocks[2] + 606105819,
c = (c << 17 | c >>> 15) + d << 0, b += (a ^ c & (d ^ a)) + blocks[3] - 1044525330),
b = (b << 22 | b >>> 10) + c << 0, a += (d ^ b & (c ^ d)) + blocks[4] - 176418897,
a = (a << 7 | a >>> 25) + b << 0, d += (c ^ a & (b ^ c)) + blocks[5] + 1200080426,
d = (d << 12 | d >>> 20) + a << 0, c += (b ^ d & (a ^ b)) + blocks[6] - 1473231341,
c = (c << 17 | c >>> 15) + d << 0, b += (a ^ c & (d ^ a)) + blocks[7] - 45705983,
b = (b << 22 | b >>> 10) + c << 0, a += (d ^ b & (c ^ d)) + blocks[8] + 1770035416,
a = (a << 7 | a >>> 25) + b << 0, d += (c ^ a & (b ^ c)) + blocks[9] - 1958414417,
d = (d << 12 | d >>> 20) + a << 0, c += (b ^ d & (a ^ b)) + blocks[10] - 42063,
c = (c << 17 | c >>> 15) + d << 0, b += (a ^ c & (d ^ a)) + blocks[11] - 1990404162,
b = (b << 22 | b >>> 10) + c << 0, a += (d ^ b & (c ^ d)) + blocks[12] + 1804603682,
a = (a << 7 | a >>> 25) + b << 0, d += (c ^ a & (b ^ c)) + blocks[13] - 40341101,
d = (d << 12 | d >>> 20) + a << 0, c += (b ^ d & (a ^ b)) + blocks[14] - 1502002290,
c = (c << 17 | c >>> 15) + d << 0, b += (a ^ c & (d ^ a)) + blocks[15] + 1236535329,
b = (b << 22 | b >>> 10) + c << 0, a += (c ^ d & (b ^ c)) + blocks[1] - 165796510,
a = (a << 5 | a >>> 27) + b << 0, d += (b ^ c & (a ^ b)) + blocks[6] - 1069501632,
d = (d << 9 | d >>> 23) + a << 0, c += (a ^ b & (d ^ a)) + blocks[11] + 643717713,
c = (c << 14 | c >>> 18) + d << 0, b += (d ^ a & (c ^ d)) + blocks[0] - 373897302,
b = (b << 20 | b >>> 12) + c << 0, a += (c ^ d & (b ^ c)) + blocks[5] - 701558691,
a = (a << 5 | a >>> 27) + b << 0, d += (b ^ c & (a ^ b)) + blocks[10] + 38016083,
d = (d << 9 | d >>> 23) + a << 0, c += (a ^ b & (d ^ a)) + blocks[15] - 660478335,
c = (c << 14 | c >>> 18) + d << 0, b += (d ^ a & (c ^ d)) + blocks[4] - 405537848,
b = (b << 20 | b >>> 12) + c << 0, a += (c ^ d & (b ^ c)) + blocks[9] + 568446438,
a = (a << 5 | a >>> 27) + b << 0, d += (b ^ c & (a ^ b)) + blocks[14] - 1019803690,
d = (d << 9 | d >>> 23) + a << 0, c += (a ^ b & (d ^ a)) + blocks[3] - 187363961,
c = (c << 14 | c >>> 18) + d << 0, b += (d ^ a & (c ^ d)) + blocks[8] + 1163531501,
b = (b << 20 | b >>> 12) + c << 0, a += (c ^ d & (b ^ c)) + blocks[13] - 1444681467,
a = (a << 5 | a >>> 27) + b << 0, d += (b ^ c & (a ^ b)) + blocks[2] - 51403784,
d = (d << 9 | d >>> 23) + a << 0, c += (a ^ b & (d ^ a)) + blocks[7] + 1735328473,
c = (c << 14 | c >>> 18) + d << 0, b += (d ^ a & (c ^ d)) + blocks[12] - 1926607734,
b = (b << 20 | b >>> 12) + c << 0, bc = b ^ c, a += (bc ^ d) + blocks[5] - 378558,
a = (a << 4 | a >>> 28) + b << 0, d += (bc ^ a) + blocks[8] - 2022574463,
d = (d << 11 | d >>> 21) + a << 0, da = d ^ a, c += (da ^ b) + blocks[11] + 1839030562,
c = (c << 16 | c >>> 16) + d << 0, b += (da ^ c) + blocks[14] - 35309556,
b = (b << 23 | b >>> 9) + c << 0, bc = b ^ c, a += (bc ^ d) + blocks[1] - 1530992060,
a = (a << 4 | a >>> 28) + b << 0, d += (bc ^ a) + blocks[4] + 1272893353,
d = (d << 11 | d >>> 21) + a << 0, da = d ^ a, c += (da ^ b) + blocks[7] - 155497632,
c = (c << 16 | c >>> 16) + d << 0, b += (da ^ c) + blocks[10] - 1094730640,
b = (b << 23 | b >>> 9) + c << 0, bc = b ^ c, a += (bc ^ d) + blocks[13] + 681279174,
a = (a << 4 | a >>> 28) + b << 0, d += (bc ^ a) + blocks[0] - 358537222,
d = (d << 11 | d >>> 21) + a << 0, da = d ^ a, c += (da ^ b) + blocks[3] - 722521979,
c = (c << 16 | c >>> 16) + d << 0, b += (da ^ c) + blocks[6] + 76029189,
b = (b << 23 | b >>> 9) + c << 0, bc = b ^ c, a += (bc ^ d) + blocks[9] - 640364487,
a = (a << 4 | a >>> 28) + b << 0, d += (bc ^ a) + blocks[12] - 421815835,
d = (d << 11 | d >>> 21) + a << 0, da = d ^ a, c += (da ^ b) + blocks[15] + 530742520,
c = (c << 16 | c >>> 16) + d << 0, b += (da ^ c) + blocks[2] - 995338651,
b = (b << 23 | b >>> 9) + c << 0, a += (c ^ (b | ~d)) + blocks[0] - 198630844,
a = (a << 6 | a >>> 26) + b << 0, d += (b ^ (a | ~c)) + blocks[7] + 1126891415,
d = (d << 10 | d >>> 22) + a << 0, c += (a ^ (d | ~b)) + blocks[14] - 1416354905,
c = (c << 15 | c >>> 17) + d << 0, b += (d ^ (c | ~a)) + blocks[5] - 57434055,
b = (b << 21 | b >>> 11) + c << 0, a += (c ^ (b | ~d)) + blocks[12] + 1700485571,
a = (a << 6 | a >>> 26) + b << 0, d += (b ^ (a | ~c)) + blocks[3] - 1894986606,
d = (d << 10 | d >>> 22) + a << 0, c += (a ^ (d | ~b)) + blocks[10] - 1051523,
c = (c << 15 | c >>> 17) + d << 0, b += (d ^ (c | ~a)) + blocks[1] - 2054922799,
b = (b << 21 | b >>> 11) + c << 0, a += (c ^ (b | ~d)) + blocks[8] + 1873313359,
a = (a << 6 | a >>> 26) + b << 0, d += (b ^ (a | ~c)) + blocks[15] - 30611744,
d = (d << 10 | d >>> 22) + a << 0, c += (a ^ (d | ~b)) + blocks[6] - 1560198380,
c = (c << 15 | c >>> 17) + d << 0, b += (d ^ (c | ~a)) + blocks[13] + 1309151649,
b = (b << 21 | b >>> 11) + c << 0, a += (c ^ (b | ~d)) + blocks[4] - 145523070,
a = (a << 6 | a >>> 26) + b << 0, d += (b ^ (a | ~c)) + blocks[11] - 1120210379,
d = (d << 10 | d >>> 22) + a << 0, c += (a ^ (d | ~b)) + blocks[2] + 718787259,
c = (c << 15 | c >>> 17) + d << 0, b += (d ^ (c | ~a)) + blocks[9] - 343485551,
b = (b << 21 | b >>> 11) + c << 0, this.first ? (this.h0 = a + 1732584193 << 0,
this.h1 = b - 271733879 << 0, this.h2 = c - 1732584194 << 0, this.h3 = d + 271733878 << 0,
this.first = false) : (this.h0 = this.h0 + a << 0, this.h1 = this.h1 + b << 0,
this.h2 = this.h2 + c << 0, this.h3 = this.h3 + d << 0);
}, Md5.prototype.hex = function() {
this.finalize();
var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;
return HEX_CHARS[h0 >>> 4 & 15] + HEX_CHARS[15 & h0] + HEX_CHARS[h0 >>> 12 & 15] + HEX_CHARS[h0 >>> 8 & 15] + HEX_CHARS[h0 >>> 20 & 15] + HEX_CHARS[h0 >>> 16 & 15] + HEX_CHARS[h0 >>> 28 & 15] + HEX_CHARS[h0 >>> 24 & 15] + HEX_CHARS[h1 >>> 4 & 15] + HEX_CHARS[15 & h1] + HEX_CHARS[h1 >>> 12 & 15] + HEX_CHARS[h1 >>> 8 & 15] + HEX_CHARS[h1 >>> 20 & 15] + HEX_CHARS[h1 >>> 16 & 15] + HEX_CHARS[h1 >>> 28 & 15] + HEX_CHARS[h1 >>> 24 & 15] + HEX_CHARS[h2 >>> 4 & 15] + HEX_CHARS[15 & h2] + HEX_CHARS[h2 >>> 12 & 15] + HEX_CHARS[h2 >>> 8 & 15] + HEX_CHARS[h2 >>> 20 & 15] + HEX_CHARS[h2 >>> 16 & 15] + HEX_CHARS[h2 >>> 28 & 15] + HEX_CHARS[h2 >>> 24 & 15] + HEX_CHARS[h3 >>> 4 & 15] + HEX_CHARS[15 & h3] + HEX_CHARS[h3 >>> 12 & 15] + HEX_CHARS[h3 >>> 8 & 15] + HEX_CHARS[h3 >>> 20 & 15] + HEX_CHARS[h3 >>> 16 & 15] + HEX_CHARS[h3 >>> 28 & 15] + HEX_CHARS[h3 >>> 24 & 15];
}, Md5.prototype.toString = Md5.prototype.hex, Md5.prototype.digest = function() {
this.finalize();
var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;
return [ 255 & h0, h0 >>> 8 & 255, h0 >>> 16 & 255, h0 >>> 24 & 255, 255 & h1, h1 >>> 8 & 255, h1 >>> 16 & 255, h1 >>> 24 & 255, 255 & h2, h2 >>> 8 & 255, h2 >>> 16 & 255, h2 >>> 24 & 255, 255 & h3, h3 >>> 8 & 255, h3 >>> 16 & 255, h3 >>> 24 & 255 ];
}, Md5.prototype.array = Md5.prototype.digest, Md5.prototype.arrayBuffer = function() {
this.finalize();
var buffer = new ArrayBuffer(16);
var blocks = new Uint32Array(buffer);
return blocks[0] = this.h0, blocks[1] = this.h1, blocks[2] = this.h2, blocks[3] = this.h3,
buffer;
}, Md5.prototype.buffer = Md5.prototype.arrayBuffer, Md5.prototype.base64 = function() {
var v1, v2, v3, base64Str = "", bytes = this.array();
for (var i = 0; i < 15; ) v1 = bytes[i++], v2 = bytes[i++], v3 = bytes[i++],
base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] + BASE64_ENCODE_CHAR[63 & (v1 << 4 | v2 >>> 4)] + BASE64_ENCODE_CHAR[63 & (v2 << 2 | v3 >>> 6)] + BASE64_ENCODE_CHAR[63 & v3];
return v1 = bytes[i], base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] + BASE64_ENCODE_CHAR[v1 << 4 & 63] + "==",
base64Str;
};
var nodeJsEnv = NODE_JS ? {
crypto: require("crypto"),
Buffer: require("buffer").Buffer,
bufferFrom: Buffer.from && true ? Buffer.from : function(message) {
return new Buffer(message);
}
} : {};
var createOutputMethod = function(outputType) {
return function(message) {
return new Md5(true).update(message)[outputType]();
};
};
var md5Base = createOutputMethod("hex");
NODE_JS && function() {
var md5BaseOriginal = md5Base;
var {
crypto,
Buffer,
bufferFrom
} = nodeJsEnv;
md5Base = function(message) {
if (null === message || void 0 === message) throw new Error("input is invalid type");
if ("string" === typeof message) return crypto.createHash("md5").update(message, "utf8").digest("hex");
if (message.constructor === ArrayBuffer_ && (message = new Uint8Array(message)),
isArray(message) || isView(message) || message.constructor === Buffer) return crypto.createHash("md5").update(bufferFrom(message)).digest("hex");
return md5BaseOriginal(message);
};
}(), md5Base.create = function() {
return new Md5();
}, md5Base.update = function(message) {
return md5Base.create().update(message);
};
for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
var type = OUTPUT_TYPES[i];
md5Base[type] = createOutputMethod(type);
}
var exports = md5Base;
exports.md5 = exports;
var createHmacOutputMethod = function(outputType) {
return function(key, message) {
return new HmacMd5(key, true).update(message)[outputType]();
};
};
function HmacMd5(key, sharedMemory) {
var i, result = formatMessage(key);
if (key = result[0], result[1]) {
var code, bytes = [], length = key.length, index = 0;
for (i = 0; i < length; ++i) code = key.charCodeAt(i), code < 128 ? bytes[index++] = code : (code < 2048 ? bytes[index++] = 192 | code >>> 6 : (code < 55296 || code >= 57344 ? bytes[index++] = 224 | code >>> 12 : (code = 65536 + ((1023 & code) << 10 | 1023 & key.charCodeAt(++i)),
bytes[index++] = 240 | code >>> 18, bytes[index++] = 128 | code >>> 12 & 63),
bytes[index++] = 128 | code >>> 6 & 63), bytes[index++] = 128 | 63 & code);
key = bytes;
}
key.length > 64 && (key = new Md5(true).update(key).array());
var oKeyPad = [], iKeyPad = [];
for (i = 0; i < 64; ++i) {
var b = key[i] || 0;
oKeyPad[i] = 92 ^ b, iKeyPad[i] = 54 ^ b;
}
Md5.call(this, sharedMemory), this.update(iKeyPad), this.oKeyPad = oKeyPad,
this.inner = true, this.sharedMemory = sharedMemory;
}
HmacMd5.prototype = new Md5(), HmacMd5.prototype.finalize = function() {
var innerHash;
Md5.prototype.finalize.call(this), this.inner && (this.inner = false, innerHash = this.array(),
Md5.call(this, this.sharedMemory), this.update(this.oKeyPad), this.update(innerHash),
Md5.prototype.finalize.call(this));
};
var hmacBase = createHmacOutputMethod("hex");
for (hmacBase.create = function(key) {
return new HmacMd5(key);
}, hmacBase.update = function(key, message) {
return hmacBase.create(key).update(message);
}, i = 0; i < OUTPUT_TYPES.length; ++i) type = OUTPUT_TYPES[i], hmacBase[type] = createHmacOutputMethod(type);
exports.md5.hmac = hmacBase, COMMON_JS ? module.exports = exports : (root.md5 = exports,
AMD && define(function() {
return exports;
}));
})();

4
build/md5.min.js vendored

File diff suppressed because one or more lines are too long

@ -93,7 +93,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line779">line 779</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line804">line 804</a>
</li></ul></dd>
@ -224,7 +224,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line704">line 704</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line579">line 579</a>
</li></ul></dd>
@ -234,7 +234,7 @@
<dt class="tag-see">See:</dt>
<dd class="tag-see">
<ul>
<li><a href="md5_.html#.array">md5.array</a></li>
<li><a href="global.html#md5#.array">md5.array</a></li>
</ul>
</dd>
@ -351,7 +351,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line716">line 716</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line591">line 591</a>
</li></ul></dd>
@ -361,7 +361,7 @@
<dt class="tag-see">See:</dt>
<dd class="tag-see">
<ul>
<li><a href="md5_.html#.arrayBuffer">md5.arrayBuffer</a></li>
<li><a href="global.html#md5#.arrayBuffer">md5.arrayBuffer</a></li>
</ul>
</dd>
@ -478,7 +478,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line751">line 751</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line626">line 626</a>
</li></ul></dd>
@ -488,7 +488,7 @@
<dt class="tag-see">See:</dt>
<dd class="tag-see">
<ul>
<li><a href="md5_.html#.base64">md5.base64</a></li>
<li><a href="global.html#md5#.base64">md5.base64</a></li>
</ul>
</dd>
@ -607,7 +607,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line738">line 738</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line613">line 613</a>
</li></ul></dd>
@ -617,7 +617,7 @@
<dt class="tag-see">See:</dt>
<dd class="tag-see">
<ul>
<li><a href="md5_.html#.buffer">md5.buffer</a></li>
<li><a href="global.html#md5#.buffer">md5.buffer</a></li>
</ul>
</dd>
@ -734,7 +734,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line682">line 682</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line557">line 557</a>
</li></ul></dd>
@ -744,7 +744,7 @@
<dt class="tag-see">See:</dt>
<dd class="tag-see">
<ul>
<li><a href="md5_.html#.digest">md5.digest</a></li>
<li><a href="global.html#md5#.digest">md5.digest</a></li>
</ul>
</dd>
@ -861,7 +861,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line637">line 637</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line512">line 512</a>
</li></ul></dd>
@ -871,7 +871,7 @@
<dt class="tag-see">See:</dt>
<dd class="tag-see">
<ul>
<li><a href="md5_.html#.hex">md5.hex</a></li>
<li><a href="global.html#md5#.hex">md5.hex</a></li>
</ul>
</dd>
@ -988,7 +988,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line670">line 670</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line545">line 545</a>
</li></ul></dd>
@ -998,7 +998,7 @@
<dt class="tag-see">See:</dt>
<dd class="tag-see">
<ul>
<li><a href="md5_.html#.hex">md5.hex</a></li>
<li><a href="global.html#md5#.hex">md5.hex</a></li>
</ul>
</dd>
@ -1173,7 +1173,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line345">line 345</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line220">line 220</a>
</li></ul></dd>
@ -1183,7 +1183,7 @@
<dt class="tag-see">See:</dt>
<dd class="tag-see">
<ul>
<li><a href="md5_.html#.update">md5.update</a></li>
<li><a href="global.html#md5#.update">md5.update</a></li>
</ul>
</dd>
@ -1248,13 +1248,13 @@
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Namespaces</h3><ul><li><a href="md5_.html">md5</a></li><li><a href="md5.hmac.html">hmac</a></li></ul><h3>Classes</h3><ul><li><a href="HmacMd5.html">HmacMd5</a></li><li><a href="Md5.html">Md5</a></li></ul><h3>Global</h3><ul><li><a href="global.html#md5%2508">md5</a></li></ul>
<h2><a href="index.html">Home</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#md5">md5</a></li><li><a href="md5.hmac.html">hmac</a></li></ul><h3>Classes</h3><ul><li><a href="HmacMd5.html">HmacMd5</a></li><li><a href="Md5.html">Md5</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> on Wed Sep 27 2023 21:32:04 GMT+0800 (台北標準時間)
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> on Sat Jan 13 2024 17:08:14 GMT+0900 (Japan Standard Time)
</footer>
<script> prettyPrint(); </script>

@ -104,7 +104,7 @@
<h4 class="name" id="md5%08"><span class="type-signature"></span>md5<span class="signature">(message)</span><span class="type-signature"> &rarr; {String}</span></h4>
<h4 class="name" id="md5"><span class="type-signature"></span>md5<span class="signature">(message)</span><span class="type-signature"> &rarr; {String}</span></h4>
@ -214,7 +214,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line852">line 852</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line888">line 888</a>
</li></ul></dd>
@ -296,13 +296,13 @@ md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e</code></pre>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Namespaces</h3><ul><li><a href="md5_.html">md5</a></li><li><a href="md5.hmac.html">hmac</a></li></ul><h3>Classes</h3><ul><li><a href="HmacMd5.html">HmacMd5</a></li><li><a href="Md5.html">Md5</a></li></ul><h3>Global</h3><ul><li><a href="global.html#md5%2508">md5</a></li></ul>
<h2><a href="index.html">Home</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#md5">md5</a></li><li><a href="md5.hmac.html">hmac</a></li></ul><h3>Classes</h3><ul><li><a href="HmacMd5.html">HmacMd5</a></li><li><a href="Md5.html">Md5</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> on Wed Sep 27 2023 21:32:04 GMT+0800 (台北標準時間)
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> on Sat Jan 13 2024 17:08:14 GMT+0900 (Japan Standard Time)
</footer>
<script> prettyPrint(); </script>

@ -47,7 +47,7 @@
<dt class="tag-version">Version:</dt>
<dd class="tag-version"><ul class="dummy"><li>0.8.0</li></ul></dd>
<dd class="tag-version"><ul class="dummy"><li>0.8.3</li></ul></dd>
@ -244,7 +244,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line95">line 95</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line129">line 129</a>
</li></ul></dd>
@ -417,7 +417,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line104">line 104</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line138">line 138</a>
</li></ul></dd>
@ -590,7 +590,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line123">line 123</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line157">line 157</a>
</li></ul></dd>
@ -765,7 +765,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line113">line 113</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line147">line 147</a>
</li></ul></dd>
@ -880,7 +880,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line138">line 138</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line169">line 169</a>
</li></ul></dd>
@ -1053,7 +1053,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line86">line 86</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line120">line 120</a>
</li></ul></dd>
@ -1226,7 +1226,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line75">line 75</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line109">line 109</a>
</li></ul></dd>
@ -1401,7 +1401,7 @@ md5('The quick brown fox jumps over the lazy dog');</code></pre>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line146">line 146</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line177">line 177</a>
</li></ul></dd>
@ -1477,13 +1477,13 @@ hash.update('The quick brown fox jumps over the lazy dog');</code></pre>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Namespaces</h3><ul><li><a href="md5_.html">md5</a></li><li><a href="md5.hmac.html">hmac</a></li></ul><h3>Classes</h3><ul><li><a href="HmacMd5.html">HmacMd5</a></li><li><a href="Md5.html">Md5</a></li></ul><h3>Global</h3><ul><li><a href="global.html#md5%2508">md5</a></li></ul>
<h2><a href="index.html">Home</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#md5">md5</a></li><li><a href="md5.hmac.html">hmac</a></li></ul><h3>Classes</h3><ul><li><a href="HmacMd5.html">HmacMd5</a></li><li><a href="Md5.html">Md5</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> on Wed Sep 27 2023 21:32:04 GMT+0800 (台北標準時間)
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> on Sat Jan 13 2024 17:08:14 GMT+0900 (Japan Standard Time)
</footer>
<script> prettyPrint(); </script>

@ -47,13 +47,16 @@
<p><a href="https://travis-ci.org/emn178/js-md5"><img src="https://travis-ci.org/emn178/js-md5.svg?branch=master" alt="Build Status"></a>
<a href="https://coveralls.io/r/emn178/js-md5?branch=master"><img src="https://coveralls.io/repos/emn178/js-md5/badge.svg?branch=master" alt="Coverage Status"></a><br>
<a href="https://nodei.co/npm/js-md5/"><img src="https://nodei.co/npm/js-md5.png?stars&amp;downloads" alt="NPM"></a></p>
<p>A simple MD5 hash function for JavaScript supports UTF-8 encoding.</p>
<p>A simple and fast MD5 hash function for JavaScript supports UTF-8 encoding.</p>
<h2>Demo</h2>
<p><a href="http://emn178.github.io/online-tools/md5.html">MD5 Online</a><br>
<a href="http://emn178.github.io/online-tools/md5_checksum.html">MD5 File Checksum Online</a></p>
<h2>Download</h2>
<p><a href="https://raw.github.com/emn178/js-md5/master/build/md5.min.js">Compress</a><br>
<a href="https://raw.github.com/emn178/js-md5/master/src/md5.js">Uncompress</a></p>
<h2>Benchmark</h2>
<p><a href="https://jsperf.app/jonuhi">jsPerf Benchmark</a><br>
<a href="https://github.com/emn178/js-md5/issues/19">File Benchmark</a></p>
<h2>Installation</h2>
<p>You can also install js-md5 by using Bower.</p>
<pre><code>bower install md5
@ -81,6 +84,10 @@ hash.hex();
<p>If you use node.js, you should require the module first:</p>
<pre class="prettyprint source lang-JavaScript"><code>var md5 = require('js-md5');
</code></pre>
<h3>TypeScript</h3>
<p>If you use TypeScript, you can import like this:</p>
<pre class="prettyprint source lang-TypeScript"><code>import { md5 } from 'js-md5';
</code></pre>
<h2>RequireJS</h2>
<p>It supports AMD:</p>
<pre class="prettyprint source lang-JavaScript"><code>require(['your/path/md5.js'], function(md5) {
@ -129,13 +136,13 @@ Author: Chen, Yi-Cyuan (emn178@gmail.com)</p></article>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Namespaces</h3><ul><li><a href="md5_.html">md5</a></li><li><a href="md5.hmac.html">hmac</a></li></ul><h3>Classes</h3><ul><li><a href="HmacMd5.html">HmacMd5</a></li><li><a href="Md5.html">Md5</a></li></ul><h3>Global</h3><ul><li><a href="global.html#md5%2508">md5</a></li></ul>
<h2><a href="index.html">Home</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#md5">md5</a></li><li><a href="md5.hmac.html">hmac</a></li></ul><h3>Classes</h3><ul><li><a href="HmacMd5.html">HmacMd5</a></li><li><a href="Md5.html">Md5</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> on Wed Sep 27 2023 21:32:04 GMT+0800 (台北標準時間)
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> on Sat Jan 13 2024 17:08:14 GMT+0900 (Japan Standard Time)
</footer>
<script> prettyPrint(); </script>

@ -29,7 +29,7 @@
<header>
<h2>
<span class="ancestors"><a href="md5_.html">md5</a>.</span>hmac</h2>
<span class="ancestors"><a href="global.html#md5">md5</a>.</span>hmac</h2>
</header>
@ -71,7 +71,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line207">line 207</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line705">line 705</a>
</li></ul></dd>
@ -252,7 +252,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line233">line 233</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line731">line 731</a>
</li></ul></dd>
@ -457,7 +457,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line243">line 243</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line741">line 741</a>
</li></ul></dd>
@ -662,7 +662,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line264">line 264</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line762">line 762</a>
</li></ul></dd>
@ -869,7 +869,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line253">line 253</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line751">line 751</a>
</li></ul></dd>
@ -1042,7 +1042,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line280">line 280</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line780">line 780</a>
</li></ul></dd>
@ -1247,7 +1247,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line223">line 223</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line721">line 721</a>
</li></ul></dd>
@ -1452,7 +1452,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line210">line 210</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line708">line 708</a>
</li></ul></dd>
@ -1659,7 +1659,7 @@ md5.hmac('key', 'The quick brown fox jumps over the lazy dog');</code></pre>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line289">line 289</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line789">line 789</a>
</li></ul></dd>
@ -1735,13 +1735,13 @@ hash.update('The quick brown fox jumps over the lazy dog');</code></pre>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Namespaces</h3><ul><li><a href="md5_.html">md5</a></li><li><a href="md5.hmac.html">hmac</a></li></ul><h3>Classes</h3><ul><li><a href="HmacMd5.html">HmacMd5</a></li><li><a href="Md5.html">Md5</a></li></ul><h3>Global</h3><ul><li><a href="global.html#md5%2508">md5</a></li></ul>
<h2><a href="index.html">Home</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#md5">md5</a></li><li><a href="md5.hmac.html">hmac</a></li></ul><h3>Classes</h3><ul><li><a href="HmacMd5.html">HmacMd5</a></li><li><a href="Md5.html">Md5</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> on Wed Sep 27 2023 21:32:04 GMT+0800 (台北標準時間)
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> on Sat Jan 13 2024 17:08:14 GMT+0900 (Japan Standard Time)
</footer>
<script> prettyPrint(); </script>

@ -93,7 +93,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line317">line 317</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line192">line 192</a>
</li></ul></dd>
@ -103,7 +103,7 @@
<dt class="tag-see">See:</dt>
<dd class="tag-see">
<ul>
<li><a href="md5_.html#.create">md5.create</a></li>
<li><a href="global.html#md5#.create">md5.create</a></li>
</ul>
</dd>
@ -208,7 +208,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line704">line 704</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line579">line 579</a>
</li></ul></dd>
@ -218,7 +218,7 @@
<dt class="tag-see">See:</dt>
<dd class="tag-see">
<ul>
<li><a href="md5_.html#.array">md5.array</a></li>
<li><a href="global.html#md5#.array">md5.array</a></li>
</ul>
</dd>
@ -330,7 +330,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line716">line 716</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line591">line 591</a>
</li></ul></dd>
@ -340,7 +340,7 @@
<dt class="tag-see">See:</dt>
<dd class="tag-see">
<ul>
<li><a href="md5_.html#.arrayBuffer">md5.arrayBuffer</a></li>
<li><a href="global.html#md5#.arrayBuffer">md5.arrayBuffer</a></li>
</ul>
</dd>
@ -452,7 +452,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line751">line 751</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line626">line 626</a>
</li></ul></dd>
@ -462,7 +462,7 @@
<dt class="tag-see">See:</dt>
<dd class="tag-see">
<ul>
<li><a href="md5_.html#.base64">md5.base64</a></li>
<li><a href="global.html#md5#.base64">md5.base64</a></li>
</ul>
</dd>
@ -576,7 +576,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line738">line 738</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line613">line 613</a>
</li></ul></dd>
@ -586,7 +586,7 @@
<dt class="tag-see">See:</dt>
<dd class="tag-see">
<ul>
<li><a href="md5_.html#.buffer">md5.buffer</a></li>
<li><a href="global.html#md5#.buffer">md5.buffer</a></li>
</ul>
</dd>
@ -698,7 +698,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line682">line 682</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line557">line 557</a>
</li></ul></dd>
@ -708,7 +708,7 @@
<dt class="tag-see">See:</dt>
<dd class="tag-see">
<ul>
<li><a href="md5_.html#.digest">md5.digest</a></li>
<li><a href="global.html#md5#.digest">md5.digest</a></li>
</ul>
</dd>
@ -820,7 +820,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line637">line 637</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line512">line 512</a>
</li></ul></dd>
@ -830,7 +830,7 @@
<dt class="tag-see">See:</dt>
<dd class="tag-see">
<ul>
<li><a href="md5_.html#.hex">md5.hex</a></li>
<li><a href="global.html#md5#.hex">md5.hex</a></li>
</ul>
</dd>
@ -942,7 +942,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line670">line 670</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line545">line 545</a>
</li></ul></dd>
@ -952,7 +952,7 @@
<dt class="tag-see">See:</dt>
<dd class="tag-see">
<ul>
<li><a href="md5_.html#.hex">md5.hex</a></li>
<li><a href="global.html#md5#.hex">md5.hex</a></li>
</ul>
</dd>
@ -1122,7 +1122,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line345">line 345</a>
<a href="md5.js.html">md5.js</a>, <a href="md5.js.html#line220">line 220</a>
</li></ul></dd>
@ -1132,7 +1132,7 @@
<dt class="tag-see">See:</dt>
<dd class="tag-see">
<ul>
<li><a href="md5_.html#.update">md5.update</a></li>
<li><a href="global.html#md5#.update">md5.update</a></li>
</ul>
</dd>
@ -1197,13 +1197,13 @@
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Namespaces</h3><ul><li><a href="md5_.html">md5</a></li><li><a href="md5.hmac.html">hmac</a></li></ul><h3>Classes</h3><ul><li><a href="HmacMd5.html">HmacMd5</a></li><li><a href="Md5.html">Md5</a></li></ul><h3>Global</h3><ul><li><a href="global.html#md5%2508">md5</a></li></ul>
<h2><a href="index.html">Home</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#md5">md5</a></li><li><a href="md5.hmac.html">hmac</a></li></ul><h3>Classes</h3><ul><li><a href="HmacMd5.html">HmacMd5</a></li><li><a href="Md5.html">Md5</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> on Wed Sep 27 2023 21:32:04 GMT+0800 (台北標準時間)
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> on Sat Jan 13 2024 17:08:14 GMT+0900 (Japan Standard Time)
</footer>
<script> prettyPrint(); </script>

@ -30,7 +30,7 @@
* [js-md5]{@link https://github.com/emn178/js-md5}
*
* @namespace md5
* @version 0.8.0
* @version 0.8.3
* @author Chen, Yi-Cyuan [emn178@gmail.com]
* @copyright Chen, Yi-Cyuan 2014-2023
* @license MIT
@ -38,49 +38,83 @@
(function () {
'use strict';
// the following variables will be set in production files (md5.min.js and md5-lite.min.js) to contants
// ------------------------------------------------
// for production of lite version, with testing
var NO_HMAC = typeof JS_MD5_NO_HMAC !== 'undefined' ? !!JS_MD5_NO_HMAC : false; // true for md5-lite
// remove support for legacy browsers like IE to minimize the output file
var NO_LEGACY = typeof JS_MD5_NO_LEGACY !== "undefined" ? !!JS_MD5_NO_LEGACY : false; // true for md5-lite
var NO_ARRAY_BUFFER, NO_ARRAY_BUFFER_IS_VIEW, NO_BUFFER_FROM;
if (!NO_LEGACY) {
// ArrayBuffer is fully adopted in all browsers in year 2012 including IE 10
NO_ARRAY_BUFFER = typeof JS_MD5_NO_ARRAY_BUFFER !== "undefined" ? !!JS_MD5_NO_ARRAY_BUFFER: false;
// ArrayBuffer.isView is fully adopted in all browsers in year 2014 including IE 11
NO_ARRAY_BUFFER_IS_VIEW = typeof JS_MD5_NO_ARRAY_BUFFER_IS_VIEW !== "undefined" ? !!JS_MD5_NO_ARRAY_BUFFER_IS_VIEW : false;
// Buffer.from is Node.js function provided since 5.10.0
// new Buffer is depreciated since Node 10
NO_BUFFER_FROM = typeof JS_MD5_NO_BUFFER_FROM !== "undefined" ? !!JS_MD5_NO_BUFFER_FROM : false;
}
// for testing only
// var NO_ARRAY_BUFFER = typeof JS_MD5_NO_ARRAY_BUFFER !== "undefined" ? !!JS_MD5_NO_ARRAY_BUFFER : false;
var NO_NODE_JS = typeof JS_MD5_NO_NODE_JS !== "undefined" ? !!JS_MD5_NO_NODE_JS : false;
var NO_COMMON_JS = typeof JS_MD5_NO_COMMON_JS !== "undefined" ? !!JS_MD5_NO_COMMON_JS : false;
// force polyfill for ArrayBuffer.isView
// force polyfill for Buffer.from which is recommended after Node 10+
// ------------------------------------------------
// console.log(`${NO_HMAC?0:1}${NO_LEGACY?0:1}${NO_ARRAY_BUFFER?0:1}${NO_NODE_JS?0:1}`)
var INPUT_ERROR = 'input is invalid type';
var FINALIZE_ERROR = 'finalize already called';
var WINDOW = typeof window === 'object';
var root = WINDOW ? window : {};
if (root.JS_MD5_NO_WINDOW) {
WINDOW = false;
}
var WEB_WORKER = !WINDOW &amp;&amp; typeof self === 'object';
var NODE_JS = !root.JS_MD5_NO_NODE_JS &amp;&amp; typeof process === 'object' &amp;&amp; process.versions &amp;&amp; process.versions.node;
var root = typeof window === 'object' ? window : {};
var WEB_WORKER = typeof WorkerGlobalScope !== "undefined" ? !!WorkerGlobalScope : false;
// if(typeof WorkerGlobalScope !== "undefined") throw "123";
var NODE_JS = !NO_NODE_JS &amp;&amp; typeof process === 'object' &amp;&amp; process.versions &amp;&amp; process.versions.node;
if (NODE_JS) {
root = global;
} else if (WEB_WORKER) {
root = self;
}
var COMMON_JS = !root.JS_MD5_NO_COMMON_JS &amp;&amp; typeof module === 'object' &amp;&amp; module.exports;
var COMMON_JS = !NO_COMMON_JS &amp;&amp; typeof module === 'object' &amp;&amp; module.exports;
var AMD = typeof define === 'function' &amp;&amp; define.amd;
var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER &amp;&amp; typeof ArrayBuffer !== 'undefined';
/** @type {ArrayBufferConstructor?} */
var ArrayBuffer_ = !NO_ARRAY_BUFFER ? ArrayBuffer : 0; // compatibility with old browsers
var HEX_CHARS = '0123456789abcdef'.split('');
var EXTRA = [128, 32768, 8388608, -2147483648];
var SHIFT = [0, 8, 16, 24];
var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];
var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
var blocks = [], buffer8;
if (ARRAY_BUFFER) {
var buffer = new ArrayBuffer(68);
buffer8 = new Uint8Array(buffer);
blocks = new Uint32Array(buffer);
}
var isArray = Array.isArray; // isArray is available in all modern browser ()
var isView = !NO_ARRAY_BUFFER ? ArrayBuffer_.isView : undefined; // undefined if JS_MD5_NO_ARRAY_BUFFER is true
var isArray = Array.isArray;
if (root.JS_MD5_NO_NODE_JS || !isArray) {
if (!NO_LEGACY) {
if (NO_NODE_JS || !isArray) {
isArray = function (obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
};
}
var isView = ArrayBuffer.isView;
if (ARRAY_BUFFER &amp;&amp; (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !isView)) {
if (NO_ARRAY_BUFFER_IS_VIEW || !isView) {
isView = function (obj) {
return typeof obj === 'object' &amp;&amp; obj.buffer &amp;&amp; obj.buffer.constructor === ArrayBuffer;
return typeof obj === 'object' &amp;&amp; obj.buffer &amp;&amp; obj.buffer.constructor === ArrayBuffer_;
};
}
}
var blocks = [], buffer8;
if (!NO_ARRAY_BUFFER) {
var buffer = new ArrayBuffer_(68);
buffer8 = new Uint8Array(buffer);
blocks = new Uint32Array(buffer);
}
// [message: string, isString: bool]
var formatMessage = function (message) {
@ -91,14 +125,14 @@
if (type !== 'object' || message === null) {
throw new Error(INPUT_ERROR);
}
if (ARRAY_BUFFER &amp;&amp; message.constructor === ArrayBuffer) {
if (message.constructor === ArrayBuffer_) {
return [new Uint8Array(message), false];
}
if (!isArray(message) &amp;&amp; !isView(message)) {
throw new Error(INPUT_ERROR);
}
if (isArray(message) || isView(message)) {
return [message, false];
}
throw new Error(INPUT_ERROR);
}
/**
* @method hex
@ -157,11 +191,8 @@
* @example
* md5.base64('The quick brown fox jumps over the lazy dog');
*/
var createOutputMethod = function (outputType) {
return function (message) {
return new Md5(true).update(message)[outputType]();
};
};
0; // dummy code for jsDoc
/**
* @method create
@ -183,164 +214,8 @@
* var hash = md5.create();
* hash.update('The quick brown fox jumps over the lazy dog');
*/
var createMethod = function () {
var method = createOutputMethod('hex');
if (NODE_JS) {
method = nodeWrap(method);
}
method.create = function () {
return new Md5();
};
method.update = function (message) {
return method.create().update(message);
};
for (var i = 0; i &lt; OUTPUT_TYPES.length; ++i) {
var type = OUTPUT_TYPES[i];
method[type] = createOutputMethod(type);
}
return method;
};
var nodeWrap = function (method) {
var crypto = require('crypto')
var Buffer = require('buffer').Buffer;
var bufferFrom;
if (Buffer.from &amp;&amp; !root.JS_MD5_NO_BUFFER_FROM) {
bufferFrom = Buffer.from;
} else {
bufferFrom = function (message) {
return new Buffer(message);
};
}
var nodeMethod = function (message) {
if (typeof message === 'string') {
return crypto.createHash('md5').update(message, 'utf8').digest('hex');
} else {
if (message === null || message === undefined) {
throw new Error(INPUT_ERROR);
} else if (message.constructor === ArrayBuffer) {
message = new Uint8Array(message);
}
}
if (isArray(message) || isView(message) ||
message.constructor === Buffer) {
return crypto.createHash('md5').update(bufferFrom(message)).digest('hex');
} else {
return method(message);
}
};
return nodeMethod;
};
/**
* @namespace md5.hmac
*/
/**
* @method hex
* @memberof md5.hmac
* @description Output hash as hex string
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {String} Hex string
* @example
* md5.hmac.hex('key', 'The quick brown fox jumps over the lazy dog');
* // equal to
* md5.hmac('key', 'The quick brown fox jumps over the lazy dog');
*/
/**
* @method digest
* @memberof md5.hmac
* @description Output hash as bytes array
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {Array} Bytes array
* @example
* md5.hmac.digest('key', 'The quick brown fox jumps over the lazy dog');
*/
/**
* @method array
* @memberof md5.hmac
* @description Output hash as bytes array
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {Array} Bytes array
* @example
* md5.hmac.array('key', 'The quick brown fox jumps over the lazy dog');
*/
/**
* @method arrayBuffer
* @memberof md5.hmac
* @description Output hash as ArrayBuffer
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {ArrayBuffer} ArrayBuffer
* @example
* md5.hmac.arrayBuffer('key', 'The quick brown fox jumps over the lazy dog');
*/
/**
* @method buffer
* @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.
* @memberof md5.hmac
* @description Output hash as ArrayBuffer
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {ArrayBuffer} ArrayBuffer
* @example
* md5.hmac.buffer('key', 'The quick brown fox jumps over the lazy dog');
*/
/**
* @method base64
* @memberof md5.hmac
* @description Output hash as base64 string
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {String} base64 string
* @example
* md5.hmac.base64('key', 'The quick brown fox jumps over the lazy dog');
*/
var createHmacOutputMethod = function (outputType) {
return function (key, message) {
return new HmacMd5(key, true).update(message)[outputType]();
};
};
/**
* @method create
* @memberof md5.hmac
* @description Create HmacMd5 object
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @returns {HmacMd5} HmacMd5 object.
* @example
* var hash = md5.hmac.create('key');
*/
/**
* @method update
* @memberof md5.hmac
* @description Create and update HmacMd5 object
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {HmacMd5} HmacMd5 object.
* @example
* var hash = md5.hmac.update('key', 'The quick brown fox jumps over the lazy dog');
* // equal to
* var hash = md5.hmac.create('key');
* hash.update('The quick brown fox jumps over the lazy dog');
*/
var createHmacMethod = function () {
var method = createHmacOutputMethod('hex');
method.create = function (key) {
return new HmacMd5(key);
};
method.update = function (key, message) {
return method.create(key).update(message);
};
for (var i = 0; i &lt; OUTPUT_TYPES.length; ++i) {
var type = OUTPUT_TYPES[i];
method[type] = createHmacOutputMethod(type);
}
return method;
};
0; // dummy code for jsDoc
/**
* Md5 class
@ -357,8 +232,8 @@
this.blocks = blocks;
this.buffer8 = buffer8;
} else {
if (ARRAY_BUFFER) {
var buffer = new ArrayBuffer(68);
if (!NO_ARRAY_BUFFER) {
var buffer = new ArrayBuffer_(68);
this.buffer8 = new Uint8Array(buffer);
this.blocks = new Uint32Array(buffer);
} else {
@ -401,7 +276,7 @@
}
if (isString) {
if (ARRAY_BUFFER) {
if (!NO_ARRAY_BUFFER) {
for (i = this.start; index &lt; length &amp;&amp; i &lt; 64; ++index) {
code = message.charCodeAt(index);
if (code &lt; 0x80) {
@ -443,7 +318,7 @@
}
}
} else {
if (ARRAY_BUFFER) {
if (!NO_ARRAY_BUFFER) {
for (i = this.start; index &lt; length &amp;&amp; i &lt; 64; ++index) {
buffer8[i++] = message[index];
}
@ -804,6 +679,156 @@
return base64Str;
};
var nodeJsEnv = NODE_JS ? {
crypto: require('crypto'),
Buffer: require('buffer').Buffer,
bufferFrom: (Buffer.from &amp;&amp; !NO_BUFFER_FROM) ? Buffer.from : function (message) {
return new Buffer(message);
}
} : {};
var createOutputMethod = function (outputType) {
return function (message) {
return new Md5(true).update(message)[outputType]();
};
};
var md5Base = createOutputMethod('hex');
NODE_JS &amp;&amp; (function () { // require function wrapping for node-test
var md5BaseOriginal = md5Base;
var { crypto, Buffer, bufferFrom } = nodeJsEnv;
md5Base = function (message) {
if (message === null || message === undefined) {
throw new Error(INPUT_ERROR);
}
if (typeof message === 'string') {
return crypto.createHash('md5').update(message, 'utf8').digest('hex');
}
if (message.constructor === ArrayBuffer_) {
message = new Uint8Array(message);
}
if (isArray(message) || isView(message) || message.constructor === Buffer) {
return crypto.createHash('md5').update(bufferFrom(message)).digest('hex');
}
return md5BaseOriginal(message);
};
})();
md5Base.create = function () {
return new Md5();
};
md5Base.update = function (message) {
return md5Base.create().update(message);
};
for (var i = 0; i &lt; OUTPUT_TYPES.length; ++i) {
var type = OUTPUT_TYPES[i];
md5Base[type] = createOutputMethod(type);
}
var exports = md5Base;
exports.md5 = exports;
if (!NO_HMAC) {
/**
* @namespace md5.hmac
*/
/**
* @method hex
* @memberof md5.hmac
* @description Output hash as hex string
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {String} Hex string
* @example
* md5.hmac.hex('key', 'The quick brown fox jumps over the lazy dog');
* // equal to
* md5.hmac('key', 'The quick brown fox jumps over the lazy dog');
*/
/**
* @method digest
* @memberof md5.hmac
* @description Output hash as bytes array
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {Array} Bytes array
* @example
* md5.hmac.digest('key', 'The quick brown fox jumps over the lazy dog');
*/
/**
* @method array
* @memberof md5.hmac
* @description Output hash as bytes array
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {Array} Bytes array
* @example
* md5.hmac.array('key', 'The quick brown fox jumps over the lazy dog');
*/
/**
* @method arrayBuffer
* @memberof md5.hmac
* @description Output hash as ArrayBuffer
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {ArrayBuffer} ArrayBuffer
* @example
* md5.hmac.arrayBuffer('key', 'The quick brown fox jumps over the lazy dog');
*/
/**
* @method buffer
* @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.
* @memberof md5.hmac
* @description Output hash as ArrayBuffer
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {ArrayBuffer} ArrayBuffer
* @example
* md5.hmac.buffer('key', 'The quick brown fox jumps over the lazy dog');
*/
/**
* @method base64
* @memberof md5.hmac
* @description Output hash as base64 string
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {String} base64 string
* @example
* md5.hmac.base64('key', 'The quick brown fox jumps over the lazy dog');
*/
0; // dummy code for jsDoc
var createHmacOutputMethod = function (outputType) {
return function (key, message) {
return new HmacMd5(key, true).update(message)[outputType]();
};
};
/**
* @method create
* @memberof md5.hmac
* @description Create HmacMd5 object
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @returns {HmacMd5} HmacMd5 object.
* @example
* var hash = md5.hmac.create('key');
*/
/**
* @method update
* @memberof md5.hmac
* @description Create and update HmacMd5 object
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {HmacMd5} HmacMd5 object.
* @example
* var hash = md5.hmac.update('key', 'The quick brown fox jumps over the lazy dog');
* // equal to
* var hash = md5.hmac.create('key');
* hash.update('The quick brown fox jumps over the lazy dog');
*/
/**
* HmacMd5 class
* @class HmacMd5
@ -870,15 +895,26 @@
}
};
var exports = createMethod();
exports.md5 = exports;
exports.md5.hmac = createHmacMethod();
var hmacBase = createHmacOutputMethod('hex');
hmacBase.create = function (key) {
return new HmacMd5(key);
};
hmacBase.update = function (key, message) {
return hmacBase.create(key).update(message);
};
for (var i = 0; i &lt; OUTPUT_TYPES.length; ++i) {
var type = OUTPUT_TYPES[i];
hmacBase[type] = createHmacOutputMethod(type);
}
exports.md5.hmac = hmacBase;
}
if (COMMON_JS) {
module.exports = exports;
} else {
/**
* @method md5
* @method md5
* @description Md5 hash function, export to global in browsers.
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {String} md5 hashes
@ -901,8 +937,7 @@
});
}
}
})();
</code></pre>
})();</code></pre>
</article>
</section>
@ -912,13 +947,13 @@
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Namespaces</h3><ul><li><a href="md5_.html">md5</a></li><li><a href="md5.hmac.html">hmac</a></li></ul><h3>Classes</h3><ul><li><a href="HmacMd5.html">HmacMd5</a></li><li><a href="Md5.html">Md5</a></li></ul><h3>Global</h3><ul><li><a href="global.html#md5%2508">md5</a></li></ul>
<h2><a href="index.html">Home</a></h2><h3>Namespaces</h3><ul><li><a href="global.html#md5">md5</a></li><li><a href="md5.hmac.html">hmac</a></li></ul><h3>Classes</h3><ul><li><a href="HmacMd5.html">HmacMd5</a></li><li><a href="Md5.html">Md5</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> on Wed Sep 27 2023 21:32:04 GMT+0800 (台北標準時間)
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> on Sat Jan 13 2024 17:08:14 GMT+0900 (Japan Standard Time)
</footer>
<script> prettyPrint(); </script>

2320
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -10,15 +10,19 @@
"nyc": "^15.1.0",
"requirejs": "^2.1.22",
"tiny-worker": "^2.3.0",
"uglify-js": "^3.1.9"
"uglify-js": "^3.17.4"
},
"scripts": {
"test": "nyc mocha tests/node-test.js",
"report": "nyc --reporter=html --reporter=text mocha tests/node-test.js",
"coveralls": "nyc report --reporter=text-lcov | coveralls",
"doc": "rm -rf doc;jsdoc src README.md -d doc",
"compress": "uglifyjs src/md5.js -c -m eval --comments --output build/md5.min.js",
"build": "npm run-script compress;npm run-script doc"
"compress": "uglifyjs src/config/full.config.js src/md5.js -c passes=3 --toplevel -m eval --comments --output build/md5.min.js",
"compress-lite": "uglifyjs src/config/lite.config.js src/md5.js --compress passes=3,unused,dead_code,join_vars --toplevel -m eval --comments --output build/md5-lite.min.js",
"dist-src": "uglifyjs src/config/full.config.js src/md5.js -c passes=3,objects=false,negate_iife=false,merge_vars=false,loops=false,join_vars=false,inline=false,imports=false,if_return=false,functions=false,dead_code=true,default_values=false,collapse_vars=false,comparisons=false,awaits=false,booleans=false,assignments=false,arrows=false,arguments=false,annotations=false,properties=false,reduce_funcs=false,rests=false,sequences=true,side_effects=true,spreads=false,strings=false,switches=false,templates=false,yields=false --beautify --toplevel --comments --output build/md5.js",
"dist-lite": "uglifyjs src/config/lite.config.js src/md5.js -c passes=3,objects=false,negate_iife=false,merge_vars=false,loops=false,join_vars=false,inline=false,imports=false,if_return=false,functions=false,dead_code=true,default_values=false,collapse_vars=false,comparisons=false,awaits=false,booleans=false,assignments=false,arrows=false,arguments=false,annotations=false,properties=false,reduce_funcs=false,rests=false,sequences=true,side_effects=true,spreads=false,strings=false,switches=false,templates=false,yields=false --beautify --toplevel --comments --output build/md5-lite.js",
"build": "npm run-script compress;npm run-script compress-lite;npm run dist-src;npm run dist-lite;npm run-script doc",
"build-bun": "bun run compress;bun run compress-lite;bun run dist-src;bun run dist-lite;bun run doc"
},
"repository": {
"type": "git",
@ -38,12 +42,20 @@
"url": "https://github.com/emn178/js-md5/issues"
},
"nyc": {
"extension": [
".js"
],
"exclude": [
"tests"
]
"tests",
"src/config/*.js"
],
"require": ["mocha", "expect.js"]
},
"browser": {
"crypto": false,
"buffer": false
},
"dependencies": {
"coveralls": "^3.1.1"
}
}

@ -0,0 +1,7 @@
var JS_MD5_NO_HMAC = false;
var JS_MD5_NO_LEGACY = false;
var JS_MD5_NO_ARRAY_BUFFER = false;
var JS_MD5_NO_NODE_JS = false;
var JS_MD5_NO_COMMON_JS = false;
var JS_MD5_NO_ARRAY_BUFFER_IS_VIEW = false;
var JS_MD5_NO_BUFFER_FROM = false;

@ -0,0 +1,7 @@
var JS_MD5_NO_HMAC = true;
var JS_MD5_NO_LEGACY = true;
var JS_MD5_NO_ARRAY_BUFFER = false;
var JS_MD5_NO_NODE_JS = false;
var JS_MD5_NO_COMMON_JS = false;
var JS_MD5_NO_ARRAY_BUFFER_IS_VIEW = false;
var JS_MD5_NO_BUFFER_FROM = false;

@ -10,49 +10,83 @@
(function () {
'use strict';
// the following variables will be set in production files (md5.min.js and md5-lite.min.js) to contants
// ------------------------------------------------
// for production of lite version, with testing
var NO_HMAC = typeof JS_MD5_NO_HMAC !== 'undefined' ? !!JS_MD5_NO_HMAC : false; // true for md5-lite
// remove support for legacy browsers like IE to minimize the output file
var NO_LEGACY = typeof JS_MD5_NO_LEGACY !== "undefined" ? !!JS_MD5_NO_LEGACY : false; // true for md5-lite
var NO_ARRAY_BUFFER, NO_ARRAY_BUFFER_IS_VIEW, NO_BUFFER_FROM;
if (!NO_LEGACY) {
// ArrayBuffer is fully adopted in all browsers in year 2012 including IE 10
NO_ARRAY_BUFFER = typeof JS_MD5_NO_ARRAY_BUFFER !== "undefined" ? !!JS_MD5_NO_ARRAY_BUFFER: false;
// ArrayBuffer.isView is fully adopted in all browsers in year 2014 including IE 11
NO_ARRAY_BUFFER_IS_VIEW = typeof JS_MD5_NO_ARRAY_BUFFER_IS_VIEW !== "undefined" ? !!JS_MD5_NO_ARRAY_BUFFER_IS_VIEW : false;
// Buffer.from is Node.js function provided since 5.10.0
// new Buffer is depreciated since Node 10
NO_BUFFER_FROM = typeof JS_MD5_NO_BUFFER_FROM !== "undefined" ? !!JS_MD5_NO_BUFFER_FROM : false;
}
// for testing only
// var NO_ARRAY_BUFFER = typeof JS_MD5_NO_ARRAY_BUFFER !== "undefined" ? !!JS_MD5_NO_ARRAY_BUFFER : false;
var NO_NODE_JS = typeof JS_MD5_NO_NODE_JS !== "undefined" ? !!JS_MD5_NO_NODE_JS : false;
var NO_COMMON_JS = typeof JS_MD5_NO_COMMON_JS !== "undefined" ? !!JS_MD5_NO_COMMON_JS : false;
// force polyfill for ArrayBuffer.isView
// force polyfill for Buffer.from which is recommended after Node 10+
// ------------------------------------------------
// console.log(`${NO_HMAC?0:1}${NO_LEGACY?0:1}${NO_ARRAY_BUFFER?0:1}${NO_NODE_JS?0:1}`)
var INPUT_ERROR = 'input is invalid type';
var FINALIZE_ERROR = 'finalize already called';
var WINDOW = typeof window === 'object';
var root = WINDOW ? window : {};
if (root.JS_MD5_NO_WINDOW) {
WINDOW = false;
}
var WEB_WORKER = !WINDOW && typeof self === 'object';
var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;
var root = typeof window === 'object' ? window : {};
var WEB_WORKER = typeof WorkerGlobalScope !== "undefined" ? !!WorkerGlobalScope : false;
// if(typeof WorkerGlobalScope !== "undefined") throw "123";
var NODE_JS = !NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;
if (NODE_JS) {
root = global;
} else if (WEB_WORKER) {
root = self;
}
var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;
var COMMON_JS = !NO_COMMON_JS && typeof module === 'object' && module.exports;
var AMD = typeof define === 'function' && define.amd;
var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';
/** @type {ArrayBufferConstructor?} */
var ArrayBuffer_ = !NO_ARRAY_BUFFER ? ArrayBuffer : 0; // compatibility with old browsers
var HEX_CHARS = '0123456789abcdef'.split('');
var EXTRA = [128, 32768, 8388608, -2147483648];
var SHIFT = [0, 8, 16, 24];
var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];
var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
var blocks = [], buffer8;
if (ARRAY_BUFFER) {
var buffer = new ArrayBuffer(68);
buffer8 = new Uint8Array(buffer);
blocks = new Uint32Array(buffer);
}
var isArray = Array.isArray; // isArray is available in all modern browser ()
var isView = !NO_ARRAY_BUFFER ? ArrayBuffer_.isView : undefined; // undefined if JS_MD5_NO_ARRAY_BUFFER is true
var isArray = Array.isArray;
if (root.JS_MD5_NO_NODE_JS || !isArray) {
if (!NO_LEGACY) {
if (NO_NODE_JS || !isArray) {
isArray = function (obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
};
}
var isView = ArrayBuffer.isView;
if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !isView)) {
if (NO_ARRAY_BUFFER_IS_VIEW || !isView) {
isView = function (obj) {
return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;
return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer_;
};
}
}
var blocks = [], buffer8;
if (!NO_ARRAY_BUFFER) {
var buffer = new ArrayBuffer_(68);
buffer8 = new Uint8Array(buffer);
blocks = new Uint32Array(buffer);
}
// [message: string, isString: bool]
var formatMessage = function (message) {
@ -63,14 +97,14 @@
if (type !== 'object' || message === null) {
throw new Error(INPUT_ERROR);
}
if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {
if (message.constructor === ArrayBuffer_) {
return [new Uint8Array(message), false];
}
if (!isArray(message) && !isView(message)) {
throw new Error(INPUT_ERROR);
}
if (isArray(message) || isView(message)) {
return [message, false];
}
throw new Error(INPUT_ERROR);
}
/**
* @method hex
@ -129,11 +163,8 @@
* @example
* md5.base64('The quick brown fox jumps over the lazy dog');
*/
var createOutputMethod = function (outputType) {
return function (message) {
return new Md5(true).update(message)[outputType]();
};
};
0; // dummy code for jsDoc
/**
* @method create
@ -155,164 +186,8 @@
* var hash = md5.create();
* hash.update('The quick brown fox jumps over the lazy dog');
*/
var createMethod = function () {
var method = createOutputMethod('hex');
if (NODE_JS) {
method = nodeWrap(method);
}
method.create = function () {
return new Md5();
};
method.update = function (message) {
return method.create().update(message);
};
for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
var type = OUTPUT_TYPES[i];
method[type] = createOutputMethod(type);
}
return method;
};
var nodeWrap = function (method) {
var crypto = require('crypto')
var Buffer = require('buffer').Buffer;
var bufferFrom;
if (Buffer.from && !root.JS_MD5_NO_BUFFER_FROM) {
bufferFrom = Buffer.from;
} else {
bufferFrom = function (message) {
return new Buffer(message);
};
}
var nodeMethod = function (message) {
if (typeof message === 'string') {
return crypto.createHash('md5').update(message, 'utf8').digest('hex');
} else {
if (message === null || message === undefined) {
throw new Error(INPUT_ERROR);
} else if (message.constructor === ArrayBuffer) {
message = new Uint8Array(message);
}
}
if (isArray(message) || isView(message) ||
message.constructor === Buffer) {
return crypto.createHash('md5').update(bufferFrom(message)).digest('hex');
} else {
return method(message);
}
};
return nodeMethod;
};
/**
* @namespace md5.hmac
*/
/**
* @method hex
* @memberof md5.hmac
* @description Output hash as hex string
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {String} Hex string
* @example
* md5.hmac.hex('key', 'The quick brown fox jumps over the lazy dog');
* // equal to
* md5.hmac('key', 'The quick brown fox jumps over the lazy dog');
*/
/**
* @method digest
* @memberof md5.hmac
* @description Output hash as bytes array
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {Array} Bytes array
* @example
* md5.hmac.digest('key', 'The quick brown fox jumps over the lazy dog');
*/
/**
* @method array
* @memberof md5.hmac
* @description Output hash as bytes array
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {Array} Bytes array
* @example
* md5.hmac.array('key', 'The quick brown fox jumps over the lazy dog');
*/
/**
* @method arrayBuffer
* @memberof md5.hmac
* @description Output hash as ArrayBuffer
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {ArrayBuffer} ArrayBuffer
* @example
* md5.hmac.arrayBuffer('key', 'The quick brown fox jumps over the lazy dog');
*/
/**
* @method buffer
* @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.
* @memberof md5.hmac
* @description Output hash as ArrayBuffer
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {ArrayBuffer} ArrayBuffer
* @example
* md5.hmac.buffer('key', 'The quick brown fox jumps over the lazy dog');
*/
/**
* @method base64
* @memberof md5.hmac
* @description Output hash as base64 string
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {String} base64 string
* @example
* md5.hmac.base64('key', 'The quick brown fox jumps over the lazy dog');
*/
var createHmacOutputMethod = function (outputType) {
return function (key, message) {
return new HmacMd5(key, true).update(message)[outputType]();
};
};
/**
* @method create
* @memberof md5.hmac
* @description Create HmacMd5 object
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @returns {HmacMd5} HmacMd5 object.
* @example
* var hash = md5.hmac.create('key');
*/
/**
* @method update
* @memberof md5.hmac
* @description Create and update HmacMd5 object
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {HmacMd5} HmacMd5 object.
* @example
* var hash = md5.hmac.update('key', 'The quick brown fox jumps over the lazy dog');
* // equal to
* var hash = md5.hmac.create('key');
* hash.update('The quick brown fox jumps over the lazy dog');
*/
var createHmacMethod = function () {
var method = createHmacOutputMethod('hex');
method.create = function (key) {
return new HmacMd5(key);
};
method.update = function (key, message) {
return method.create(key).update(message);
};
for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
var type = OUTPUT_TYPES[i];
method[type] = createHmacOutputMethod(type);
}
return method;
};
0; // dummy code for jsDoc
/**
* Md5 class
@ -329,8 +204,8 @@
this.blocks = blocks;
this.buffer8 = buffer8;
} else {
if (ARRAY_BUFFER) {
var buffer = new ArrayBuffer(68);
if (!NO_ARRAY_BUFFER) {
var buffer = new ArrayBuffer_(68);
this.buffer8 = new Uint8Array(buffer);
this.blocks = new Uint32Array(buffer);
} else {
@ -373,7 +248,7 @@
}
if (isString) {
if (ARRAY_BUFFER) {
if (!NO_ARRAY_BUFFER) {
for (i = this.start; index < length && i < 64; ++index) {
code = message.charCodeAt(index);
if (code < 0x80) {
@ -415,7 +290,7 @@
}
}
} else {
if (ARRAY_BUFFER) {
if (!NO_ARRAY_BUFFER) {
for (i = this.start; index < length && i < 64; ++index) {
buffer8[i++] = message[index];
}
@ -776,6 +651,156 @@
return base64Str;
};
var nodeJsEnv = NODE_JS ? {
crypto: require('crypto'),
Buffer: require('buffer').Buffer,
bufferFrom: (Buffer.from && !NO_BUFFER_FROM) ? Buffer.from : function (message) {
return new Buffer(message);
}
} : {};
var createOutputMethod = function (outputType) {
return function (message) {
return new Md5(true).update(message)[outputType]();
};
};
var md5Base = createOutputMethod('hex');
NODE_JS && (function () { // require function wrapping for node-test
var md5BaseOriginal = md5Base;
var { crypto, Buffer, bufferFrom } = nodeJsEnv;
md5Base = function (message) {
if (message === null || message === undefined) {
throw new Error(INPUT_ERROR);
}
if (typeof message === 'string') {
return crypto.createHash('md5').update(message, 'utf8').digest('hex');
}
if (message.constructor === ArrayBuffer_) {
message = new Uint8Array(message);
}
if (isArray(message) || isView(message) || message.constructor === Buffer) {
return crypto.createHash('md5').update(bufferFrom(message)).digest('hex');
}
return md5BaseOriginal(message);
};
})();
md5Base.create = function () {
return new Md5();
};
md5Base.update = function (message) {
return md5Base.create().update(message);
};
for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
var type = OUTPUT_TYPES[i];
md5Base[type] = createOutputMethod(type);
}
var exports = md5Base;
exports.md5 = exports;
if (!NO_HMAC) {
/**
* @namespace md5.hmac
*/
/**
* @method hex
* @memberof md5.hmac
* @description Output hash as hex string
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {String} Hex string
* @example
* md5.hmac.hex('key', 'The quick brown fox jumps over the lazy dog');
* // equal to
* md5.hmac('key', 'The quick brown fox jumps over the lazy dog');
*/
/**
* @method digest
* @memberof md5.hmac
* @description Output hash as bytes array
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {Array} Bytes array
* @example
* md5.hmac.digest('key', 'The quick brown fox jumps over the lazy dog');
*/
/**
* @method array
* @memberof md5.hmac
* @description Output hash as bytes array
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {Array} Bytes array
* @example
* md5.hmac.array('key', 'The quick brown fox jumps over the lazy dog');
*/
/**
* @method arrayBuffer
* @memberof md5.hmac
* @description Output hash as ArrayBuffer
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {ArrayBuffer} ArrayBuffer
* @example
* md5.hmac.arrayBuffer('key', 'The quick brown fox jumps over the lazy dog');
*/
/**
* @method buffer
* @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.
* @memberof md5.hmac
* @description Output hash as ArrayBuffer
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {ArrayBuffer} ArrayBuffer
* @example
* md5.hmac.buffer('key', 'The quick brown fox jumps over the lazy dog');
*/
/**
* @method base64
* @memberof md5.hmac
* @description Output hash as base64 string
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {String} base64 string
* @example
* md5.hmac.base64('key', 'The quick brown fox jumps over the lazy dog');
*/
0; // dummy code for jsDoc
var createHmacOutputMethod = function (outputType) {
return function (key, message) {
return new HmacMd5(key, true).update(message)[outputType]();
};
};
/**
* @method create
* @memberof md5.hmac
* @description Create HmacMd5 object
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @returns {HmacMd5} HmacMd5 object.
* @example
* var hash = md5.hmac.create('key');
*/
/**
* @method update
* @memberof md5.hmac
* @description Create and update HmacMd5 object
* @param {String|Array|Uint8Array|ArrayBuffer} key key
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {HmacMd5} HmacMd5 object.
* @example
* var hash = md5.hmac.update('key', 'The quick brown fox jumps over the lazy dog');
* // equal to
* var hash = md5.hmac.create('key');
* hash.update('The quick brown fox jumps over the lazy dog');
*/
/**
* HmacMd5 class
* @class HmacMd5
@ -842,15 +867,26 @@
}
};
var exports = createMethod();
exports.md5 = exports;
exports.md5.hmac = createHmacMethod();
var hmacBase = createHmacOutputMethod('hex');
hmacBase.create = function (key) {
return new HmacMd5(key);
};
hmacBase.update = function (key, message) {
return hmacBase.create(key).update(message);
};
for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
var type = OUTPUT_TYPES[i];
hmacBase[type] = createHmacOutputMethod(type);
}
exports.md5.hmac = hmacBase;
}
if (COMMON_JS) {
module.exports = exports;
} else {
/**
* @method md5
* @method md5
* @description Md5 hash function, export to global in browsers.
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {String} md5 hashes

@ -3,9 +3,9 @@
<head>
<meta charset="UTF-8">
<title>MD5</title>
<link rel="stylesheet" href="../node_modules/mocha/mocha.css">
<script src="../node_modules/mocha/mocha.js"></script>
<script src="../node_modules/expect.js/index.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/mocha/10.2.0/mocha.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/mocha/10.2.0/mocha.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/expect.js/0.3.1/index.min.js"></script>
<script src="../src/md5.js"></script>
</head>
<body>

@ -7,11 +7,12 @@ function unset() {
delete require.cache[require.resolve('./hmac-test.js')];
md5 = null;
BUFFER = undefined;
JS_MD5_NO_WINDOW = undefined;
JS_MD5_NO_NODE_JS = undefined;
JS_MD5_NO_COMMON_JS = undefined;
JS_MD5_NO_ARRAY_BUFFER = undefined;
JS_MD5_NO_ARRAY_BUFFER_IS_VIEW = undefined;
JS_MD5_NO_LEGACY = undefined;
JS_MD5_NO_HMAC = undefined;
window = undefined;
}
@ -30,34 +31,66 @@ function runWindowTest() {
unset();
}
// Node.js env
BUFFER = true;
runCommonJsTest();
function runCommonJsTestLite() {
JS_MD5_NO_LEGACY = true;
JS_MD5_NO_HMAC = true;
md5 = require('../src/md5.js');
require('./test.js');
// require('./hmac-test.js');
unset();
}
function runWindowTestLite() {
window = global;
JS_MD5_NO_LEGACY = true;
JS_MD5_NO_HMAC = true;
// window.JS_MD5_NO_LEGACY = global.JS_MD5_NO_LEGACY = true;
// window.JS_MD5_NO_HMAC = global.JS_MD5_NO_HMAC = true;
require('../src/md5.js');
require('./test.js');
// require('./hmac-test.js');
unset();
}
// Node.js env, no Buffer.from
JS_MD5_NO_BUFFER_FROM = true
runCommonJsTest();
const ArrayBuffer_ = ArrayBuffer;
for (var i = 0; i < 2; i++) {
// Webpack browser env
JS_MD5_NO_NODE_JS = true;
runCommonJsTest();
const runCommonJsTest_ = i ? runCommonJsTestLite : runCommonJsTest;
const runWindowTest_ = i ? runWindowTestLite : runWindowTest;
// browser env
JS_MD5_NO_NODE_JS = true;
JS_MD5_NO_COMMON_JS = true;
runWindowTest();
// Node.js env
BUFFER = true;
runCommonJsTest_();
// Node.js env, no Buffer.from
JS_MD5_NO_BUFFER_FROM = true
runCommonJsTest_();
// Webpack browser env
JS_MD5_NO_NODE_JS = true;
runCommonJsTest_();
// browser env
JS_MD5_NO_NODE_JS = true;
JS_MD5_NO_COMMON_JS = true;
runWindowTest_();
// browser env and no array buffer
JS_MD5_NO_NODE_JS = true;
JS_MD5_NO_COMMON_JS = true;
JS_MD5_NO_ARRAY_BUFFER = true;
runWindowTest_();
// browser env and no isView
JS_MD5_NO_NODE_JS = true;
JS_MD5_NO_COMMON_JS = true;
JS_MD5_NO_ARRAY_BUFFER_IS_VIEW = true;
runWindowTest_();
}
// browser env and no array buffer
JS_MD5_NO_NODE_JS = true;
JS_MD5_NO_COMMON_JS = true;
JS_MD5_NO_ARRAY_BUFFER = true;
runWindowTest();
// browser env and no isView
JS_MD5_NO_NODE_JS = true;
JS_MD5_NO_COMMON_JS = true;
JS_MD5_NO_ARRAY_BUFFER_IS_VIEW = true;
runWindowTest();
// browser AMD
JS_MD5_NO_NODE_JS = true;
@ -73,6 +106,26 @@ define.amd = true;
require('../src/md5.js');
unset();
// browser AMD (lite)
JS_MD5_NO_NODE_JS = true;
JS_MD5_NO_COMMON_JS = true;
JS_MD5_NO_LEGACY = true;
JS_MD5_NO_HMAC = true;
window = global;
define = function (func) {
md5 = func();
require('./test.js');
};
define.amd = true;
require('../src/md5.js');
unset();
// webworker
WORKER = 'tests/worker.js';
SOURCE = 'src/md5.js';
@ -82,13 +135,44 @@ require('./worker-test.js');
delete require.cache[require.resolve('./worker-test.js')];
// cover webworker
JS_MD5_NO_WINDOW = true;
JS_MD5_NO_NODE_JS = true;
WORKER = './worker.js';
SOURCE = '../src/md5.js';
window = global;
self = global;
WorkerGlobalScope = function () { } // for Testing
Worker = function (file) {
require(file);
currentWorker = this;
this.postMessage = function (data) {
onmessage({data: data});
};
}
postMessage = function (data) {
currentWorker.onmessage({data: data});
}
importScripts = function () {};
md5 = require('../src/md5.js');
require('./worker-test.js');
// cover webworker (lite)
JS_MD5_NO_NODE_JS = true;
JS_MD5_NO_HMAC = true;
JS_MD5_NO_LEGACY = true;
WORKER = './worker.js';
SOURCE = '../src/md5.js';
window = global;
self = global;
WorkerGlobalScope = function () { } // for Testing
Worker = function (file) {
require(file);
currentWorker = this;

@ -3,9 +3,9 @@
<head>
<meta charset="UTF-8">
<title>MD5</title>
<link rel="stylesheet" href="../node_modules/mocha/mocha.css">
<script src="../node_modules/mocha/mocha.js"></script>
<script src="../node_modules/expect.js/index.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/mocha/10.2.0/mocha.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/mocha/10.2.0/mocha.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/expect.js/0.3.1/index.min.js"></script>
<script src="../node_modules/requirejs/require.js"></script>
</head>
<body>

@ -0,0 +1,48 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MD5 Function Test</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/mocha/10.2.0/mocha.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/mocha/10.2.0/mocha.min.js"></script>
<script src="../src/md5.js"></script>
<script>
mocha.setup('bdd');
describe('MD5 Test Cases', function() {
const testCases = [
{ input: "Hello", expected: "8b1a9953c4611296a827abf8c47804d7" },
{ input: "12345", expected: "827ccb0eea8a706c4c34a16891f84e7b" },
{ input: "@#$$%^&*", expected: "6cf399a04a4466afedc1ca8bfed1c73b" },
{ input: "你好", expected: "7eca689f0d3389d9dea66ae112e5cfd7" },
{ input: "안녕하세요", expected: "209bebae3eb7363d9b080a66f9e306ef" },
{ input: "こんにちは", expected: "c0e89a293bd36c7a768e4e9d2c5475a8" },
{ input: "Bonjour", expected: "ebc58ab2cb4848d04ec23d83f7ddf985" },
{ input: "مرحبا", expected: "9530db02d3c8217be00c1aa98ec51861" },
{ input: "Halo", expected: "aa6df57fb6fe377d80b4a257b4a92cba" },
{ input: "Xin chào", expected: "d507cf86fa25f6787e3fc5e5d61e00a3" },
// More test cases...
];
testCases.forEach(function(testCase) {
it(`Correct MD5 Hash for "${testCase.input}"`, function(done) {
const result = md5(testCase.input);
if (result === testCase.expected) {
done();
} else {
done(new Error(`Test failed for input "${testCase.input}". Expected: ${testCase.expected}, Got: ${result}`));
}
});
});
});
window.onload = function() {
mocha.run();
};
</script>
</head>
<body>
<div id="mocha"></div>
</body>
</html>

@ -5,6 +5,7 @@
'e4d909c290d0fb1ca068ffaddf22cbd0': 'The quick brown fox jumps over the lazy dog.'
};
console.log(typeof WorkerGlobalScope)
describe('#md5', function () {
Object.keys(cases).forEach(function (hash) {
it('should be equal', function (done) {

@ -3,9 +3,9 @@
<head>
<meta charset="UTF-8">
<title>MD5</title>
<link rel="stylesheet" href="../node_modules/mocha/mocha.css">
<script src="../node_modules/mocha/mocha.js"></script>
<script src="../node_modules/expect.js/index.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/mocha/10.2.0/mocha.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/mocha/10.2.0/mocha.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/expect.js/0.3.1/index.min.js"></script>
<script src="../src/md5.js"></script>
</head>
<body>

Loading…
Cancel
Save