code: func (m *SigningMethodHMAC) Verify(signingString, signature string, key interface{}) error {
  	// Verify the key is the right type
  	keyBytes, ok := key.([]byte)
  	if !ok {
  		return ErrInvalidKeyType
  	}
  
  	// Decode signature, for comparison
  	sig, err := DecodeSegment(signature)
  	if err != nil {
  		return err
  	}
  
  	// Can we use the specified hashing method?
  	if !m.Hash.Available() {
  		return ErrHashUnavailable
  	}
  
  	// This signing method is symmetric, so we validate the signature
  	// by reproducing the signature from the signing string and key, then
  	// comparing that against the provided signature.
  	hasher := hmac.New(m.Hash.New, keyBytes)
  	hasher.Write([]byte(signingString))
  	if !hmac.Equal(sig, hasher.Sum(nil)) {
  		return ErrSignatureInvalid
  	}
  
  	// No validation errors.  Signature is good.
  	return nil
  }
docs: // Verify the signature of HSXXX tokens.  Returns nil if the signature is valid.