Skip to content

grant-olson/gpg_status_parser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gpg_status_parser

gpg provides a status interface that is designed to allow automated systems to interact with it. This library provides an interface that translates the status strings into ruby objects to provide a more natural way interface with gpg.

Quick Example

require 'gpg_status_parser'
require 'tempfile'

signed_text = <<SIGNED
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

foo
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)

iQEcBAEBAgAGBQJRF5E8AAoJEHA7DA4l04ch/oMH/RCB6UHYugL7br4oJX9+F7Iv
7QiNkWwTErQ499ZFZKHa4BCP6fJG9wXjqzfiu1YPbuiRdl52EgLHz/xHpu9Ewey8
0te9Evgume04wk+08+bihvdCtMtroDTNZ5nqF6/E4z1TPBfSvAvCNNLi1B7w+F5q
E10OwSt+bYa3aNBSc/Dt9t4Di0RsvvTCmVqV0actrKgdZt79nnvgsXTWuxIyZBqA
f5ACkN1KTR7eKa2fY7AojHcCqjHSK03AOMN35gcabuewKEBuVciXzyfp6bTyEHN1
PxBgZOQcWf70RA5pWZOyd+nLIeQ5pZmkWRzoxBt0FbcttNWWMRWGyGdpOtGpfDc=
=qO+n
-----END PGP SIGNATURE-----
SIGNED

# Save signed file
signed_file = Tempfile.new("signed")
signed_file.write(signed_text)
signed_file.close

# Check sig

puts "NORMAL GPG OUTPUT"
puts "================="
puts
puts `gpg --verify #{signed_file.path}`

# Lets save the validity and trust messages
sig_status = nil
sig_trust = nil

validity_messages = [:GOODSIG, :EXPSIG, :BADSIG, :ERRSIG, :VALIDSIG]

trust_messages = [:TRUST_UNDEFINED, :TRUST_NEVER, :TRUST_MARGINAL,
                  :TRUST_FULLY, :TRUST_ULTIMATE]

GPGStatusParser.run_gpg("--verify #{signed_file.path}") do |msg|
  puts "RECEIVED: #{msg.status} #{msg.args.inspect}"

  sig_status = msg.status if validity_messages.include? msg.status
  sig_trust = msg.status if trust_messages.include? msg.status
end

puts
puts "EXTRACTED VALIDITY AND TRUST"
puts "============================"
puts
puts "Signature validity was #{sig_status}"
puts "Signature trust level was #{sig_trust}"

Example Output

NORMAL GPG OUTPUT
=================

gpg: Signature made Sun 10 Feb 2013 07:23:24 AM EST using RSA key ID 25D38721
gpg: Good signature from "Test User <test@example.org>"

RECEIVED: SIG_ID {:radix64_string=>"jRWzDyjdbbGjvn9nNJJxF7HA7MA", :sig_creation_date=>"2013-02-10", :sig_timestamp=>"1360499004"}
RECEIVED: GOODSIG {:long_keyid_or_fpr=>"703B0C0E25D38721", :username=>" Test User <test@example.org>"}
RECEIVED: VALIDSIG {:fingerprint_in_hex=>"B2AE14D84135BA08C0FC27C7703B0C0E25D38721", :sig_creation_date=>"2013-02-10", :sig_timestamp=>"1360499004", :expire_timestamp=>"0", :sig_version=>"4", :reserved=>"0", :pubkey_algo=>"1", :hash_algo=>"2", :sig_class=>"01", :primary_key_fpr=>"B2AE14D84135BA08C0FC27C7703B0C0E25D38721"}
RECEIVED: TRUST_ULTIMATE {}

EXTRACTED VALIDITY AND TRUST
============================

Signature validity was VALIDSIG
Signature trust level was TRUST_ULTIMATE

Verification

This gem is signed with rubygems-openpgp. You can verify its integrity by running:

gem install gpg_status_parser --verify

Much more information on signing is available at the rubygems-openpgp Certificate Authority.

Signing key:

pub   2048R/E3B5806F 2010-01-11 [expires: 2014-01-03]
      Key fingerprint = A530 C31C D762 0D26 E2BA  C384 B6F6 FFD0 E3B5 806F
uid                  Grant T. Olson (Personal email) <kgo@grant-olson.net>
uid                  Grant T Olson <grant@webkite.com>
uid                  Grant T. Olson (pikimal) <grant@pikimal.com>
sub   2048R/6A8F7CF6 2010-01-11 [expires: 2014-01-03]
sub   2048R/A18A54D6 2010-03-01 [expires: 2014-01-03]
sub   2048R/D53982CE 2010-08-31 [expires: 2014-01-03]

About

Turns the output generated from `gpg --status-fd` into ruby objects for easier manipulation.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages