summaryrefslogtreecommitdiffstats
path: root/node_modules/loader-utils/lib/getHashDigest.js
diff options
context:
space:
mode:
authorGravatar Piotr Russ <mail@pruss.it> 2020-11-16 00:10:28 +0100
committerGravatar Piotr Russ <mail@pruss.it> 2020-11-16 00:10:28 +0100
commite06ec920f7a5d784e674c4c4b4e6d1da3dc7391d (patch)
tree55713f725f77b44ebfec86e4eec3ce33e71458ca /node_modules/loader-utils/lib/getHashDigest.js
downloadwebsite_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.gz
website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.bz2
website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.zip
api, login, auth
Diffstat (limited to 'node_modules/loader-utils/lib/getHashDigest.js')
-rw-r--r--node_modules/loader-utils/lib/getHashDigest.js69
1 files changed, 69 insertions, 0 deletions
diff --git a/node_modules/loader-utils/lib/getHashDigest.js b/node_modules/loader-utils/lib/getHashDigest.js
new file mode 100644
index 0000000..bbc4e03
--- /dev/null
+++ b/node_modules/loader-utils/lib/getHashDigest.js
@@ -0,0 +1,69 @@
+'use strict';
+
+const baseEncodeTables = {
+ 26: 'abcdefghijklmnopqrstuvwxyz',
+ 32: '123456789abcdefghjkmnpqrstuvwxyz', // no 0lio
+ 36: '0123456789abcdefghijklmnopqrstuvwxyz',
+ 49: 'abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ', // no lIO
+ 52: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
+ 58: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ', // no 0lIO
+ 62: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
+ 64: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_',
+};
+
+function encodeBufferToBase(buffer, base) {
+ const encodeTable = baseEncodeTables[base];
+ if (!encodeTable) {
+ throw new Error('Unknown encoding base' + base);
+ }
+
+ const readLength = buffer.length;
+ const Big = require('big.js');
+
+ Big.RM = Big.DP = 0;
+ let b = new Big(0);
+
+ for (let i = readLength - 1; i >= 0; i--) {
+ b = b.times(256).plus(buffer[i]);
+ }
+
+ let output = '';
+ while (b.gt(0)) {
+ output = encodeTable[b.mod(base)] + output;
+ b = b.div(base);
+ }
+
+ Big.DP = 20;
+ Big.RM = 1;
+
+ return output;
+}
+
+function getHashDigest(buffer, hashType, digestType, maxLength) {
+ hashType = hashType || 'md5';
+ maxLength = maxLength || 9999;
+
+ const hash = require('crypto').createHash(hashType);
+
+ hash.update(buffer);
+
+ if (
+ digestType === 'base26' ||
+ digestType === 'base32' ||
+ digestType === 'base36' ||
+ digestType === 'base49' ||
+ digestType === 'base52' ||
+ digestType === 'base58' ||
+ digestType === 'base62' ||
+ digestType === 'base64'
+ ) {
+ return encodeBufferToBase(hash.digest(), digestType.substr(4)).substr(
+ 0,
+ maxLength
+ );
+ } else {
+ return hash.digest(digestType || 'hex').substr(0, maxLength);
+ }
+}
+
+module.exports = getHashDigest;