code: func (priv *PrivateKey) Sign(rand io.Reader, msg []byte, opts crypto.SignerOpts) ([]byte, error) {
  	if pssOpts, ok := opts.(*PSSOptions); ok {
  		return SignPSS(rand, priv, pssOpts.Hash, msg, pssOpts)
  	}
  
  	return SignPKCS1v15(rand, priv, opts.HashFunc(), msg)
  }
docs: // Sign signs msg with priv, reading randomness from rand. If opts is a
  // *PSSOptions then the PSS algorithm will be used, otherwise PKCS#1 v1.5 will
  // be used. This method is intended to support keys where the private part is
  // kept in, for example, a hardware module. Common uses should use the Sign*
  // functions in this package.