summaryrefslogtreecommitdiffstats
path: root/gpglib/gpglib.h
diff options
context:
space:
mode:
Diffstat (limited to 'gpglib/gpglib.h')
-rw-r--r--gpglib/gpglib.h239
1 files changed, 239 insertions, 0 deletions
diff --git a/gpglib/gpglib.h b/gpglib/gpglib.h
new file mode 100644
index 0000000..784f9b8
--- /dev/null
+++ b/gpglib/gpglib.h
@@ -0,0 +1,239 @@
+#ifndef gpglib_h
+#define gpglib_h
+/*
+** Copyright 2001-2008 Double Precision, Inc. See COPYING for
+** distribution information.
+*/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "config.h"
+#include <sys/types.h>
+#include <stdlib.h>
+
+
+#define LIBMAIL_GPG_INDIVIDUAL 1
+#define LIBMAIL_GPG_ENCAPSULATE 2
+
+#define LIBMAIL_GPG_CHECKSIGN 1
+#define LIBMAIL_GPG_UNENCRYPT 2
+
+struct libmail_gpg_info {
+
+ const char *gnupghome; /* May be NULL, sets GNUPGHOME */
+
+ const char *passphrase_fd; /* NULL, or string giving */
+
+ /*
+ ** input_func gets called repeatedly to obtain the message to
+ ** encrypt/sign/decrypt/check. input_func() receives the same
+ ** arguments as fgets(), with its third argument being input_func_arg.
+ ** input_func should read up to cnt-1 bytes, or a newline, whichever
+ ** comes first, and save read data in buf, appending a single null
+ ** byte. input_func should return 0, or -1 on EOF condition.
+ */
+ int (*input_func)(char *buf, size_t cnt, void *vp);
+ void *input_func_arg;
+
+ /*
+ ** Output_func gets repeatedly invoked with the contents of the
+ ** encrypted/signed/decrypted/verified message.
+ */
+
+ void (*output_func)(const char *output, size_t nbytes,
+ void *output_arg);
+ void *output_func_arg; /* Passthru arg to output_func */
+
+ /*
+ ** In the event of an error, the error handler will be invoked with
+ ** the error message text. The error handler will be invoked
+ ** just before libmail_gpg_*() exits. Note that the memory used
+ ** by the error message text will be destroyed by the time
+ ** libmail_gpg_*() exits, so the application needs to make a copy of
+ ** it, if it intends to use it later.
+ */
+
+ void (*errhandler_func)(const char *errmsg, void *errmsg_arg);
+ void *errhandler_arg; /* Passthru arg to errhandler_func */
+
+ /* Additional, arbitrary, arguments to GnuPG */
+
+ int argc;
+ char **argv;
+
+ /* On exit, the following bits may be set: */
+
+ int errstatus;
+
+#define LIBMAIL_ERR_VERIFYSIG 1
+#define LIBMAIL_ERR_DECRYPT 2
+
+};
+
+int libmail_gpg_signencode(int dosign,
+ int doencode,
+ /*
+ ** One of LIBMAIL_GPG_INDIVIDUAL or
+ ** LIBMAIL_GPG_ENCAPSULATE
+ */
+ struct libmail_gpg_info *options);
+
+int libmail_gpg_decode(int mode,
+ /*
+ ** LIBMAIL_GPG_UNENCRYPT OR LIBMAIL_GPG_CHECKSIGN
+ */
+ struct libmail_gpg_info *options);
+
+
+ /* A convenient input_func, where vp is FILE * */
+
+int libmail_gpg_inputfunc_readfp(char *buf, size_t cnt, void *vp);
+
+ /* Other functions: */
+
+int libmail_gpg_cleanup();
+int libmail_gpg_has_gpg(const char *gpgdir);
+
+int libmail_gpg_genkey(const char *gpgdir,
+ const char *charset,
+ const char *name,
+ const char *addr,
+ const char *comment,
+ int skeylen,
+ int ekeylen,
+ unsigned expire,
+ char expire_unit,
+ const char *passphrase,
+
+ int (*dump_func)(const char *, size_t, void *),
+ int (*timeout_func)(void *),
+ void *voidarg);
+
+struct gpg_list_info {
+ const char *charset;
+ const char *disabled_msg;
+ const char *revoked_msg;
+ const char *expired_msg;
+ const char *group_msg;
+ void *voidarg;
+} ;
+
+int libmail_gpg_listkeys(const char *gpgdir,
+ int secret,
+ int (*callback_func)(const char *, const char *,
+ const char *, int,
+ struct gpg_list_info *),
+ int (*err_func)(const char *, size_t, void *),
+ struct gpg_list_info *);
+
+int libmail_gpg_listgroups(const char *gpgdir,
+ int (*callback_func)(const char *, const char *,
+ const char *,
+ int,
+ struct gpg_list_info *),
+ struct gpg_list_info *voidarg);
+
+int libmail_gpg_exportkey(const char *gpgdir,
+ int secret,
+ const char *fingerprint,
+ int (*out_func)(const char *, size_t, void *),
+ int (*err_func)(const char *, size_t, void *),
+ void *voidarg);
+
+int libmail_gpg_deletekey(const char *gpgdir, int secret, const char *fingerprint,
+ int (*dump_func)(const char *, size_t, void *),
+ void *voidarg);
+
+int libmail_gpg_signkey(const char *gpgdir, const char *signthis, const char *signwith,
+ int passphrase_fd,
+ int (*dump_func)(const char *, size_t, void *),
+ int trustlevel,
+ void *voidarg);
+
+int libmail_gpg_checksign(const char *gpgdir,
+ const char *content, /* Filename, for now */
+ const char *signature, /* Filename, for now */
+ int (*dump_func)(const char *, size_t, void *),
+ void *voidarg);
+
+ /* IMPORT A KEY */
+
+int libmail_gpg_import_start(const char *gpgdir, int issecret);
+
+int libmail_gpg_import_do(const char *p, size_t n, /* Part of the key */
+ int (*dump_func)(const char *, size_t, void *),
+ /* gpg output callback */
+
+ void *voidarg);
+
+int libmail_gpg_import_finish(int (*dump_func)(const char *, size_t, void *),
+ void *voidarg);
+
+
+
+ /* INTERNAL: */
+
+pid_t libmail_gpg_fork(int *, int *, int *, const char *, char **);
+
+#define GPGARGV_PASSPHRASE_FD(argv,i,fd,buf) \
+ ((argv)[(i)++]="--passphrase-fd", \
+ (argv)[(i)++]=libmail_str_size_t((fd),(buf)))
+
+int libmail_gpg_write(const char *, size_t,
+ int (*)(const char *, size_t, void *),
+ int (*)(const char *, size_t, void *),
+ int (*)(void *),
+ unsigned,
+ void *);
+
+int libmail_gpg_read(int (*)(const char *, size_t, void *),
+ int (*)(const char *, size_t, void *),
+ int (*)(void *),
+ unsigned,
+ void *);
+
+char *libmail_gpg_options(const char *gpgdir);
+ /* Filename of the options file. If gpgdir is NULL try
+ ** the environment variables. */
+
+
+struct rfc2045 *libmail_gpgmime_is_multipart_signed(const struct rfc2045 *);
+ /*
+ ** Return ptr to signed content if ptr is a multipart/signed.
+ */
+
+struct rfc2045 *libmail_gpgmime_is_multipart_encrypted(const struct rfc2045 *);
+ /*
+ ** Return ptr to encrypted content if ptr is a multipart/encrypted.
+ */
+
+int libmail_gpgmime_has_mimegpg(const struct rfc2045 *);
+ /*
+ ** Return non-zero if MIME content has any signed or encrypted
+ ** content.
+ */
+
+int libmail_gpgmime_is_decoded(const struct rfc2045 *, int *);
+ /*
+ ** Return non-zero if this is a multipart/mixed section generated
+ ** by mimegpg, and return the GnuPG return code.
+ */
+
+struct rfc2045 *libmail_gpgmime_decoded_content(const struct rfc2045 *);
+ /*
+ ** If is_decoded, then return the ptr to the decoded content.
+ ** (note - if decryption failed, NULL is returned).
+ */
+
+struct rfc2045 *libmail_gpgmime_signed_content(const struct rfc2045 *);
+ /*
+ ** If is_multipart_signed, return ptr to the signed content.
+ */
+
+#ifdef __cplusplus
+}
+#endif
+#endif