Použití heslo na zpětné volání v rubínové gpgme

hlasů
3

Já používám ruby ​​gpgme drahokam (1.0.8). Moje heslo pro zpětné volání není volána:

def passfunc(*args)
  fd = args.last
  io = IO.for_fd(fd, 'w')
  io.puts mypassphrase
  io.flush
end

opts = {
  :passphrase_callback => method(:passfunc)
}
GPGME.decrypt(input,output, opts)

Má někdo mít funkční příklad přístupové heslo pro zpětné volání?

Položena 08/12/2009 v 16:36
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
3

Zde je další příklad pracuje pro vás, že nepoužívá samostatně stojící podpis. Tento test jednoduše změnit ‚user@host.name‘ identifikátoru vašeho klíče a udělat toto: GPG.decrypt (GPG.encrypt ( ‚nějaký text‘,: brnění => true))

require 'gpgme'
require 'highline/import'

module GPG
  ENCRYPT_KEY = 'user@host.com'
  @gpg = GPGME::Crypto.new

  class << self

    def decrypt(encrypted_data, options = {})
      options = { :passphrase_callback => self.method(:passfunc) }.merge(options)
      @gpg.decrypt(encrypted_data, options).read 
    end

    def encrypt(data_to_encrypt, options = {})
      options = { :passphrase_callback => self.method(:passfunc), :armor => true }.merge(options)
      @gpg.encrypt(data_to_encrypt, options).read
    end

    private
      def get_passphrase
        ask("Enter passphrase for #{ENCRYPT_KEY}: ") { |q| q.echo = '*' }
      end

      def passfunc(hook, uid_hint, passphrase_info, prev_was_bad, fd)
        begin
          system('stty -echo')
          io = IO.for_fd(fd, 'w')
          io.puts(get_passphrase)
          io.flush
        ensure
          (0 ... $_.length).each do |i| $_[i] = ?0 end if $_
          system('stty echo')
        end
        $stderr.puts
      end
  end
end

Na zdraví!,

- Carl

Odpovězeno 10/10/2011 v 19:58
zdroj uživatelem

hlasů
3

Vzorek zpětného volání naleznete v následujícím pracovním příkladu. To podepíše soubor v rodinném režimu, tedy souboru podpis je oddělen od původního souboru. Používá výchozí klíčenku na ~ / .gnupg nebo něco takového. Chcete-li použít jiný adresář pro vaši klíčenku, nastavte proměnnou prostředí ENV [ „GNUPGHOME“] = „“ Před volání GPGME :: značka ().

#!/usr/bin/ruby
require 'rubygems'
require 'gpgme'

puts "Signing #{ARGV[0]}" 
input = File.open(ARGV[0],'r')

PASSWD = "abc"

def passfunc(hook, uid_hint, passphrase_info, prev_was_bad, fd)
    puts("Passphrase for #{uid_hint}: ")
    io = IO.for_fd(fd, 'w')
    io.write(PASSWD+"\n")
    io.flush
end

output = File.open(ARGV[0]+'.asc','w')

sign = GPGME::sign(input, {
        :passphrase_callback => method(:passfunc), 
        :mode => GPGME::SIG_MODE_DETACH
    })
output.write(sign)
output.close
input.close
Odpovězeno 21/03/2011 v 19:22
zdroj uživatelem

hlasů
2

Je důležité si uvědomit, že od GnuPG 2.0 (a 1.4, když use-agentje použita varianta) pinentryse používá pro sběr frázi. To znamená, že gpgme heslo zpětné volání nelze uplatnit . To je popsáno zde a příklad použití lze nalézt v gpgme-tool příkladu .

Odpovězeno 04/01/2015 v 17:54
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more