code: func NewHMACSigner(alg Algorithm) func(Store, crypto.Hash) (Signer, error) {
  	return func(store Store, hash crypto.Hash) (Signer, error) {
  		var ok bool
  		var keyRaw interface{}
  		var key []byte
  
  		// check private key
  		if keyRaw, ok = store.PrivateKey(); !ok {
  			return nil, ErrMissingPrivateKey
  		}
  
  		// check key type
  		if key, ok = keyRaw.([]byte); !ok {
  			return nil, ErrInvalidPrivateKey
  		}
  
  		return &HmacSigner{
  			alg:  alg,
  			hash: hash,
  			key:  key,
  		}, nil
  	}
  }
docs: // NewHMACSigner creates a HMAC Signer for the specified Algorithm.