diff options
Diffstat (limited to 'gpglib/gpglib.h')
| -rw-r--r-- | gpglib/gpglib.h | 239 | 
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 | 
