Crypt-GpgME

 view release on metacpan or  search on metacpan

xs/GpgME.xs  view on Meta::CPAN

		perl_gpgme_callback_retval_type_t retval_types[1];
		gpgme_ctx_t c_ctx;
		gpgme_passphrase_cb_t pass_cb;
	INIT:
		param_types[0] = PERL_GPGME_CALLBACK_PARAM_TYPE_STR; /* uid_hint */
		param_types[1] = PERL_GPGME_CALLBACK_PARAM_TYPE_STR; /* passphrase_info */
		param_types[2] = PERL_GPGME_CALLBACK_PARAM_TYPE_INT; /* prev_was_bad */
		retval_types[0] = PERL_GPGME_CALLBACK_RETVAL_TYPE_STR; /* password */
	CODE:
		c_ctx = (gpgme_ctx_t)perl_gpgme_get_ptr_from_sv (ctx, "Crypt::GpgME");

		gpgme_get_passphrase_cb (c_ctx, &pass_cb, (void **)&cb);

		if (cb) {
			perl_gpgme_callback_destroy (cb);
		}

		cb = perl_gpgme_callback_new (func, user_data, ctx, 3, param_types, 1, retval_types);

		gpgme_set_passphrase_cb (c_ctx, perl_gpgme_passphrase_cb, cb);

void
gpgme_set_progress_cb (ctx, func, user_data=NULL)
		SV *ctx
		SV *func
		SV *user_data
	PREINIT:
		perl_gpgme_callback_t *cb = NULL;
		perl_gpgme_callback_param_type_t param_types[4];
		gpgme_ctx_t c_ctx;
		gpgme_progress_cb_t prog_cb;
	INIT:
		param_types[0] = PERL_GPGME_CALLBACK_PARAM_TYPE_STR;  /* what */
		param_types[1] = PERL_GPGME_CALLBACK_PARAM_TYPE_CHAR; /* type */
		param_types[2] = PERL_GPGME_CALLBACK_PARAM_TYPE_INT;  /* current */
		param_types[3] = PERL_GPGME_CALLBACK_PARAM_TYPE_INT;  /* total */
	CODE:
		c_ctx = (gpgme_ctx_t)perl_gpgme_get_ptr_from_sv (ctx, "Crypt::GpgME");

		gpgme_get_progress_cb (c_ctx, &prog_cb, (void **)&cb);

		if (cb) {
			perl_gpgme_callback_destroy (cb);
		}

		cb = perl_gpgme_callback_new (func, user_data, ctx, 4, param_types, 0, NULL);

		gpgme_set_progress_cb (c_ctx, perl_gpgme_progress_cb, cb);

NO_OUTPUT gpgme_error_t
gpgme_set_locale (ctx, category, value)
		perl_gpgme_ctx_or_null_t ctx
		int category
		const char *value

void
gpgme_get_engine_info (ctx)
		perl_gpgme_ctx_or_null_t ctx
	PREINIT:
		gpgme_engine_info_t info, i;
	PPCODE:
		if (ctx == NULL) {
			gpgme_error_t err;
			err = gpgme_get_engine_info (&info);
			perl_gpgme_assert_error (err);
		}
		else {
			info = gpgme_ctx_get_engine_info (ctx);
		}

		for (i = info; i != NULL; i = i->next) {
			SV *sv = perl_gpgme_hashref_from_engine_info (i);
			sv_2mortal (sv);
			XPUSHs (sv);
		}

NO_OUTPUT gpgme_error_t
gpgme_set_engine_info (ctx, proto, file_name, home_dir)
		perl_gpgme_ctx_or_null_t ctx
		gpgme_protocol_t proto
		const char *file_name
		const char *home_dir
	CODE:
		if (ctx == NULL) {
			RETVAL = gpgme_set_engine_info (proto, file_name, home_dir);
		}
		else {
			RETVAL = gpgme_ctx_set_engine_info (ctx, proto, file_name, home_dir);
		}
	POSTCALL:
		perl_gpgme_assert_error (RETVAL);

void
gpgme_signers_clear (ctx)
		gpgme_ctx_t ctx

NO_OUTPUT gpgme_error_t
gpgme_signers_add (ctx, key)
		gpgme_ctx_t ctx
		const gpgme_key_t key
	POSTCALL:
		perl_gpgme_assert_error (RETVAL);

gpgme_key_t
gpgme_signers_enum (ctx, seq)
		gpgme_ctx_t ctx
		int seq

void
gpgme_sig_notation_clear (ctx)
		gpgme_ctx_t ctx

NO_OUTPUT gpgme_error_t
gpgme_sig_notation_add (ctx, name, value, flags=0)
		gpgme_ctx_t ctx
		const char *name
		const char *value
		gpgme_sig_notation_flags_t flags

void
gpgme_sig_notation_get (ctx)
		gpgme_ctx_t ctx
	PREINIT:
		gpgme_sig_notation_t notations, i;
	PPCODE:
		notations = gpgme_sig_notation_get (ctx);

		for (i = notations; i != NULL; i = i->next) {
			XPUSHs (sv_2mortal (perl_gpgme_hashref_from_notation (i)));
		}

gpgme_key_t
gpgme_get_key (ctx, fpr, secret=0)
		gpgme_ctx_t ctx
		const char *fpr
		int secret
	PREINIT:
		gpgme_error_t err;
	CODE:
		err = gpgme_get_key (ctx, fpr, &RETVAL, secret);
	POSTCALL:
		perl_gpgme_assert_error (err);
	OUTPUT:
		RETVAL

#NO_OUTPUT gpgme_error_t
#gpgme_cancel (ctx)
#		gpgme_ctx_t ctx
#	POSTCALL:
#		perl_gpgme_assert_error (RETVAL);

void
gpgme_verify (ctx, sig, signed_text=NULL)
		gpgme_ctx_t ctx
		gpgme_data_t sig
		gpgme_data_t signed_text
	PREINIT:
		gpgme_error_t err;
		gpgme_data_t plain = NULL;
		gpgme_verify_result_t result;
	INIT:
		gpgme_data_seek (sig, 0, SEEK_SET);

		if (signed_text) {
			gpgme_data_seek (signed_text, 0, SEEK_SET);
		}
	PPCODE:
		if (!signed_text) {
			err = gpgme_data_new (&plain);
			perl_gpgme_assert_error (err);
		}

		err = gpgme_op_verify (ctx, sig, signed_text, plain);
		perl_gpgme_assert_error (err);

		result = gpgme_op_verify_result (ctx);

		XPUSHs (sv_2mortal (perl_gpgme_hashref_from_verify_result (result)));

		if (!signed_text) {
			XPUSHs (sv_2mortal (perl_gpgme_data_to_sv (plain)));
		}

gpgme_data_t
gpgme_sign (ctx, plain, mode=GPGME_SIG_MODE_NORMAL)
		gpgme_ctx_t ctx
		gpgme_data_t plain
		gpgme_sig_mode_t mode
	PREINIT:
		gpgme_error_t err;
	INIT:
		err = gpgme_data_new (&RETVAL);
		perl_gpgme_assert_error (err);

		gpgme_data_seek (plain, 0, SEEK_SET);
	CODE:
		err = gpgme_op_sign (ctx, plain, RETVAL, mode);
	POSTCALL:
		perl_gpgme_assert_error (err);
		gpgme_data_seek (RETVAL, 0, SEEK_SET);
	OUTPUT:
		RETVAL

#NO_OUTPUT gpgme_error_t
#gpgme_key_import (ctx, keydata)
#		gpgme_ctx_t ctx
#		gpgme_data_t keydata
#	CODE:
#		RETVAL = gpgme_op_import (ctx, keydata);
#	POSTCALL:
#		perl_gpgme_assert_error (RETVAL);

void
gpgme_genkey (ctx, parms)
		gpgme_ctx_t ctx
		const char *parms
	PREINIT:
		gpgme_error_t err;
		gpgme_data_t pubkey, seckey;
		gpgme_genkey_result_t result;
	INIT:
		switch (gpgme_get_protocol (ctx)) {
			case GPGME_PROTOCOL_OpenPGP:
				pubkey = NULL;
				seckey = NULL;
				break;
			default:
				err = gpgme_data_new (&pubkey);
				perl_gpgme_assert_error (err);

				err = gpgme_data_new (&seckey);
				perl_gpgme_assert_error (err);
		}
	PPCODE:
		err = gpgme_op_genkey (ctx, parms, pubkey, seckey);
		perl_gpgme_assert_error (err);

		result = gpgme_op_genkey_result (ctx);

		EXTEND (sp, 3);
		PUSHs (perl_gpgme_genkey_result_to_sv (result));
		PUSHs (perl_gpgme_data_to_sv (pubkey));
		PUSHs (perl_gpgme_data_to_sv (seckey));

NO_OUTPUT gpgme_error_t
gpgme_delete (ctx, key, allow_secret=0)
		gpgme_ctx_t ctx
		gpgme_key_t key
		int allow_secret
	CODE:
		RETVAL = gpgme_op_delete (ctx, key, allow_secret);
	POSTCALL:
		perl_gpgme_assert_error (RETVAL);

gpgme_data_t
gpgme_edit (ctx, key, func, user_data=NULL)
		SV *ctx
		gpgme_key_t key
		SV *func
		SV *user_data
	PREINIT:
		perl_gpgme_callback_t *cb = NULL;
		perl_gpgme_callback_param_type_t param_types[2];
		perl_gpgme_callback_retval_type_t retval_types[1];
		gpgme_ctx_t c_ctx;
	INIT:
		param_types[0] = PERL_GPGME_CALLBACK_PARAM_TYPE_STATUS; /* status */
		param_types[1] = PERL_GPGME_CALLBACK_PARAM_TYPE_STR;    /* args */
		retval_types[0] = PERL_GPGME_CALLBACK_RETVAL_TYPE_STR;  /* result */
	CODE:
		c_ctx = (gpgme_ctx_t)perl_gpgme_get_ptr_from_sv (ctx, "Crypt::GpgME");

		cb = perl_gpgme_callback_new (func, user_data, ctx, 2, param_types, 1, retval_types);

		gpgme_op_edit (c_ctx, key, perl_gpgme_edit_cb, cb, RETVAL);

		perl_gpgme_callback_destroy (cb);
	OUTPUT:
		RETVAL

gpgme_data_t
gpgme_card_edit (ctx, key, func, user_data=NULL)
		SV *ctx
		gpgme_key_t key
		SV *func
		SV *user_data
	PREINIT:
		perl_gpgme_callback_t *cb = NULL;
		perl_gpgme_callback_param_type_t param_types[2];
		perl_gpgme_callback_retval_type_t retval_types[1];
		gpgme_ctx_t c_ctx;
	INIT:
		param_types[0] = PERL_GPGME_CALLBACK_PARAM_TYPE_STATUS; /* status */
		param_types[1] = PERL_GPGME_CALLBACK_PARAM_TYPE_STR;    /* args */
		retval_types[0] = PERL_GPGME_CALLBACK_RETVAL_TYPE_STR;  /* result */
	CODE:
		c_ctx = (gpgme_ctx_t)perl_gpgme_get_ptr_from_sv (ctx, "Crypt::GpgME");

		cb = perl_gpgme_callback_new (func, user_data, ctx, 2, param_types, 1, retval_types);

		gpgme_op_card_edit (c_ctx, key, perl_gpgme_edit_cb, cb, RETVAL);

		perl_gpgme_callback_destroy (cb);
	OUTPUT:
		RETVAL

void
gpgme_keylist (ctx, pattern, secret_only=0)
		gpgme_ctx_t ctx
		const char *pattern
		int secret_only
	PREINIT:
		gpgme_error_t err;
		gpgme_key_t key;
	PPCODE:
		err = gpgme_op_keylist_start (ctx, pattern, secret_only);
		perl_gpgme_assert_error (err);

		while ((err = gpgme_op_keylist_next (ctx, &key)) == GPG_ERR_NO_ERROR) {
			XPUSHs (perl_gpgme_new_sv_from_ptr (key, "Crypt::GpgME::Key"));
		}

		if (gpg_err_code (err) != GPG_ERR_EOF) {
			perl_gpgme_assert_error (err);
		}

void
gpgme_trustlist (ctx, pattern, max_level)
		gpgme_ctx_t ctx
		const char *pattern
		int max_level
	PREINIT:
		gpgme_error_t err;
		gpgme_trust_item_t item;
	PPCODE:
		err = gpgme_op_trustlist_start (ctx, pattern, max_level);
		perl_gpgme_assert_error (err);

		while ((err = gpgme_op_trustlist_next (ctx, &item)) == GPG_ERR_NO_ERROR) {
			XPUSHs (perl_gpgme_hashref_from_trust_item (item));
			gpgme_trust_item_unref (item);
		}

		if (gpg_err_code (err) != GPG_ERR_EOF) {
			perl_gpgme_assert_error (err);
		}

		gpgme_op_trustlist_end (ctx);

NO_OUTPUT gpgme_error_t
gpgme_engine_check_version (ctx, proto)
		perl_gpgme_ctx_or_null_t ctx
		gpgme_protocol_t proto
	C_ARGS:
		proto
	POSTCALL:
		perl_gpgme_assert_error (RETVAL);

const char *
GPGME_VERSION (class)
	CODE:
		RETVAL = GPGME_VERSION;
	OUTPUT:
		RETVAL

const char *
gpgme_check_version (class, version=NULL)
		const char *version
	C_ARGS:
		version
	POSTCALL:
		if (!RETVAL) {
			croak ("version requirement is not met");
		}

BOOT:
	PERL_GPGME_CALL_BOOT (boot_Crypt__GpgME__Key);



( run in 0.675 second using v1.01-cache-2.11-cpan-71847e10f99 )