| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 | '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;
 |