gpgr 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.markdown +2 -2
- data/Rakefile +3 -3
- data/lib/gpgr.rb +34 -5
- data/test/generate_keys.rb +31 -0
- data/test/john_and_marks_keys/john.pub +25 -0
- data/test/john_and_marks_keys/mark.pub +25 -0
- data/test/test_file_encryption_functionality.rb +10 -1
- data/test/test_helper.rb +0 -29
- data/test/test_key_management_functionality.rb +2 -4
- metadata +21 -11
data/README.markdown
CHANGED
@@ -83,8 +83,8 @@ not be accepted - I'm happy to assume that it is.
|
|
83
83
|
|
84
84
|
##Status
|
85
85
|
|
86
|
-
|
86
|
+
Published as a gem, current version 0.0.4
|
87
87
|
|
88
88
|
[1]: http://www.pccl.co.uk
|
89
89
|
[2]: http://macgpg.sourceforge.net/
|
90
|
-
[3]: http://sourceforge.net/projects/macgpg2/files/
|
90
|
+
[3]: http://sourceforge.net/projects/macgpg2/files/
|
data/Rakefile
CHANGED
@@ -4,7 +4,7 @@ require 'rake/testtask'
|
|
4
4
|
require "rake/rdoctask"
|
5
5
|
require "rake/gempackagetask"
|
6
6
|
|
7
|
-
GPGR_VERSION = "0.0.
|
7
|
+
GPGR_VERSION = "0.0.4"
|
8
8
|
|
9
9
|
task :default => [:test]
|
10
10
|
|
@@ -22,7 +22,7 @@ Rake::RDocTask.new do |rdoc|
|
|
22
22
|
"COPYING",
|
23
23
|
"LICENSE",
|
24
24
|
"HACKING", "lib/" )
|
25
|
-
rdoc.main = "
|
25
|
+
rdoc.main = "lib/gpgr.rb"
|
26
26
|
rdoc.rdoc_dir = "doc/html"
|
27
27
|
rdoc.title = "Gpgr Documentation"
|
28
28
|
end
|
@@ -40,7 +40,7 @@ spec = Gem::Specification.new do |spec|
|
|
40
40
|
spec.has_rdoc = true
|
41
41
|
spec.extra_rdoc_files = %w{HACKING README.markdown LICENSE COPYING}
|
42
42
|
spec.rdoc_options << '--title' << 'Gpgr Documentation' <<
|
43
|
-
'--main' << '
|
43
|
+
'--main' << 'lib/gpgr.rb' << '-q'
|
44
44
|
spec.author = "Ryan Stenhouse"
|
45
45
|
spec.email = " ryan@ryanstenhouse.eu"
|
46
46
|
spec.rubyforge_project = "gpgr"
|
data/lib/gpgr.rb
CHANGED
@@ -13,9 +13,20 @@
|
|
13
13
|
#
|
14
14
|
# require 'rubygems'
|
15
15
|
# require 'gpgr'
|
16
|
+
#
|
17
|
+
# # Synopsis
|
18
|
+
# #
|
16
19
|
# list_of_keys = [ 'foo@example.com', 'bar@example.com' ]
|
17
20
|
# Gpgr::Encrypt.file('/some_file.txt', :to => '/encrypted.gpg').encrypt_using(list_of_keys)
|
18
|
-
#
|
21
|
+
#
|
22
|
+
# # To import all the public keys in a given directory
|
23
|
+
# #
|
24
|
+
# Gpgr::Keys.import_keys_at('/path/to/public/keys')
|
25
|
+
#
|
26
|
+
# # Will encrypt for every single person you have a public key for
|
27
|
+
# #
|
28
|
+
# Gpgr::Encrypt.file('/some_file.txt', :to => '/encrypted.gpg').encrypt_using(Gpgr::Keys.installed_public_keys)
|
29
|
+
#
|
19
30
|
module Gpgr
|
20
31
|
|
21
32
|
# Returns the command to execute to run GPG. It is defualted to /use/bin/env gpg
|
@@ -45,9 +56,19 @@ module Gpgr
|
|
45
56
|
default_options = { :to => "#{path}.pgp" }.merge(options)
|
46
57
|
GpgFileForEncryption.new(path, default_options[:to])
|
47
58
|
end
|
48
|
-
|
59
|
+
|
60
|
+
# Raised if there is an invalid e-mail address provided to encrypt with
|
61
|
+
#
|
49
62
|
class InvalidEmailException < Exception; end
|
50
63
|
|
64
|
+
# Raised if the input or output files for the GPG Encryption are invalid somehow
|
65
|
+
#
|
66
|
+
class InvalidFileException < Exception; end
|
67
|
+
|
68
|
+
|
69
|
+
# Contians the details used to encrypt specified +file+, is what actually does
|
70
|
+
# any encryption.
|
71
|
+
#
|
51
72
|
class GpgFileForEncryption
|
52
73
|
|
53
74
|
attr_accessor :email_addresses, :file, :file_output
|
@@ -83,6 +104,15 @@ module Gpgr
|
|
83
104
|
#
|
84
105
|
def encrypt
|
85
106
|
bad_key = @email_addresses.empty?
|
107
|
+
|
108
|
+
if File.exists?(@file)
|
109
|
+
unless File.readable?(@file)
|
110
|
+
raise InvalidFileException.new("File at #{@file} is not readable.") and return
|
111
|
+
end
|
112
|
+
else
|
113
|
+
raise InvalidFileException.new("File at #{@file} does not exist.") and return
|
114
|
+
end
|
115
|
+
|
86
116
|
@email_addresses.each do |add|
|
87
117
|
unless Gpgr::Keys.public_key_installed?(add)
|
88
118
|
bad_key = true
|
@@ -118,9 +148,8 @@ module Gpgr
|
|
118
148
|
# those which are likely to be GPG / PGP Public Keys.
|
119
149
|
#
|
120
150
|
def self.import_keys_at(path)
|
121
|
-
|
122
|
-
|
123
|
-
puts file.inspect
|
151
|
+
Dir.new(path).each do |file|
|
152
|
+
next if ['..','.'].include?(file)
|
124
153
|
Gpgr::Keys.import(path + '/' + file)
|
125
154
|
end
|
126
155
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
path = File.expand_path(File.dirname(__FILE__) + '/test_keys')
|
2
|
+
|
3
|
+
|
4
|
+
def generate_key(name, email, start_path)
|
5
|
+
file_path = "#{start_path}/testing_#{Time.now.to_i}"
|
6
|
+
params = <<-PGP
|
7
|
+
Key-Type: DSA
|
8
|
+
Key-Length: 1024
|
9
|
+
Subkey-Type: ELG-E
|
10
|
+
Subkey-Length: 1024
|
11
|
+
Name-Real: #{name}
|
12
|
+
Name-Comment: with stupid passphrase
|
13
|
+
Name-Email: #{email}
|
14
|
+
Expire-Date: 0
|
15
|
+
Passphrase: abc
|
16
|
+
%pubring #{file_path}.pub
|
17
|
+
%secring #{file_path}.sec
|
18
|
+
%commit
|
19
|
+
PGP
|
20
|
+
`echo '#{params}' | gpg --batch --gen-key -a`
|
21
|
+
if File.exists?(file_path + '.pub')
|
22
|
+
return file_path + '.pub'
|
23
|
+
else
|
24
|
+
raise "ARRGH"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
generate_key('TestyMcTest1', 'testymctest1@example.com', path)
|
30
|
+
generate_key('TestyMcTest2', 'testymctest2@example.com', path)
|
31
|
+
generate_key('TestyMcTest3', 'testymctest3@example.com', path)
|
@@ -0,0 +1,25 @@
|
|
1
|
+
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
2
|
+
Version: GnuPG v1.4.9 (GNU/Linux)
|
3
|
+
|
4
|
+
mQGiBEuiWdgRBACSK3Jckkap+7WT/UT90wF3Gwrn8MFfquOlVpPFdmcgOoHqJqe+
|
5
|
+
7Ve6HuGD4DD7Pdtth51p/GjpiDUmLCtsWsmtyokNEcWt8qeAJSdwxs6vurmCETDv
|
6
|
+
iNeW5NEFedpDaT8VfLhZYOvL0w0yEiKgozANUw30FbqlONSDSV95XVIzwwCglhtj
|
7
|
+
m9yosv/1WSIhE7I/FqQIsZkD/jTZwhlf18N3rSAhPf3mdN3bDQwoQ3J4enRfiIYQ
|
8
|
+
HMkAsgQIolDnmB+OYJveJloOy64c3kW7tLy66k0qNsHALYyIm0fVagZ2c2QsjPfo
|
9
|
+
f/5AR7mOQH9tyGwimSA3imSbPHUry9J81tFYyAghSlpaFaSzXwaZeVQz9UkYua1v
|
10
|
+
C1O3A/wLCgdmSiZPmvUwGO6aRtOlCYkOF1ESFXHf0yrGalEG7z3HnTt5kquuxEqH
|
11
|
+
Ju4z5SaCVomj223CiDhoqhuKegv42v1OqSUy2n8xhYaiG8jrYbi3nGBZHa7xDC+e
|
12
|
+
5fGRVRnvQak9fWhUiSpxnqmqDoehi31r8xMGsCXsfj3WwWX+HLQ2Sm9obiBTbWl0
|
13
|
+
aCAod2l0aCBzdHVwaWQgcGFzc3BocmFzZSkgPGpvaG5AZXhhbXBsZS5jb20+iGAE
|
14
|
+
ExECACAFAkuiWdgCGyMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRDItjDcD+Xj
|
15
|
+
wNupAJ4p+XOgp0CgrvZJj0lACZ60pkAoLgCfc4SNEmghdfIB7tWzDN5Tn5mvouq5
|
16
|
+
AQ0ES6JZ2BAEAMN72E8kKYqoZ9p5O1U6zqSgGLwKgBy/6AvL/DuJ30ZldX5V2IZ2
|
17
|
+
3UX+GOLvJLN8th+uq6/D0mTsaXVokiQG4kp+FNdoHttTc4XxlljfHrRzVeh/1v+Y
|
18
|
+
Km1dyMrLvXAWvmMRH6yUs8LaLRgTXxJMvj79AlQDlht+whcHCIl670h7AAMGBAC1
|
19
|
+
38U2Ijyr3pD2j0yEObN5WTe5Xv8w8FqWzlVgzQ5R3NTZQJdhZL8vg8axfwdSuGi+
|
20
|
+
W+EnahCJtoVYomxubZMEwqZhT1Qd51cikvGlrhS8fSfYceQu1pdyFNy9ZNunVcOy
|
21
|
+
jQvps3tD+FsbKVty7B/+8H8WaKFuhfhjkTzVJYl6GohJBBgRAgAJBQJLolnYAhsM
|
22
|
+
AAoJEMi2MNwP5ePAs9oAnRZy/o5nIKMMDYaq5py3RcghMxM5AJ93keBaAz6CR0qo
|
23
|
+
7ZcvIUoos7RKAQ==
|
24
|
+
=96fQ
|
25
|
+
-----END PGP PUBLIC KEY BLOCK-----
|
@@ -0,0 +1,25 @@
|
|
1
|
+
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
2
|
+
Version: GnuPG v1.4.9 (GNU/Linux)
|
3
|
+
|
4
|
+
mQGiBEuiWeERBACM6Kr8QCRkjUfQXoul72pYAJC+A9bv+nMgKWRYpgHSJFbDr2rx
|
5
|
+
Z/C/YtIBAKLLvL0jayRn5yUuDtBzr8yziTFHVjEYUfezvCOMFA5oFpGdhrbQvbyQ
|
6
|
+
lBlMOqlKQhZXjxt1ld7nlic1lLiwOW69gtnF2EqSSKRPWiQPYcbnkCdSVwCgwCi9
|
7
|
+
C4buNiT7qgURGAZP4637PsUD+QG9rieVi9py10LseF78wTpsLYK7U7TTUhn8kh1o
|
8
|
+
eox3QSw7SMJF5laiC7Gh6KNRZKggInVYYVhzpdEkzd5m93qXqBR/9PZDrAriVqvF
|
9
|
+
lAdDaE2C4mQ09a/vqwEkSW/xuwsyj6uPAS3WfGdnxrzaDh1eQiJjCTvhf4Oi5uOQ
|
10
|
+
GFgbBACAYq6sKS6fSuWlNKRIG1LwLtF5POLTMnyCnOcY6CqhqwkTV5MVSrEcO0Hr
|
11
|
+
70OqddkK61rh90falfuREZDFyVOr9s3Hp00/oFLLyQg4b/QE+BM5ADBh6N9whdyQ
|
12
|
+
CFz7+7dZ0hAIIVZSBhsZiNhxMl6xyMtJC3TSg4wIlqH6F5NvtrQ2TWFyayBTbWl0
|
13
|
+
aCAod2l0aCBzdHVwaWQgcGFzc3BocmFzZSkgPG1hcmtAZXhhbXBsZS5jb20+iGAE
|
14
|
+
ExECACAFAkuiWeECGyMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRCBZ2nT3XFV
|
15
|
+
RyiJAJ0XltocgbCDB4Oz2MS1uqaA/6o7rwCeOSxgLd01wuHptqVZ1KJAmv5eedO5
|
16
|
+
AQ0ES6JZ4RAEAPfR6NZmERgEd5TcbfO6IW5tFHafcZe8KvFP5RlYaeNBNWzgpkMl
|
17
|
+
zVwizM7awH7NMbL7B8kfVND5LE6Qqf9kELJ6fUxBfRYerk7Thiuj5jTa0QWNRKUv
|
18
|
+
cKE2I5p4jQsgNMTwumulVLY9a0i2GAlHLYVshx5vqELQMmAHvT/hIfMrAAMGA/0c
|
19
|
+
9tmguSta5CCidcVEiWa/ylnGmrcT2uB5PNqA7tdfxkUBVDKKKXJkey4r0dn8blLf
|
20
|
+
1W5TytEMYnquKy8NQEgoLHXos5KlWl13j9hOf6uszrbbG7vNjuhlUOQxSoj3tBWc
|
21
|
+
gu7pyJmKv5k/F6BQZQt2WKHkZVXorMEUAKOSazQ6HIhJBBgRAgAJBQJLolnhAhsM
|
22
|
+
AAoJEIFnadPdcVVHY+cAoKSonlAWGbyxzypSFjQ97qYWGqhpAKCdtvWGFEajnFn1
|
23
|
+
Lmb/MRJBEeVVOQ==
|
24
|
+
=6klI
|
25
|
+
-----END PGP PUBLIC KEY BLOCK-----
|
@@ -33,7 +33,16 @@ class TestFileEncryptionFunctionality < Test::Unit::TestCase
|
|
33
33
|
assert_raise Gpgr::Encrypt::InvalidEmailException do
|
34
34
|
o.encrypt
|
35
35
|
end
|
36
|
-
assert !File.exists(o.file_output)
|
36
|
+
assert !File.exists?(o.file_output)
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_encrypt_will_not_work_if_source_file_doesnt_exist
|
40
|
+
o = Gpgr::Encrypt.file('/tmp/i_just_made_this_up')
|
41
|
+
o.using [ 'nobody@example.com' ]
|
42
|
+
assert_raise Gpgr::Encrypt::InvalidFileException do
|
43
|
+
o.encrypt
|
44
|
+
end
|
45
|
+
assert !File.exists?(o.file_output)
|
37
46
|
end
|
38
47
|
|
39
48
|
end
|
data/test/test_helper.rb
CHANGED
@@ -8,35 +8,6 @@ GPGR_ROOT = File.expand_path(File.dirname(__FILE__) + '/../lib')
|
|
8
8
|
#
|
9
9
|
require GPGR_ROOT + '/gpgr.rb'
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
# Helper methods for the tests.
|
14
|
-
#
|
15
|
-
|
16
|
-
def generate_key_for(email, name)
|
17
|
-
file_path = "/tmp/gpgr_testing_#{Time.now.to_i}"
|
18
|
-
params = <<-PGP
|
19
|
-
Key-Type: DSA
|
20
|
-
Key-Length: 1024
|
21
|
-
Subkey-Type: ELG-E
|
22
|
-
Subkey-Length: 1024
|
23
|
-
Name-Real: #{name}
|
24
|
-
Name-Comment: with stupid passphrase
|
25
|
-
Name-Email: #{email}
|
26
|
-
Expire-Date: 0
|
27
|
-
Passphrase: abc
|
28
|
-
%pubring #{file_path}.pub
|
29
|
-
%secring #{file_path}.sec
|
30
|
-
%commit
|
31
|
-
PGP
|
32
|
-
`echo '#{params}' | gpg -q --no-verbose --batch --gen-key -a`
|
33
|
-
if File.exists?(file_path + '.pub')
|
34
|
-
return file_path + '.pub'
|
35
|
-
else
|
36
|
-
raise "ARRGH"
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
11
|
def remove_installed_key(email)
|
41
12
|
system "gpg -q --no-verbose --delete-key --yes --batch #{email}"
|
42
13
|
end
|
@@ -40,10 +40,8 @@ class TestKeyManagementFunctionality < Test::Unit::TestCase
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def setup_for_key_tests
|
43
|
-
|
44
|
-
@
|
45
|
-
@mark_key = generate_key_for('mark@example.com','Mark Test')
|
46
|
-
puts "=>\tDone!"
|
43
|
+
@john_key = File.dirname(__FILE__) + '/john_and_marks_keys/john.pub'
|
44
|
+
@mark_key = File.dirname(__FILE__) + '/john_and_marks_keys/mark.pub'
|
47
45
|
end
|
48
46
|
|
49
47
|
def teardown_for_key_tests
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gpgr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 4
|
9
|
+
version: 0.0.4
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Ryan Stenhouse
|
@@ -9,7 +14,7 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2010-03-
|
17
|
+
date: 2010-03-19 00:00:00 +00:00
|
13
18
|
default_executable:
|
14
19
|
dependencies: []
|
15
20
|
|
@@ -26,16 +31,19 @@ extra_rdoc_files:
|
|
26
31
|
- COPYING
|
27
32
|
files:
|
28
33
|
- lib/gpgr.rb
|
29
|
-
- test/
|
34
|
+
- test/generate_keys.rb
|
35
|
+
- test/john_and_marks_keys/john.pub
|
36
|
+
- test/john_and_marks_keys/mark.pub
|
37
|
+
- test/test_file_encryption_functionality.rb
|
38
|
+
- test/test_helper.rb
|
39
|
+
- test/test_key_management_functionality.rb
|
30
40
|
- test/test_keys/testing_1268859016.pub
|
31
41
|
- test/test_keys/testing_1268859023.pub
|
32
|
-
- test/
|
33
|
-
- test/test_file_encryption_functionality.rb
|
42
|
+
- test/test_keys/testing_1268859031.pub
|
34
43
|
- test/test_keys_with_non_key_files/test.csv
|
35
|
-
- test/test_keys_with_non_key_files/testing_1268859031.pub
|
36
44
|
- test/test_keys_with_non_key_files/testing_1268859016.pub
|
37
45
|
- test/test_keys_with_non_key_files/testing_1268859023.pub
|
38
|
-
- test/
|
46
|
+
- test/test_keys_with_non_key_files/testing_1268859031.pub
|
39
47
|
- Rakefile
|
40
48
|
- HACKING
|
41
49
|
- README.markdown
|
@@ -50,7 +58,7 @@ rdoc_options:
|
|
50
58
|
- --title
|
51
59
|
- Gpgr Documentation
|
52
60
|
- --main
|
53
|
-
-
|
61
|
+
- lib/gpgr.rb
|
54
62
|
- -q
|
55
63
|
require_paths:
|
56
64
|
- lib
|
@@ -58,18 +66,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
58
66
|
requirements:
|
59
67
|
- - ">="
|
60
68
|
- !ruby/object:Gem::Version
|
69
|
+
segments:
|
70
|
+
- 0
|
61
71
|
version: "0"
|
62
|
-
version:
|
63
72
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
73
|
requirements:
|
65
74
|
- - ">="
|
66
75
|
- !ruby/object:Gem::Version
|
76
|
+
segments:
|
77
|
+
- 0
|
67
78
|
version: "0"
|
68
|
-
version:
|
69
79
|
requirements: []
|
70
80
|
|
71
81
|
rubyforge_project: gpgr
|
72
|
-
rubygems_version: 1.3.
|
82
|
+
rubygems_version: 1.3.6
|
73
83
|
signing_key:
|
74
84
|
specification_version: 3
|
75
85
|
summary: A lightweight GPG CLI interface for encyrypting files
|