SEXP R_gpg_delete(SEXP id, SEXP secret){ gpgme_key_t key; const char * idstr = CHAR(STRING_ELT(id, 0)); bail(gpgme_get_key(ctx, idstr, &key, 0), "find key"); gpgme_error_t err = gpgme_op_delete(ctx, key, asLogical(secret)); if(gpg_err_code (err) == GPG_ERR_CONFLICT){ Rf_warningcall(R_NilValue, "Did not delete %s. Set secret = TRUE to delete private keys", idstr); return mkString(""); } bail(err, "delete key"); return mkString(key->subkeys->keyid); }
void c_gpgme::remove_key_from_keyring ( const std::string &fingerprint ) { gpgme_key_t key; m_error_code = gpgme_get_key(m_ctx, fingerprint.c_str(), &key, 0); if (m_error_code != GPG_ERR_NO_ERROR) { throw std::runtime_error(gpgme_strsource(m_error_code)); } m_error_code = gpgme_op_delete(m_ctx, key, 0); if (m_error_code != GPG_ERR_NO_ERROR) { throw std::runtime_error(gpgme_strsource(m_error_code)); } }
static PyObject * pygpgme_context_delete(PyGpgmeContext *self, PyObject *args) { PyGpgmeKey *key; int allow_secret = 0; gpgme_error_t err; if (!PyArg_ParseTuple(args, "O!|i", &PyGpgmeKey_Type, &key, &allow_secret)) return NULL; Py_BEGIN_ALLOW_THREADS; err = gpgme_op_delete(self->ctx, key->key, allow_secret); Py_END_ALLOW_THREADS; if (pygpgme_check_error(err)) return NULL; Py_RETURN_NONE; }