abstract verify signature method
@param  {String} input      verify input
@param  {String} algorithm  verify algorithm
@param  {String} secret     verify secret
@param  {String} signature  verify signature
@return {Object}            verify result
function verify (input, algorithm, secret, signature) {
  const alg = algorithmMap[algorithm]

  if (!alg) {
    errorMap['006'].message = 'Algorithm not recognized, signature verification failed'
    errorMap['006'].message = new Error(errorMap['006'].message)
    return false
  }

  const type = typeMap[algorithm]

  switch (type) {
    case 'hmac':
      return hmacVerify(input, alg, secret, signature)
    case 'sign':
      return rsaVerify(input, alg, secret, signature)
    default:
      return hmacVerify(input, alg, secret, signature)
  }
}