mirror of
https://github.com/emn178/js-md5.git
synced 2026-08-13 04:51:44 +08:00
### Added
- Modern and lite builds generated from the same source. - support ESM. - Set up GitHub release action / provenance ### Fixed - Fix uploading coverage to coveralls - fix recognize environment is node when use browserfs
This commit is contained in:
+72
-42
@@ -30,14 +30,19 @@
|
||||
* [js-md5]{@link https://github.com/emn178/js-md5}
|
||||
*
|
||||
* @namespace md5
|
||||
* @version 0.8.0
|
||||
* @version 0.9.0
|
||||
* @author Chen, Yi-Cyuan [emn178@gmail.com]
|
||||
* @copyright Chen, Yi-Cyuan 2014-2023
|
||||
* @copyright Chen, Yi-Cyuan 2014-2026
|
||||
* @license MIT
|
||||
*/
|
||||
(function () {
|
||||
'use strict';
|
||||
|
||||
var FEATURE_LEGACY = true;
|
||||
var FEATURE_HMAC = true;
|
||||
var FEATURE_BASE64 = true;
|
||||
var FEATURE_BUFFER = true;
|
||||
|
||||
var INPUT_ERROR = 'input is invalid type';
|
||||
var FINALIZE_ERROR = 'finalize already called';
|
||||
var WINDOW = typeof window === 'object';
|
||||
@@ -46,7 +51,8 @@
|
||||
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;
|
||||
/* istanbul ignore next */
|
||||
var NODE_JS = !root.JS_MD5_NO_NODE_JS && !WINDOW && typeof process === 'object' && process.versions && process.versions.node;
|
||||
if (NODE_JS) {
|
||||
root = global;
|
||||
} else if (WEB_WORKER) {
|
||||
@@ -54,12 +60,24 @@
|
||||
}
|
||||
var COMMON_JS = !root.JS_MD5_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';
|
||||
/* istanbul ignore next */
|
||||
var ARRAY_BUFFER = FEATURE_LEGACY ?
|
||||
!root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined' : true;
|
||||
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 OUTPUT_TYPES = ['hex', 'array', 'digest', 'arrayBuffer'];
|
||||
/* istanbul ignore else */
|
||||
if (FEATURE_BUFFER) {
|
||||
OUTPUT_TYPES.push('buffer');
|
||||
}
|
||||
/* istanbul ignore else */
|
||||
if (FEATURE_BASE64) {
|
||||
OUTPUT_TYPES.push('base64');
|
||||
}
|
||||
/* istanbul ignore next */
|
||||
var BASE64_ENCODE_CHAR = FEATURE_BASE64 ?
|
||||
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('') : null;
|
||||
|
||||
var blocks = [], buffer8;
|
||||
if (ARRAY_BUFFER) {
|
||||
@@ -69,14 +87,16 @@
|
||||
}
|
||||
|
||||
var isArray = Array.isArray;
|
||||
if (root.JS_MD5_NO_NODE_JS || !isArray) {
|
||||
/* istanbul ignore else */
|
||||
if (FEATURE_LEGACY && (root.JS_MD5_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)) {
|
||||
/* istanbul ignore else */
|
||||
if (FEATURE_LEGACY && ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !isView)) {
|
||||
isView = function (obj) {
|
||||
return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;
|
||||
};
|
||||
@@ -204,10 +224,8 @@
|
||||
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 {
|
||||
var bufferFrom = Buffer.from;
|
||||
if (FEATURE_LEGACY && (root.JS_MD5_NO_BUFFER_FROM || !bufferFrom)) {
|
||||
bufferFrom = function (message) {
|
||||
return new Buffer(message);
|
||||
};
|
||||
@@ -774,7 +792,10 @@
|
||||
* @example
|
||||
* hash.buffer();
|
||||
*/
|
||||
Md5.prototype.buffer = Md5.prototype.arrayBuffer;
|
||||
/* istanbul ignore else */
|
||||
if (FEATURE_BUFFER) {
|
||||
Md5.prototype.buffer = Md5.prototype.arrayBuffer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @method base64
|
||||
@@ -786,23 +807,26 @@
|
||||
* @example
|
||||
* hash.base64();
|
||||
*/
|
||||
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++];
|
||||
/* istanbul ignore else */
|
||||
if (FEATURE_BASE64) {
|
||||
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[(v1 << 4 | v2 >>> 4) & 63] +
|
||||
BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +
|
||||
BASE64_ENCODE_CHAR[v3 & 63];
|
||||
}
|
||||
v1 = bytes[i];
|
||||
base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
|
||||
BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +
|
||||
BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +
|
||||
BASE64_ENCODE_CHAR[v3 & 63];
|
||||
}
|
||||
v1 = bytes[i];
|
||||
base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
|
||||
BASE64_ENCODE_CHAR[(v1 << 4) & 63] +
|
||||
'==';
|
||||
return base64Str;
|
||||
};
|
||||
BASE64_ENCODE_CHAR[(v1 << 4) & 63] +
|
||||
'==';
|
||||
return base64Str;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* HmacMd5 class
|
||||
@@ -856,23 +880,29 @@
|
||||
this.inner = true;
|
||||
this.sharedMemory = sharedMemory;
|
||||
}
|
||||
HmacMd5.prototype = new Md5();
|
||||
/* istanbul ignore else */
|
||||
if (FEATURE_HMAC) {
|
||||
HmacMd5.prototype = new Md5();
|
||||
|
||||
HmacMd5.prototype.finalize = function () {
|
||||
Md5.prototype.finalize.call(this);
|
||||
if (this.inner) {
|
||||
this.inner = false;
|
||||
var innerHash = this.array();
|
||||
Md5.call(this, this.sharedMemory);
|
||||
this.update(this.oKeyPad);
|
||||
this.update(innerHash);
|
||||
HmacMd5.prototype.finalize = function () {
|
||||
Md5.prototype.finalize.call(this);
|
||||
}
|
||||
};
|
||||
if (this.inner) {
|
||||
this.inner = false;
|
||||
var innerHash = this.array();
|
||||
Md5.call(this, this.sharedMemory);
|
||||
this.update(this.oKeyPad);
|
||||
this.update(innerHash);
|
||||
Md5.prototype.finalize.call(this);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
var exports = createMethod();
|
||||
exports.md5 = exports;
|
||||
exports.md5.hmac = createHmacMethod();
|
||||
/* istanbul ignore else */
|
||||
if (FEATURE_HMAC) {
|
||||
exports.md5.hmac = createHmacMethod();
|
||||
}
|
||||
|
||||
if (COMMON_JS) {
|
||||
module.exports = exports;
|
||||
@@ -918,7 +948,7 @@
|
||||
<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 Mon Jul 20 2026 10:19:21 GMT+0800 (Taipei Standard Time)
|
||||
</footer>
|
||||
|
||||
<script> prettyPrint(); </script>
|
||||
|
||||
Reference in New Issue
Block a user