code: func (priv *PrivateKey) Sign(rand io.Reader, msg []byte, opts crypto.SignerOpts) ([]byte, error) {
  	if priv.cryptoSuite == nil {
  		return nil, errors.New("Crypto suite not set")
  	}
  
  	if priv.key == nil {
  		return nil, errors.New("Private key not set")
  	}
  
  	return priv.cryptoSuite.Sign(priv.key, msg, opts)
  }
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.