From 9c45d9ad13fdf439d44d7443ae75da15ea0223ed Mon Sep 17 00:00:00 2001 From: Sam Varshavchik Date: Mon, 19 Aug 2013 16:39:41 -0400 Subject: Initial checkin Imported from subversion report, converted to git. Updated all paths in scripts and makefiles, reflecting the new directory hierarchy. --- gpglib/gpglib.h | 239 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 239 insertions(+) create mode 100644 gpglib/gpglib.h (limited to 'gpglib/gpglib.h') 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 +#include + + +#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 -- cgit v1.2.3