code: func (priv *PrivateKey) Decrypt(rand io.Reader, ciphertext []byte, opts crypto.DecrypterOpts) (plaintext []byte, err error) {
  	if opts == nil {
  		return DecryptPKCS1v15(rand, priv, ciphertext)
  	}
  
  	switch opts := opts.(type) {
  	case *OAEPOptions:
  		return DecryptOAEP(opts.Hash.New(), rand, priv, ciphertext, opts.Label)
  
  	case *PKCS1v15DecryptOptions:
  		if l := opts.SessionKeyLen; l > 0 {
  			plaintext = make([]byte, l)
  			if _, err := io.ReadFull(rand, plaintext); err != nil {
  				return nil, err
  			}
  			if err := DecryptPKCS1v15SessionKey(rand, priv, ciphertext, plaintext); err != nil {
  				return nil, err
  			}
  			return plaintext, nil
  		} else {
  			return DecryptPKCS1v15(rand, priv, ciphertext)
  		}
  
  	default:
  		return nil, errors.New("crypto/rsa: invalid options for Decrypt")
  	}
  }
docs: // Decrypt decrypts ciphertext with priv. If opts is nil or of type
  // *PKCS1v15DecryptOptions then PKCS#1 v1.5 decryption is performed. Otherwise
  // opts must have type *OAEPOptions and OAEP decryption is done.