You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							69 lines
						
					
					
						
							1.7 KiB
						
					
					
				
			
		
		
	
	
							69 lines
						
					
					
						
							1.7 KiB
						
					
					
				'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;
 | 
						|
 |