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