def self.new(options = {})
rctx = []
err = GPGME::gpgme_new(rctx)
exc = GPGME::error_to_exception(err)
raise exc if exc
ctx = rctx[0]
ctx.protocol = options[:protocol] if options[:protocol]
ctx.armor = options[:armor] if options[:armor]
ctx.textmode = options[:textmode] if options[:textmode]
ctx.keylist_mode = options[:keylist_mode] if options[:keylist_mode]
if options[:password]
ctx.set_passphrase_callback GPGME::Ctx.method(:pass_function),
options[:password]
else
if options[:passphrase_callback]
ctx.set_passphrase_callback options[:passphrase_callback],
options[:passphrase_callback_value]
end
end
if options[:progress_callback]
ctx.set_progress_callback options[:progress_callback],
options[:progress_callback_value]
end
if block_given?
begin
yield ctx
ensure
GPGME::gpgme_release(ctx)
end
else
ctx
end
end