def GPGME.sign(plain, *args_options)
raise ArgumentError, 'wrong number of arguments' if args_options.length > 2
args, options = split_args(args_options)
sig = args[0]
check_version(options)
GPGME::Ctx.new(options) do |ctx|
ctx.add_signer(*resolve_keys(options[:signers], true, [:sign])) if options[:signers]
mode = options[:mode] || GPGME::SIG_MODE_NORMAL
plain_data = input_data(plain)
sig_data = output_data(sig)
begin
ctx.sign(plain_data, sig_data, mode)
rescue GPGME::Error::UnusableSecretKey => exc
exc.keys = ctx.sign_result.invalid_signers
raise exc
end
unless sig
sig_data.seek(0, IO::SEEK_SET)
sig_data.read
end
end
end