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 )