class Dotgpg::Key
Public Class Methods
read(file)
click to toggle source
# File lib/dotgpg/key.rb, line 4 def self.read(file) GPGME::Key.import(file).imports.map do |import| GPGME::Key.find(:public, import.fingerprint) end.flatten.first end
secret_key(email=nil, force_new=nil)
click to toggle source
# File lib/dotgpg/key.rb, line 10 def self.secret_key(email=nil, force_new=nil) new.secret_key(email, force_new) end
Public Instance Methods
secret_key(email=nil, force_new=nil)
click to toggle source
# File lib/dotgpg/key.rb, line 14 def secret_key(email=nil, force_new=nil) existing = existing_key(email) if existing && !force_new existing else create_new_key email end end
Private Instance Methods
create_new_key(email=nil)
click to toggle source
# File lib/dotgpg/key.rb, line 31 def create_new_key(email=nil) name = guess_name email ||= guess_email if email puts "Creating a new GPG key: #{name} <#{email}>" passphrase = get_passphrase else puts "Creating a new GPG key for #{name}" email = get_email passphrase = get_passphrase end puts "Generating large prime numbers, please wait..." ctx = GPGME::Ctx.new ctx.genkey(<<EOF, nil, nil) <GnupgKeyParms format="internal"> Key-Type: RSA Key-Length: 2048 Subkey-Type: RSA Subkey-Length: 2048 Name-Real: #{name} Name-Comment: dotgpg Name-Email: #{email} Expire-Date: 0 Passphrase: #{passphrase} </GnupgKeyParms> EOF # return the most recently created key (race!) GPGME::Key.find(:secret).sort_by{ |key| key.primary_subkey.timestamp }.last end
existing_key(email=nil)
click to toggle source
# File lib/dotgpg/key.rb, line 25 def existing_key(email=nil) existing_private_keys.detect do |k| email.nil? || k.email == email end end
existing_private_keys()
click to toggle source
# File lib/dotgpg/key.rb, line 101 def existing_private_keys GPGME::Key.find(:secret) end
get_email()
click to toggle source
# File lib/dotgpg/key.rb, line 77 def get_email email = "" until email =~ /@/ email = Dotgpg.read_input "Email address: " end email end
get_passphrase()
click to toggle source
# File lib/dotgpg/key.rb, line 85 def get_passphrase passphrase = confirmation = nil until passphrase && passphrase == confirmation times = 0 until passphrase && passphrase.length >= 10 times += 1 $stderr.puts "Passphrases should be secure! (>=10 chars)" if times >= 2 passphrase = Dotgpg.read_passphrase("Passphrase: ") end until confirmation && confirmation.length >= 10 confirmation = Dotgpg.read_passphrase("Passphrase confirmation: ") end end passphrase end
guess_email()
click to toggle source
# File lib/dotgpg/key.rb, line 72 def guess_email email = `git config user.email 2>/dev/null`.strip email if email != "" end
guess_name()
click to toggle source
# File lib/dotgpg/key.rb, line 66 def guess_name name = `git config user.name 2>/dev/null`.strip name = `whoami`.strip if name == "" name end