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