aboutsummaryrefslogtreecommitdiffstats
path: root/lang/python/gpgme.i
diff options
context:
space:
mode:
Diffstat (limited to 'lang/python/gpgme.i')
-rw-r--r--lang/python/gpgme.i709
1 files changed, 0 insertions, 709 deletions
diff --git a/lang/python/gpgme.i b/lang/python/gpgme.i
deleted file mode 100644
index 2484d34d..00000000
--- a/lang/python/gpgme.i
+++ /dev/null
@@ -1,709 +0,0 @@
-/*
-# Copyright (C) 2016 g10 Code GmbH
-# Copyright (C) 2004,2008 Igor Belyi <[email protected]>
-# Copyright (C) 2002 John Goerzen <[email protected]>
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-%module gpgme
-%include "cpointer.i"
-%include "cstring.i"
-
-/* no need to record whether GPGME's c++ bindings were built
- concurrently with the python bindings */
-%ignore HAVE_CXX11;
-
-%{
-/* We use public symbols (e.g. "_obsolete_class") which are marked as
- * deprecated but we need to keep them. Silence the warning. */
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-%}
-
-/* Generate doc strings for all methods.
-
- This will generate docstrings of the form
-
- gpgme_op_encrypt(ctx, recp, flags, plain, cipher) -> gpgme_error_t
-
- which we transform into
-
- ctx.op_encrypt(recp, flags, plain, cipher) -> gpgme_error_t
-
- for automagically wrapped functions. */
-%feature("autodoc", "0");
-
-
-/* Allow use of Unicode objects, bytes, and None for strings. */
-%typemap(in) const char *(PyObject *encodedInput = NULL) {
- if ($input == Py_None)
- $1 = NULL;
- else if (PyUnicode_Check($input))
- {
- encodedInput = PyUnicode_AsUTF8String($input);
- if (encodedInput == NULL)
- return NULL;
- $1 = PyBytes_AsString(encodedInput);
- }
- else if (PyBytes_Check($input))
- $1 = PyBytes_AsString($input);
- else {
- PyErr_Format(PyExc_TypeError,
- "arg %d: expected str, bytes, or None, got %s",
- $argnum, $input->ob_type->tp_name);
- return NULL;
- }
-}
-%typemap(freearg) const char * {
- Py_XDECREF(encodedInput$argnum);
-}
-
-/* Likewise for a list of strings. */
-%typemap(in) const char *[] (void *vector = NULL,
- size_t size,
- PyObject **pyVector = NULL) {
- /* Check if is a list */
- if (PyList_Check($input)) {
- size_t i, j;
- size = PyList_Size($input);
- $1 = (char **) (vector = malloc((size+1) * sizeof(char *)));
- pyVector = calloc(sizeof *pyVector, size);
-
- for (i = 0; i < size; i++) {
- PyObject *o = PyList_GetItem($input,i);
- if (PyUnicode_Check(o))
- {
- pyVector[i] = PyUnicode_AsUTF8String(o);
- if (pyVector[i] == NULL)
- {
- free(vector);
- for (j = 0; j < i; j++)
- Py_XDECREF(pyVector[j]);
- return NULL;
- }
- $1[i] = PyBytes_AsString(pyVector[i]);
- }
- else if (PyString_Check(o))
- $1[i] = PyString_AsString(o);
- else {
- PyErr_Format(PyExc_TypeError,
- "arg %d: list must contain only str or bytes, got %s "
- "at position %d",
- $argnum, o->ob_type->tp_name, i);
- free($1);
- return NULL;
- }
- }
- $1[i] = NULL;
- } else {
- PyErr_Format(PyExc_TypeError,
- "arg %d: expected a list of str or bytes, got %s",
- $argnum, $input->ob_type->tp_name);
- return NULL;
- }
-}
-%typemap(freearg) const char *[] {
- size_t i;
- free(vector$argnum);
- for (i = 0; i < size$argnum; i++)
- Py_XDECREF(pyVector$argnum[i]);
-}
-
-/* Release returned buffers as necessary. */
-%typemap(newfree) char * "gpgme_free($1);";
-%newobject gpgme_data_release_and_get_mem;
-%newobject gpgme_pubkey_algo_string;
-%newobject gpgme_addrspec_from_uid;
-
-%typemap(arginit) gpgme_key_t [] {
- $1 = NULL;
-}
-
-%typemap(in) gpgme_key_t [] {
- int i, numb = 0;
- if (!PySequence_Check($input)) {
- PyErr_Format(PyExc_ValueError, "arg %d: Expected a list of gpgme_key_t",
- $argnum);
- return NULL;
- }
- if((numb = PySequence_Length($input)) != 0) {
- $1 = (gpgme_key_t*)malloc((numb+1)*sizeof(gpgme_key_t));
- for(i=0; i<numb; i++) {
- PyObject *pypointer = PySequence_GetItem($input, i);
-
- /* input = $input, 1 = $1, 1_descriptor = $1_descriptor */
- /* &1_descriptor = $&1_descriptor *1_descriptor = $*1_descriptor */
-
- /* Following code is from swig's python.swg. */
- if ((SWIG_ConvertPtr(pypointer,(void **) &$1[i], $*1_descriptor,SWIG_POINTER_EXCEPTION | $disown )) == -1) {
- Py_DECREF(pypointer);
- PyErr_Format(PyExc_TypeError,
- "arg %d: list must contain only gpgme_key_ts, got %s "
- "at position %d",
- $argnum, pypointer->ob_type->tp_name, i);
- free($1);
- return NULL;
- }
- Py_DECREF(pypointer);
- }
- $1[numb] = NULL;
- }
-}
-%typemap(freearg) gpgme_key_t [] {
- if ($1) free($1);
-}
-
-/* Special handling for references to our objects. */
-%typemap(in) gpgme_data_t DATAIN (gpgme_data_t wrapper = NULL,
- PyObject *bytesio = NULL,
- Py_buffer view, int have_view = 0) {
- /* If we create a temporary wrapper object, we will store it in
- wrapperN, where N is $argnum. Here in this fragment, SWIG will
- automatically append $argnum. */
- memset(&view, 0, sizeof view);
- if ($input == Py_None)
- $1 = NULL;
- else {
- PyObject *pypointer;
- pypointer = _gpg_obj2gpgme_data_t($input, $argnum, &wrapper,
- &bytesio, &view);
- if (pypointer == NULL)
- return NULL;
- have_view = !! view.obj;
-
- /* input = $input, 1 = $1, 1_descriptor = $1_descriptor */
-
- /* Following code is from swig's python.swg. */
-
- if ((SWIG_ConvertPtr(pypointer,(void **) &$1, $1_descriptor,
- SWIG_POINTER_EXCEPTION | $disown )) == -1) {
- Py_DECREF(pypointer);
- return NULL;
- }
- Py_DECREF(pypointer);
- }
-}
-
-#if HAVE_DATA_H
-/* If we are doing an in-tree build, we can use the internal
- representation of struct gpgme_data for an very efficient check if
- the buffer has been modified. */
-%{
-#include "data.h" /* For struct gpgme_data. */
-%}
-#endif
-
-%typemap(freearg) gpgme_data_t DATAIN {
- /* See whether we need to update the Python buffer. */
- if (resultobj && wrapper$argnum && view$argnum.buf)
- {
- int dirty;
- char *new_data = NULL;
- size_t new_size;
-
-#if HAVE_DATA_H
- new_data = wrapper$argnum->data.mem.buffer;
- new_size = wrapper$argnum->data.mem.length;
- dirty = new_data != NULL;
-#else
- new_data = gpgme_data_release_and_get_mem (wrapper$argnum, &new_size);
- wrapper$argnum = NULL;
- dirty = new_size != view$argnum.len
- || memcmp (new_data, view$argnum.buf, view$argnum.len);
-#endif
-
- if (dirty)
- {
- /* The buffer is dirty. */
- if (view$argnum.readonly)
- {
- Py_XDECREF(resultobj);
- resultobj = NULL;
- PyErr_SetString(PyExc_ValueError,
- "cannot update read-only buffer");
- }
-
- /* See if we need to truncate the buffer. */
- if (resultobj && view$argnum.len != new_size)
- {
- if (bytesio$argnum == NULL)
- {
- Py_XDECREF(resultobj);
- resultobj = NULL;
- PyErr_SetString(PyExc_ValueError, "cannot resize buffer");
- }
- else
- {
- PyObject *retval;
- PyBuffer_Release(&view$argnum);
- assert(view$argnum.obj == NULL);
- retval = PyObject_CallMethod(bytesio$argnum, "truncate",
- "l", (long) new_size);
- if (retval == NULL)
- {
- Py_XDECREF(resultobj);
- resultobj = NULL;
- }
- else
- {
- Py_DECREF(retval);
-
- retval = PyObject_CallMethod(bytesio$argnum,
- "getbuffer", NULL);
- if (retval == NULL
- || PyObject_GetBuffer(retval, &view$argnum,
- PyBUF_SIMPLE|PyBUF_WRITABLE) < 0)
- {
- Py_XDECREF(resultobj);
- resultobj = NULL;
- }
-
- Py_XDECREF(retval);
-
- if (resultobj && view$argnum.len
- != new_size)
- {
- Py_XDECREF(resultobj);
- resultobj = NULL;
- PyErr_Format(PyExc_ValueError,
- "Expected buffer of length %zu, got %zi",
- new_size,
- view$argnum.len);
- }
- }
- }
- }
- if (resultobj)
- memcpy(view$argnum.buf, new_data, new_size);
- }
-#if ! HAVE_DATA_H
- free (new_data);
-#endif
- }
-
- /* Free the temporary wrapper, if any. */
- if (wrapper$argnum)
- gpgme_data_release(wrapper$argnum);
- Py_XDECREF (bytesio$argnum);
- if (have_view$argnum && view$argnum.buf)
- PyBuffer_Release(&view$argnum);
-}
-
-%apply gpgme_data_t DATAIN {gpgme_data_t plain, gpgme_data_t cipher,
- gpgme_data_t sig, gpgme_data_t signed_text,
- gpgme_data_t plaintext, gpgme_data_t keydata,
- gpgme_data_t pubkey, gpgme_data_t seckey,
- gpgme_data_t out, gpgme_data_t data};
-
-/* SWIG has problems interpreting ssize_t, off_t or gpgme_error_t in
- gpgme.h. */
-%typemap(out) ssize_t, gpgme_error_t, gpgme_err_code_t, gpgme_err_source_t, gpg_error_t {
- $result = PyLong_FromLong($1);
-}
-
-%typemap(in) ssize_t, gpgme_error_t, gpgme_err_code_t, gpgme_err_source_t, gpg_error_t {
- if (PyLong_Check($input))
- $1 = PyLong_AsLong($input);
-#if PY_MAJOR_VERSION < 3
- else if (PyInt_Check($input))
- $1 = PyInt_AsLong($input);
-#endif
- else
- PyErr_SetString(PyExc_TypeError, "Numeric argument expected");
-}
-
-%typemap(out) off_t {
-#if _FILE_OFFSET_BITS == 64
- $result = PyLong_FromLongLong($1);
-#else
- $result = PyLong_FromLong($1);
-#endif
-}
-
-%typemap(in) off_t {
- if (PyLong_Check($input))
-#if _FILE_OFFSET_BITS == 64
- $1 = PyLong_AsLongLong($input);
-#else
- $1 = PyLong_AsLong($input);
-#endif
-#if PY_MAJOR_VERSION < 3
- else if (PyInt_Check($input))
- $1 = PyInt_AsLong($input);
-#endif
- else
- PyErr_SetString(PyExc_TypeError, "Numeric argument expected");
-}
-
-/* Those are for gpgme_data_read() and gpgme_strerror_r(). */
-%typemap(in) (void *buffer, size_t size), (char *buf, size_t buflen) {
- {
- long tmp$argnum;
- if (PyLong_Check($input))
- tmp$argnum = PyLong_AsLong($input);
-#if PY_MAJOR_VERSION < 3
- else if (PyInt_Check($input))
- tmp$argnum = PyInt_AsLong($input);
-#endif
- else
- {
- PyErr_SetString(PyExc_TypeError, "Numeric argument expected");
- return NULL;
- }
-
- if (tmp$argnum < 0) {
- PyErr_SetString(PyExc_ValueError, "Positive integer expected");
- return NULL;
- }
- $2 = (size_t) tmp$argnum;
- $1 = ($1_ltype) malloc($2+1);
- }
-}
-%typemap(argout) (void *buffer, size_t size), (char *buf, size_t buflen) {
- Py_XDECREF($result); /* Blow away any previous result */
- if (result < 0) { /* Check for I/O error */
- free($1);
- return PyErr_SetFromErrno(PyExc_RuntimeError);
- }
- $result = PyBytes_FromStringAndSize($1,result);
- free($1);
-}
-
-/* For gpgme_data_write, but should be universal. */
-%typemap(in) (const void *buffer, size_t size)(PyObject *encodedInput = NULL) {
- Py_ssize_t ssize;
-
- if ($input == Py_None)
- $1 = NULL, $2 = 0;
- else if (PyUnicode_Check($input))
- {
- encodedInput = PyUnicode_AsUTF8String($input);
- if (encodedInput == NULL)
- return NULL;
- if (PyBytes_AsStringAndSize(encodedInput, (char **) &$1, &ssize) == -1)
- {
- Py_DECREF(encodedInput);
- return NULL;
- }
- }
- else if (PyBytes_Check($input))
- PyBytes_AsStringAndSize($input, (char **) &$1, &ssize);
- else {
- PyErr_Format(PyExc_TypeError,
- "arg %d: expected str, bytes, or None, got %s",
- $argnum, $input->ob_type->tp_name);
- return NULL;
- }
-
- if (! $1)
- $2 = 0;
- else
- {
- assert (ssize >= 0);
- $2 = (size_t) ssize;
- }
-}
-%typemap(freearg) (const void *buffer, size_t size) {
- Py_XDECREF(encodedInput$argnum);
-}
-
-/* Make types containing 'next' field to be lists. */
-%ignore next;
-%typemap(out) gpgme_sig_notation_t, gpgme_subkey_t,
- gpgme_key_sig_t, gpgme_user_id_t, gpgme_invalid_key_t,
- gpgme_recipient_t, gpgme_new_signature_t, gpgme_signature_t,
- gpgme_import_status_t, gpgme_conf_arg_t, gpgme_conf_opt_t,
- gpgme_conf_comp_t, gpgme_tofu_info_t {
- int i;
- int size = 0;
- $1_ltype curr;
- for (curr = $1; curr != NULL; curr = curr->next) {
- size++;
- }
- $result = PyList_New(size);
- for (i=0,curr=$1; i<size; i++,curr=curr->next) {
- PyObject *o = SWIG_NewPointerObj(SWIG_as_voidptr(curr), $1_descriptor, %newpointer_flags);
- PyList_SetItem($result, i, o);
- }
-}
-
-
-
-/* Wrap the fragile result objects into robust Python ones. */
-%define wrapresult(cls, name)
-%typemap(out) cls {
- PyObject *fragile;
- fragile = SWIG_NewPointerObj(SWIG_as_voidptr($1), $1_descriptor,
- %newpointer_flags);
- $result = _gpg_wrap_result(fragile, name);
- Py_DECREF(fragile);
-}
-%enddef
-
-wrapresult(gpgme_encrypt_result_t, "EncryptResult")
-wrapresult(gpgme_decrypt_result_t, "DecryptResult")
-wrapresult(gpgme_sign_result_t, "SignResult")
-wrapresult(gpgme_verify_result_t, "VerifyResult")
-wrapresult(gpgme_import_result_t, "ImportResult")
-wrapresult(gpgme_genkey_result_t, "GenkeyResult")
-wrapresult(gpgme_keylist_result_t, "KeylistResult")
-wrapresult(gpgme_vfs_mount_result_t, "VFSMountResult")
-
-%typemap(out) gpgme_engine_info_t {
- int i;
- int size = 0;
- $1_ltype curr;
- for (curr = $1; curr != NULL; curr = curr->next) {
- size++;
- }
- $result = PyList_New(size);
- if ($result == NULL)
- return NULL; /* raise */
- for (i=0,curr=$1; i<size; i++,curr=curr->next) {
- PyObject *fragile, *o;
- fragile = SWIG_NewPointerObj(SWIG_as_voidptr(curr), $1_descriptor,
- %newpointer_flags);
- if (fragile == NULL)
- {
- Py_DECREF($result);
- return NULL; /* raise */
- }
- o = _gpg_wrap_result(fragile, "EngineInfo");
- Py_DECREF(fragile);
- if (o == NULL)
- {
- Py_DECREF($result);
- return NULL; /* raise */
- }
- PyList_SetItem($result, i, o);
- }
-}
-
-
-
-/* Include mapper for interact callbacks. */
-%typemap(in) (gpgme_interact_cb_t fnc, void *fnc_value) {
- if (! PyTuple_Check($input))
- return PyErr_Format(PyExc_TypeError, "interact callback must be a tuple");
- if (PyTuple_Size($input) != 2 && PyTuple_Size($input) != 3)
- return PyErr_Format(PyExc_TypeError,
- "interact callback must be a tuple of size 2 or 3");
-
- $1 = (gpgme_interact_cb_t) _gpg_interact_cb;
- $2 = $input;
-}
-
-
-
-/* The assuan protocol callbacks. */
-%typemap(in) (gpgme_assuan_data_cb_t data_cb, void *data_cb_value) {
- if ($input == Py_None)
- $1 = $2 = NULL;
- else
- {
- if (! PyTuple_Check($input))
- return PyErr_Format(PyExc_TypeError, "callback must be a tuple");
- if (PyTuple_Size($input) != 2)
- return PyErr_Format(PyExc_TypeError,
- "callback must be a tuple of size 2");
- if (! PyCallable_Check(PyTuple_GetItem($input, 1)))
- return PyErr_Format(PyExc_TypeError, "second item must be callable");
- $1 = _gpg_assuan_data_cb;
- $2 = $input;
- }
-}
-
-%typemap(in) (gpgme_assuan_inquire_cb_t inq_cb, void *inq_cb_value) {
- if ($input == Py_None)
- $1 = $2 = NULL;
- else
- {
- if (! PyTuple_Check($input))
- return PyErr_Format(PyExc_TypeError, "callback must be a tuple");
- if (PyTuple_Size($input) != 2)
- return PyErr_Format(PyExc_TypeError,
- "callback must be a tuple of size 2");
- if (! PyCallable_Check(PyTuple_GetItem($input, 1)))
- return PyErr_Format(PyExc_TypeError, "second item must be callable");
- $1 = _gpg_assuan_inquire_cb;
- $2 = $input;
- }
-}
-
-%typemap(in) (gpgme_assuan_status_cb_t stat_cb, void *stat_cb_value) {
- if ($input == Py_None)
- $1 = $2 = NULL;
- else
- {
- if (! PyTuple_Check($input))
- return PyErr_Format(PyExc_TypeError, "callback must be a tuple");
- if (PyTuple_Size($input) != 2)
- return PyErr_Format(PyExc_TypeError,
- "callback must be a tuple of size 2");
- if (! PyCallable_Check(PyTuple_GetItem($input, 1)))
- return PyErr_Format(PyExc_TypeError, "second item must be callable");
- $1 = _gpg_assuan_status_cb;
- $2 = $input;
- }
-}
-
-
-/* With SWIG, you can define default arguments for parameters.
- * While it's legal in C++ it is not in C, so we cannot change the
- * already existing gpgme.h. We need, however, to declare the function
- * *before* SWIG loads it from gpgme.h. Hence, we define it here. */
-gpgme_error_t gpgme_op_keylist_start (gpgme_ctx_t ctx,
- const char *pattern="",
- int secret_only=0);
-
-/* The whence argument is surprising in Python-land,
- because BytesIO or StringIO objects do not require it.
- It defaults to SEEK_SET. Let's do that for Data objects, too */
-off_t gpgme_data_seek (gpgme_data_t dh, off_t offset, int whence=SEEK_SET);
-
-/* Include the unmodified <gpgme.h> for cc, and the cleaned-up local
- version for SWIG. We do, however, want to hide certain fields on
- some structs, which we provide prior to including the version for
- SWIG. */
-%{
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gpgme.h>
-%}
-
-/* This is for notations, where we want to hide the length fields, and
- * the unused bit field block. We silence the warning. */
-%warnfilter(302) _gpgme_sig_notation;
-struct _gpgme_sig_notation
-{
- struct _gpgme_sig_notation *next;
-
- /* If NAME is a null pointer, then VALUE contains a policy URL
- rather than a notation. */
- char *name;
-
- /* The value of the notation data. */
- char *value;
-
- /* The accumulated flags. */
- gpgme_sig_notation_flags_t flags;
-
- /* Notation data is human-readable. */
- unsigned int human_readable : 1;
-
- /* Notation data is critical. */
- unsigned int critical : 1;
-};
-
-/* Now include our local modified version. Any structs defined above
- are ignored. */
-#ifdef HAVE_CONFIG_H
-%include "config.h"
-#endif
-
-%include "gpgme.h"
-
-%include "errors.i"
-
-/* Generating and handling pointers-to-pointers. */
-
-%pointer_functions(gpgme_ctx_t, gpgme_ctx_t_p);
-%pointer_functions(gpgme_data_t, gpgme_data_t_p);
-%pointer_functions(gpgme_key_t, gpgme_key_t_p);
-%pointer_functions(gpgme_error_t, gpgme_error_t_p);
-%pointer_functions(gpgme_trust_item_t, gpgme_trust_item_t_p);
-%pointer_functions(gpgme_engine_info_t, gpgme_engine_info_t_p);
-
-/* Helper functions. */
-
-%{
-#include <stdio.h>
-%}
-FILE *fdopen(int fildes, const char *mode);
-
-/* We include both headers in the generated c code... */
-%{
-#include "helpers.h"
-#include "private.h"
-
-/* SWIG runtime support for helpers.c */
-PyObject *
-_gpg_wrap_gpgme_data_t(gpgme_data_t data)
-{
- /*
- * If SWIG is invoked without -builtin, the macro SWIG_NewPointerObj
- * expects a variable named "self".
- *
- * XXX: It is not quite clear why passing NULL as self is okay, but
- * it works with -builtin, and it seems to work just fine without
- * it too.
- */
- PyObject* self = NULL;
- (void) self;
- return SWIG_NewPointerObj(data, SWIGTYPE_p_gpgme_data, 0);
-}
-
-gpgme_ctx_t
-_gpg_unwrap_gpgme_ctx_t(PyObject *wrapped)
-{
- gpgme_ctx_t result;
- if (SWIG_ConvertPtr(wrapped,
- (void **) &result,
- SWIGTYPE_p_gpgme_context,
- SWIG_POINTER_EXCEPTION) == -1)
- return NULL;
- return result;
-}
-%}
-
-/* ... but only the public definitions here. They will be exposed to
- the Python world, so let's be careful. */
-%include "helpers.h"
-
-
-%define genericrepr(cls)
-%pythoncode %{
- def __repr__(self):
- names = [name for name in dir(self)
- if not name.startswith("_") and name != "this"]
- props = ", ".join(("{}={!r}".format(name, getattr(self, name))
- for name in names)
- )
- return "cls({})".format(props)
-%}
-
-%enddef
-
-%extend _gpgme_key {
- genericrepr(Key)
-};
-
-
-%extend _gpgme_subkey {
- genericrepr(SubKey)
-};
-
-%extend _gpgme_key_sig {
- genericrepr(KeySig)
-};
-
-%extend _gpgme_user_id {
- genericrepr(UID)
-};
-
-%extend _gpgme_tofu_info {
- genericrepr(TofuInfo)
-};