rnp 0.2.0 → 1.0.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.adoc +5 -0
- data/LICENSE.txt +21 -0
- data/README.adoc +3 -182
- data/lib/rnp.rb +12 -3
- data/lib/rnp/error.rb +40 -0
- data/lib/rnp/ffi/librnp.rb +306 -0
- data/lib/rnp/input.rb +99 -0
- data/lib/rnp/key.rb +275 -0
- data/lib/rnp/misc.rb +71 -0
- data/lib/rnp/op/encrypt.rb +181 -0
- data/lib/rnp/op/sign.rb +139 -0
- data/lib/rnp/op/verify.rb +147 -0
- data/lib/rnp/output.rb +121 -0
- data/lib/rnp/rnp.rb +595 -0
- data/lib/rnp/utils.rb +44 -0
- data/lib/rnp/version.rb +8 -3
- metadata +124 -50
- data/.gitignore +0 -12
- data/.rspec +0 -2
- data/.travis.yml +0 -5
- data/CODE_OF_CONDUCT.md +0 -74
- data/Gemfile +0 -4
- data/Rakefile +0 -6
- data/Use_Cases.adoc +0 -119
- data/bin/console +0 -14
- data/bin/setup +0 -8
- data/example-usage.rb +0 -766
- data/examples/highlevel/decrypt_mem.rb +0 -44
- data/examples/highlevel/encrypt_mem.rb +0 -46
- data/examples/lowlevel/decrypt_file.rb +0 -76
- data/examples/lowlevel/decrypt_mem.rb +0 -80
- data/examples/lowlevel/encrypt_file.rb +0 -68
- data/examples/lowlevel/encrypt_mem.rb +0 -75
- data/examples/lowlevel/load_pubkey.rb +0 -118
- data/examples/lowlevel/print_keyring_file.rb +0 -68
- data/examples/lowlevel/print_keyring_mem.rb +0 -96
- data/examples/lowlevel/sign_file.rb +0 -104
- data/examples/lowlevel/sign_mem.rb +0 -96
- data/examples/lowlevel/verify_file.rb +0 -55
- data/examples/lowlevel/verify_mem.rb +0 -61
- data/lib/rnp/highlevel.rb +0 -5
- data/lib/rnp/highlevel/constants.rb +0 -96
- data/lib/rnp/highlevel/keyring.rb +0 -259
- data/lib/rnp/highlevel/publickey.rb +0 -150
- data/lib/rnp/highlevel/secretkey.rb +0 -318
- data/lib/rnp/highlevel/utils.rb +0 -119
- data/lib/rnp/lowlevel.rb +0 -6
- data/lib/rnp/lowlevel/constants.rb +0 -11
- data/lib/rnp/lowlevel/dynarray.rb +0 -129
- data/lib/rnp/lowlevel/enums.rb +0 -243
- data/lib/rnp/lowlevel/libc.rb +0 -28
- data/lib/rnp/lowlevel/libopenssl.rb +0 -15
- data/lib/rnp/lowlevel/librnp.rb +0 -213
- data/lib/rnp/lowlevel/structs.rb +0 -541
- data/lib/rnp/lowlevel/utils.rb +0 -25
- data/rnp.gemspec +0 -35
- data/rnp/lib/rnp.rb +0 -5
- data/rnp/spec/rnp_spec.rb +0 -11
@@ -1,68 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require_relative '../../lib/rnp'
|
3
|
-
|
4
|
-
def usage
|
5
|
-
puts "Usage: #{$0} <file>"
|
6
|
-
exit 1
|
7
|
-
end
|
8
|
-
|
9
|
-
def print_pubkey(pubkey, indent=0)
|
10
|
-
puts "#{' ' * indent}Version: #{pubkey[:version]}"
|
11
|
-
puts "#{' ' * indent}Creation Time: #{Time.at(pubkey[:birthtime])}"
|
12
|
-
puts "#{' ' * indent}Algorithm: #{pubkey[:alg]}"
|
13
|
-
case pubkey[:alg]
|
14
|
-
when :PGP_PKA_RSA
|
15
|
-
n = LibRNP::bn2hex(pubkey[:key][:rsa][:n])
|
16
|
-
e = LibRNP::bn2hex(pubkey[:key][:rsa][:e])
|
17
|
-
puts "#{' ' * indent}n: 0x#{n}"
|
18
|
-
puts "#{' ' * indent}e: 0x#{e}"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def print_seckey(seckey, indent=0)
|
23
|
-
puts "#{' ' * (indent+2)}[Public Key]"
|
24
|
-
print_pubkey(seckey[:pubkey], indent + 2)
|
25
|
-
puts "#{' ' * indent}string-to-key usage: #{seckey[:s2k_usage]}"
|
26
|
-
puts "#{' ' * indent}string-to-key specifier: #{seckey[:s2k_specifier]}"
|
27
|
-
puts "#{' ' * indent}Symmetric algorithm: #{seckey[:alg]}"
|
28
|
-
puts "#{' ' * indent}Hash algorithm: #{seckey[:hash_alg]}"
|
29
|
-
end
|
30
|
-
|
31
|
-
usage if ARGV.length != 1
|
32
|
-
armored = ARGV[0].downcase.end_with?('.asc') ? 1 : 0
|
33
|
-
|
34
|
-
keyring_mem = LibC::calloc(1, LibRNP::PGPKeyring.size)
|
35
|
-
keyring = LibRNP::PGPKeyring.new(keyring_mem)
|
36
|
-
if 1 != LibRNP::pgp_keyring_fileread(keyring, armored, ARGV[0])
|
37
|
-
puts 'Failed to load keyring'
|
38
|
-
exit 1
|
39
|
-
end
|
40
|
-
keycount = LibRNP::dynarray_count(keyring, 'key')
|
41
|
-
puts "Loaded #{keycount} key(s)"
|
42
|
-
|
43
|
-
(0..keycount - 1).each {|keyn|
|
44
|
-
key = LibRNP::dynarray_get_item(keyring, 'key', LibRNP::PGPKey, keyn)
|
45
|
-
puts "[Key ##{keyn}]"
|
46
|
-
uidcount = LibRNP::dynarray_count(key, 'uid')
|
47
|
-
print "User ids: "
|
48
|
-
puts LibRNP::dynarray_get_item(key, 'uid', :string, 0)
|
49
|
-
(1..uidcount - 1).each {|uidn|
|
50
|
-
print ' '
|
51
|
-
puts LibRNP::dynarray_get_item(key, 'uid', :string, uidn)
|
52
|
-
}
|
53
|
-
puts "Subpackets: #{LibRNP::dynarray_count(key, 'packet')}"
|
54
|
-
puts "Subsigs: #{LibRNP::dynarray_count(key, 'subsig')}"
|
55
|
-
puts "Revocations: #{LibRNP::dynarray_count(key, 'revoke')}"
|
56
|
-
case key[:type]
|
57
|
-
when :PGP_PTAG_CT_PUBLIC_KEY
|
58
|
-
puts ' [Public Key]'
|
59
|
-
pubkey = key[:key][:pubkey]
|
60
|
-
print_pubkey(pubkey, 2)
|
61
|
-
when :PGP_PTAG_CT_SECRET_KEY
|
62
|
-
puts ' [Secret Key]'
|
63
|
-
seckey = key[:key][:seckey]
|
64
|
-
print_seckey(seckey, 2)
|
65
|
-
end
|
66
|
-
puts ''
|
67
|
-
}
|
68
|
-
|
@@ -1,96 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require 'optparse'
|
3
|
-
|
4
|
-
require_relative '../../lib/rnp'
|
5
|
-
|
6
|
-
options = {armored: false}
|
7
|
-
parser = OptionParser.new do |opts|
|
8
|
-
opts.banner = "Usage: #{$0} [options]"
|
9
|
-
opts.on('-a', '--armored', 'Input file is ASCII armored') do
|
10
|
-
options[:armored] = true
|
11
|
-
end
|
12
|
-
opts.on('-h', '--help', 'Print this help') do
|
13
|
-
puts opts
|
14
|
-
exit
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def print_pubkey(pubkey, indent=0)
|
19
|
-
puts "#{' ' * indent}Version: #{pubkey[:version]}"
|
20
|
-
puts "#{' ' * indent}Creation Time: #{Time.at(pubkey[:birthtime])}"
|
21
|
-
puts "#{' ' * indent}Algorithm: #{pubkey[:alg]}"
|
22
|
-
case pubkey[:alg]
|
23
|
-
when :PGP_PKA_RSA
|
24
|
-
n = LibRNP::bn2hex(pubkey[:key][:rsa][:n])
|
25
|
-
e = LibRNP::bn2hex(pubkey[:key][:rsa][:e])
|
26
|
-
puts "#{' ' * indent}n: 0x#{n}"
|
27
|
-
puts "#{' ' * indent}e: 0x#{e}"
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def print_seckey(seckey, indent=0)
|
32
|
-
puts "#{' ' * (indent+2)}[Public Key]"
|
33
|
-
print_pubkey(seckey[:pubkey], indent + 2)
|
34
|
-
puts "#{' ' * indent}string-to-key usage: #{seckey[:s2k_usage]}"
|
35
|
-
puts "#{' ' * indent}string-to-key specifier: #{seckey[:s2k_specifier]}"
|
36
|
-
puts "#{' ' * indent}Symmetric algorithm: #{seckey[:alg]}"
|
37
|
-
puts "#{' ' * indent}Hash algorithm: #{seckey[:hash_alg]}"
|
38
|
-
end
|
39
|
-
|
40
|
-
parser.parse!
|
41
|
-
armored = options[:armored] ? 1 : 0
|
42
|
-
|
43
|
-
pgpio = LibRNP::PGPIO.new
|
44
|
-
stdout_fp = LibC::fdopen($stdout.to_i, 'w')
|
45
|
-
stderr_fp = LibC::fdopen($stderr.to_i, 'w')
|
46
|
-
pgpio[:outs] = stdout_fp
|
47
|
-
pgpio[:errs] = stderr_fp
|
48
|
-
pgpio[:res] = stdout_fp
|
49
|
-
|
50
|
-
mem_ptr = LibC::calloc(1, LibRNP::PGPMemory.size)
|
51
|
-
mem = LibRNP::PGPMemory.new(mem_ptr)
|
52
|
-
|
53
|
-
$stdin.binmode
|
54
|
-
data = $stdin.read
|
55
|
-
data_buf = FFI::MemoryPointer.new(:uint8, data.bytesize)
|
56
|
-
data_buf.put_bytes(0, data)
|
57
|
-
LibRNP::pgp_memory_add(mem, data_buf, data_buf.size)
|
58
|
-
|
59
|
-
keyring_mem = LibC::calloc(1, LibRNP::PGPKeyring.size)
|
60
|
-
keyring = LibRNP::PGPKeyring.new(keyring_mem)
|
61
|
-
if 1 != LibRNP::pgp_keyring_read_from_mem(pgpio, keyring, armored, mem)
|
62
|
-
puts 'Failed to load keyring'
|
63
|
-
exit 1
|
64
|
-
end
|
65
|
-
keycount = LibRNP::dynarray_count(keyring, 'key')
|
66
|
-
puts "Loaded #{keycount} key(s)"
|
67
|
-
|
68
|
-
(0..keycount - 1).each {|keyn|
|
69
|
-
key = LibRNP::dynarray_get_item(keyring, 'key', LibRNP::PGPKey, keyn)
|
70
|
-
puts "[Key ##{keyn}]"
|
71
|
-
uidcount = LibRNP::dynarray_count(key, 'uid')
|
72
|
-
print "User ids: "
|
73
|
-
puts LibRNP::dynarray_get_item(key, 'uid', :string, 0)
|
74
|
-
(1..uidcount - 1).each {|uidn|
|
75
|
-
print ' '
|
76
|
-
puts LibRNP::dynarray_get_item(key, 'uid', :string, uidn)
|
77
|
-
}
|
78
|
-
puts "Subpackets: #{LibRNP::dynarray_count(key, 'packet')}"
|
79
|
-
puts "Subsigs: #{LibRNP::dynarray_count(key, 'subsig')}"
|
80
|
-
puts "Revocations: #{LibRNP::dynarray_count(key, 'revoke')}"
|
81
|
-
printf "Key Flags: 0x%02X\n", key[:key_flags]
|
82
|
-
case key[:type]
|
83
|
-
when :PGP_PTAG_CT_PUBLIC_KEY
|
84
|
-
puts ' [Public Key]'
|
85
|
-
pubkey = key[:key][:pubkey]
|
86
|
-
print_pubkey(pubkey, 2)
|
87
|
-
when :PGP_PTAG_CT_SECRET_KEY
|
88
|
-
puts ' [Secret Key]'
|
89
|
-
seckey = key[:key][:seckey]
|
90
|
-
print_seckey(seckey, 2)
|
91
|
-
end
|
92
|
-
puts ''
|
93
|
-
}
|
94
|
-
|
95
|
-
LibRNP::pgp_memory_free(mem)
|
96
|
-
|
@@ -1,104 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require 'optparse'
|
3
|
-
require 'io/console'
|
4
|
-
|
5
|
-
require_relative '../../lib/rnp'
|
6
|
-
|
7
|
-
options = {keys_armored: false, cleartext: false, output_armored: false, detached: false}
|
8
|
-
parser = OptionParser.new do |opts|
|
9
|
-
opts.banner = "Usage: #{$0} [options] <seckey> <input-file> <output-file>"
|
10
|
-
opts.on('-k', '--keys-armored', 'Seckey is ASCII armored') do
|
11
|
-
options[:keys_armored] = true
|
12
|
-
end
|
13
|
-
opts.on('-c', '--clear-sign', 'Cleartext signature') do
|
14
|
-
options[:cleartext] = true
|
15
|
-
end
|
16
|
-
opts.on('-a', '--armored', 'Output file will be ASCII armored') do
|
17
|
-
options[:output_armored] = true
|
18
|
-
end
|
19
|
-
opts.on('-d', '--detached', 'Detached signature') do
|
20
|
-
options[:detached] = true
|
21
|
-
end
|
22
|
-
opts.on('-h', '--help', 'Print this help') do
|
23
|
-
puts opts
|
24
|
-
exit
|
25
|
-
end
|
26
|
-
end
|
27
|
-
parser.parse!
|
28
|
-
|
29
|
-
if ARGV.length != 3
|
30
|
-
parser.display
|
31
|
-
exit
|
32
|
-
end
|
33
|
-
|
34
|
-
seckey_filename = ARGV.shift
|
35
|
-
input_filename = ARGV.shift
|
36
|
-
output_filename = ARGV.shift
|
37
|
-
|
38
|
-
# Load keys/keyring
|
39
|
-
keyring_mem = LibC::calloc(1, LibRNP::PGPKeyring.size)
|
40
|
-
keyring = LibRNP::PGPKeyring.new(keyring_mem)
|
41
|
-
if 1 != LibRNP::pgp_keyring_fileread(keyring, options[:keys_armored] ? 1 : 0, seckey_filename)
|
42
|
-
puts 'Errors encountered while loading keyring.'
|
43
|
-
exit 1
|
44
|
-
end
|
45
|
-
# Find first seckey
|
46
|
-
keycount = LibRNP::dynarray_count(keyring, 'key')
|
47
|
-
seckey = nil
|
48
|
-
(0..keycount - 1).each {|keyn|
|
49
|
-
key = LibRNP::dynarray_get_item(keyring, 'key', LibRNP::PGPKey, keyn)
|
50
|
-
seckey = key if LibRNP::pgp_is_key_secret(key)
|
51
|
-
break if seckey != nil
|
52
|
-
}
|
53
|
-
if seckey == nil
|
54
|
-
puts 'No seckey found'
|
55
|
-
exit 1
|
56
|
-
end
|
57
|
-
|
58
|
-
'''
|
59
|
-
This is a bit convoluted because pgp_decrypt_seckey expects a FILE*.
|
60
|
-
It may be cleaner to reimplement the short pgp_decrypt_seckey function
|
61
|
-
in ruby as it does not do a lot.
|
62
|
-
'''
|
63
|
-
rd, wr = IO.pipe
|
64
|
-
print 'Enter passphrase: '
|
65
|
-
passphrase = $stdin.noecho(&:gets)
|
66
|
-
puts ''
|
67
|
-
wr.write passphrase
|
68
|
-
wr.close
|
69
|
-
passfp = LibC::fdopen(rd.to_i, 'r')
|
70
|
-
seckey = LibRNP::pgp_decrypt_seckey(seckey, passfp)
|
71
|
-
rd.close
|
72
|
-
LibC::fclose(passfp)
|
73
|
-
|
74
|
-
if seckey == nil
|
75
|
-
puts 'Invalid passphrase.'
|
76
|
-
exit 1
|
77
|
-
end
|
78
|
-
seckey = LibRNP::PGPSecKey.new(seckey)
|
79
|
-
|
80
|
-
pgpio = LibRNP::PGPIO.new
|
81
|
-
stdout_fp = LibC::fdopen($stdout.to_i, 'w')
|
82
|
-
stderr_fp = LibC::fdopen($stderr.to_i, 'w')
|
83
|
-
pgpio[:outs] = stdout_fp
|
84
|
-
pgpio[:errs] = stderr_fp
|
85
|
-
pgpio[:res] = stdout_fp
|
86
|
-
|
87
|
-
overwrite = 1
|
88
|
-
from = Time.now.to_i
|
89
|
-
duration = 0
|
90
|
-
armored = options[:output_armored] ? 1 : 0
|
91
|
-
|
92
|
-
# see pgp_str_to_hash_alg
|
93
|
-
hashname = 'sha1'
|
94
|
-
if options[:detached]
|
95
|
-
ret = LibRNP::pgp_sign_detached(pgpio, input_filename, output_filename, seckey, hashname, from, duration, armored, overwrite)
|
96
|
-
else
|
97
|
-
cleartext = options[:cleartext] ? 1 : 0
|
98
|
-
ret = LibRNP::pgp_sign_file(pgpio, input_filename, output_filename, seckey, hashname, from, duration, armored, cleartext, overwrite)
|
99
|
-
end
|
100
|
-
if ret == 1
|
101
|
-
puts 'Success'
|
102
|
-
else
|
103
|
-
puts 'Failed!'
|
104
|
-
end
|
@@ -1,96 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require 'optparse'
|
3
|
-
require 'io/console'
|
4
|
-
|
5
|
-
require_relative '../../lib/rnp'
|
6
|
-
|
7
|
-
options = {armored: false, keys_armored: false, cleartext: false}
|
8
|
-
parser = OptionParser.new do |opts|
|
9
|
-
opts.banner = "Usage: #{$0} [options] <seckey> <passphrase>"
|
10
|
-
opts.on('-k', '--keys-armored', 'Keys are ASCII armored') do
|
11
|
-
options[:keys_armored] = true
|
12
|
-
end
|
13
|
-
opts.on('-a', '--armored', 'Input is ASCII armored') do
|
14
|
-
options[:armored] = true
|
15
|
-
end
|
16
|
-
opts.on('-c', '--clear-sign', 'Cleartext signature') do
|
17
|
-
options[:cleartext] = true
|
18
|
-
end
|
19
|
-
opts.on('-h', '--help', 'Print this help') do
|
20
|
-
puts opts
|
21
|
-
exit
|
22
|
-
end
|
23
|
-
end
|
24
|
-
parser.parse!
|
25
|
-
|
26
|
-
if ARGV.length != 2
|
27
|
-
parser.display
|
28
|
-
exit
|
29
|
-
end
|
30
|
-
|
31
|
-
seckey_filename = ARGV.shift
|
32
|
-
passphrase = ARGV.shift + "\n"
|
33
|
-
|
34
|
-
# Load seckey/keyring
|
35
|
-
seckeyring_mem = LibC::calloc(1, LibRNP::PGPKeyring.size)
|
36
|
-
seckeyring = LibRNP::PGPKeyring.new(seckeyring_mem)
|
37
|
-
if 1 != LibRNP::pgp_keyring_fileread(seckeyring, options[:keys_armored] ? 1 : 0, seckey_filename)
|
38
|
-
puts 'Errors encountered while loading secret keyring.'
|
39
|
-
exit 1
|
40
|
-
end
|
41
|
-
# Find first seckey
|
42
|
-
keycount = LibRNP::dynarray_count(seckeyring, 'key')
|
43
|
-
seckey = nil
|
44
|
-
(0..keycount - 1).each {|keyn|
|
45
|
-
key = LibRNP::dynarray_get_item(seckeyring, 'key', LibRNP::PGPKey, keyn)
|
46
|
-
seckey = key if LibRNP::pgp_is_key_secret(key)
|
47
|
-
break if seckey != nil
|
48
|
-
}
|
49
|
-
if seckey == nil
|
50
|
-
puts 'No seckey found'
|
51
|
-
exit 1
|
52
|
-
end
|
53
|
-
|
54
|
-
pgpio = LibRNP::PGPIO.new
|
55
|
-
stderr_fp = LibC::fdopen($stderr.to_i, 'w')
|
56
|
-
# send all to stderr
|
57
|
-
pgpio[:outs] = stderr_fp
|
58
|
-
pgpio[:errs] = stderr_fp
|
59
|
-
pgpio[:res] = stderr_fp
|
60
|
-
|
61
|
-
rd, wr = IO.pipe
|
62
|
-
wr.write passphrase
|
63
|
-
wr.close
|
64
|
-
passfp = LibC::fdopen(rd.to_i, 'r')
|
65
|
-
seckey = LibRNP::pgp_decrypt_seckey(seckey, passfp)
|
66
|
-
rd.close
|
67
|
-
LibC::fclose(passfp)
|
68
|
-
|
69
|
-
if seckey == nil
|
70
|
-
puts 'Invalid passphrase.'
|
71
|
-
exit 1
|
72
|
-
end
|
73
|
-
seckey = LibRNP::PGPSecKey.new(seckey)
|
74
|
-
|
75
|
-
armored = options[:armored] ? 1 : 0
|
76
|
-
cleartext = options[:cleartext] ? 1 : 0
|
77
|
-
from = Time.now.to_i
|
78
|
-
duration = 0
|
79
|
-
# see pgp_str_to_hash_alg
|
80
|
-
hashname = 'sha1'
|
81
|
-
|
82
|
-
$stdin.binmode
|
83
|
-
data = $stdin.read
|
84
|
-
data_buf = FFI::MemoryPointer.new(:uint8, data.bytesize)
|
85
|
-
data_buf.put_bytes(0, data)
|
86
|
-
memory_ptr = LibRNP::pgp_sign_buf(pgpio, data_buf, data_buf.size, seckey, from, duration, hashname, armored, cleartext)
|
87
|
-
if not memory_ptr.null?
|
88
|
-
memory = LibRNP::PGPMemory.new(memory_ptr)
|
89
|
-
$stdout.binmode
|
90
|
-
$stdout.puts memory[:buf].read_bytes(memory[:length])
|
91
|
-
LibRNP::pgp_memory_free(memory)
|
92
|
-
$stderr.puts 'Success'
|
93
|
-
else
|
94
|
-
$stderr.puts 'Failed!'
|
95
|
-
end
|
96
|
-
|
@@ -1,55 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require 'optparse'
|
3
|
-
require 'io/console'
|
4
|
-
|
5
|
-
require_relative '../../lib/rnp'
|
6
|
-
|
7
|
-
options = {keys_armored: false, armored: false}
|
8
|
-
parser = OptionParser.new do |opts|
|
9
|
-
opts.banner = "Usage: #{$0} [options] <pubkey> <input-file>"
|
10
|
-
opts.on('-k', '--keys-armored', 'Pubkey is ASCII armored') do
|
11
|
-
options[:keys_armored] = true
|
12
|
-
end
|
13
|
-
opts.on('-a', '--armored', 'Input file is ASCII armored') do
|
14
|
-
options[:armored] = true
|
15
|
-
end
|
16
|
-
opts.on('-h', '--help', 'Print this help') do
|
17
|
-
puts opts
|
18
|
-
exit
|
19
|
-
end
|
20
|
-
end
|
21
|
-
parser.parse!
|
22
|
-
|
23
|
-
if ARGV.length != 2
|
24
|
-
parser.display
|
25
|
-
exit
|
26
|
-
end
|
27
|
-
|
28
|
-
pubkey_filename = ARGV.shift
|
29
|
-
input_filename = ARGV.shift
|
30
|
-
|
31
|
-
# Load keys/keyring
|
32
|
-
keyring_mem = LibC::calloc(1, LibRNP::PGPKeyring.size)
|
33
|
-
keyring = LibRNP::PGPKeyring.new(keyring_mem)
|
34
|
-
if 1 != LibRNP::pgp_keyring_fileread(keyring, options[:keys_armored] ? 1 : 0, pubkey_filename)
|
35
|
-
puts 'Errors encountered while loading keyring.'
|
36
|
-
exit 1
|
37
|
-
end
|
38
|
-
|
39
|
-
pgpio = LibRNP::PGPIO.new
|
40
|
-
stdout_fp = LibC::fdopen($stdout.to_i, 'w')
|
41
|
-
stderr_fp = LibC::fdopen($stderr.to_i, 'w')
|
42
|
-
pgpio[:outs] = stdout_fp
|
43
|
-
pgpio[:errs] = stderr_fp
|
44
|
-
pgpio[:res] = stdout_fp
|
45
|
-
|
46
|
-
armored = options[:armored] ? 1 : 0
|
47
|
-
|
48
|
-
validation = LibRNP::PGPValidation.new
|
49
|
-
ret = LibRNP::pgp_validate_file(pgpio, validation, input_filename, nil, armored, keyring)
|
50
|
-
if ret == 1
|
51
|
-
puts 'Success'
|
52
|
-
else
|
53
|
-
puts 'Failed!'
|
54
|
-
end
|
55
|
-
|
@@ -1,61 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require 'optparse'
|
3
|
-
require 'io/console'
|
4
|
-
|
5
|
-
require_relative '../../lib/rnp'
|
6
|
-
|
7
|
-
options = {keys_armored: false, armored: false}
|
8
|
-
parser = OptionParser.new do |opts|
|
9
|
-
opts.banner = "Usage: #{$0} [options] <pubkey>"
|
10
|
-
opts.on('-k', '--keys-armored', 'Pubkey is ASCII armored') do
|
11
|
-
options[:keys_armored] = true
|
12
|
-
end
|
13
|
-
opts.on('-a', '--armored', 'Input file is ASCII armored') do
|
14
|
-
options[:armored] = true
|
15
|
-
end
|
16
|
-
opts.on('-h', '--help', 'Print this help') do
|
17
|
-
puts opts
|
18
|
-
exit
|
19
|
-
end
|
20
|
-
end
|
21
|
-
parser.parse!
|
22
|
-
|
23
|
-
if ARGV.length != 1
|
24
|
-
parser.display
|
25
|
-
exit
|
26
|
-
end
|
27
|
-
|
28
|
-
pubkey_filename = ARGV.shift
|
29
|
-
|
30
|
-
# Load keys/keyring
|
31
|
-
keyring_mem = LibC::calloc(1, LibRNP::PGPKeyring.size)
|
32
|
-
keyring = LibRNP::PGPKeyring.new(keyring_mem)
|
33
|
-
if 1 != LibRNP::pgp_keyring_fileread(keyring, options[:keys_armored] ? 1 : 0, pubkey_filename)
|
34
|
-
puts 'Errors encountered while loading keyring.'
|
35
|
-
exit 1
|
36
|
-
end
|
37
|
-
|
38
|
-
pgpio = LibRNP::PGPIO.new
|
39
|
-
stderr_fp = LibC::fdopen($stderr.to_i, 'w')
|
40
|
-
pgpio[:outs] = stderr_fp
|
41
|
-
pgpio[:errs] = stderr_fp
|
42
|
-
pgpio[:res] = stderr_fp
|
43
|
-
|
44
|
-
armored = options[:armored] ? 1 : 0
|
45
|
-
|
46
|
-
validation = LibRNP::PGPValidation.new
|
47
|
-
mem_ptr = LibC::calloc(1, LibRNP::PGPMemory.size)
|
48
|
-
mem = LibRNP::PGPMemory.new(mem_ptr)
|
49
|
-
|
50
|
-
$stdin.binmode
|
51
|
-
data = $stdin.read
|
52
|
-
data_buf = FFI::MemoryPointer.new(:uint8, data.bytesize)
|
53
|
-
data_buf.put_bytes(0, data)
|
54
|
-
LibRNP::pgp_memory_add(mem, data_buf, data_buf.size)
|
55
|
-
ret = LibRNP::pgp_validate_mem(pgpio, validation, mem, nil, armored, keyring)
|
56
|
-
if ret == 1
|
57
|
-
puts 'Success'
|
58
|
-
else
|
59
|
-
puts 'Failed!'
|
60
|
-
end
|
61
|
-
|