symmetric-encryption 0.8.0 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +16 -4
- data/foo.zip +0 -0
- data/lib/symmetric-encryption.rb +1 -19
- data/lib/symmetric_encryption.rb +19 -0
- data/lib/symmetric_encryption/cipher.rb +56 -23
- data/lib/symmetric_encryption/reader.rb +1 -1
- data/lib/symmetric_encryption/symmetric_encryption.rb +6 -3
- data/lib/symmetric_encryption/version.rb +1 -1
- data/lib/symmetric_encryption/writer.rb +1 -1
- data/nbproject/private/config.properties +0 -0
- data/nbproject/private/private.properties +3 -0
- data/nbproject/private/private.xml +17 -0
- data/nbproject/private/rake-d.txt +4 -0
- data/nbproject/project.properties +9 -0
- data/nbproject/project.xml +16 -0
- data/test/cipher_test.rb +23 -2
- data/test/config/{mongoid.yml → mongoid_v2.yml} +0 -0
- data/test/config/mongoid_v3.yml +9 -0
- data/test/field_encrypted_test.rb +4 -2
- data/test/reader_test.rb +2 -2
- data/test/writer_test.rb +4 -2
- metadata +35 -44
- data/csv.zip +0 -0
- data/csv_encrypted +0 -0
- data/csv_encrypted_zip +0 -0
data/README.md
CHANGED
@@ -129,6 +129,18 @@ Example: Compress, Encrypt and write data to a file
|
|
129
129
|
file.write "Keep this safe and secure\n"
|
130
130
|
end
|
131
131
|
|
132
|
+
### Standalone test
|
133
|
+
|
134
|
+
Before generating keys we can use SymmetricEncryption in a standalone test environment:
|
135
|
+
|
136
|
+
# Use test encryption keys
|
137
|
+
SymmetricEncryption.cipher = SymmetricEncryption::Cipher.new(
|
138
|
+
:key => '1234567890ABCDEF1234567890ABCDEF',
|
139
|
+
:iv => '1234567890ABCDEF',
|
140
|
+
:cipher => 'aes-128-cbc'
|
141
|
+
)
|
142
|
+
encrypted = SymmetricEncryption.encrypt('hello world')
|
143
|
+
puts SymmetricEncryption.decrypt(encrypted)
|
132
144
|
|
133
145
|
### Generating encrypted passwords
|
134
146
|
|
@@ -143,11 +155,11 @@ Note: Passwords must be encrypted in the environment in which they will be used.
|
|
143
155
|
### Add to an existing Rails project
|
144
156
|
Add the following line to Gemfile
|
145
157
|
|
146
|
-
|
158
|
+
gem 'symmetric-encryption'
|
147
159
|
|
148
160
|
Install the Gem with bundler
|
149
161
|
|
150
|
-
|
162
|
+
bundle install
|
151
163
|
|
152
164
|
## Rails Configuration
|
153
165
|
|
@@ -160,7 +172,7 @@ modified as needed.
|
|
160
172
|
|
161
173
|
Generate the configuration file:
|
162
174
|
|
163
|
-
|
175
|
+
rails generate symmetric_encryption:config /etc/rails/keys
|
164
176
|
|
165
177
|
Note: Ignore the warning about "Symmetric Encryption config not found" since it is
|
166
178
|
being generated
|
@@ -224,7 +236,7 @@ SymmetricEncryption can also be used in non-Rails environment.
|
|
224
236
|
|
225
237
|
Install SymmetricEncryption
|
226
238
|
|
227
|
-
|
239
|
+
gem install symmetric-encryption
|
228
240
|
|
229
241
|
Manually create a symmetric-encryption.yml configuration file based on the
|
230
242
|
one supplied in examples/symmetric-encryption.yml.
|
data/foo.zip
ADDED
Binary file
|
data/lib/symmetric-encryption.rb
CHANGED
@@ -1,19 +1 @@
|
|
1
|
-
require 'symmetric_encryption
|
2
|
-
require 'symmetric_encryption/cipher'
|
3
|
-
require 'symmetric_encryption/symmetric_encryption'
|
4
|
-
require 'symmetric_encryption/reader'
|
5
|
-
require 'symmetric_encryption/writer'
|
6
|
-
require 'zlib'
|
7
|
-
if defined?(Rails)
|
8
|
-
require 'symmetric_encryption/railtie'
|
9
|
-
end
|
10
|
-
# attr_encrypted and Encrypted validator
|
11
|
-
if defined?(ActiveRecord::Base)
|
12
|
-
require 'symmetric_encryption/extensions/active_record/base'
|
13
|
-
require 'symmetric_encryption/railties/symmetric_encryption_validator'
|
14
|
-
end
|
15
|
-
|
16
|
-
# field encryption for Mongoid
|
17
|
-
if defined?(Mongoid)
|
18
|
-
require 'symmetric_encryption/extensions/mongoid/fields'
|
19
|
-
end
|
1
|
+
require 'symmetric_encryption'
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'symmetric_encryption/version'
|
2
|
+
require 'symmetric_encryption/cipher'
|
3
|
+
require 'symmetric_encryption/symmetric_encryption'
|
4
|
+
require 'symmetric_encryption/reader'
|
5
|
+
require 'symmetric_encryption/writer'
|
6
|
+
require 'zlib'
|
7
|
+
if defined?(Rails)
|
8
|
+
require 'symmetric_encryption/railtie'
|
9
|
+
end
|
10
|
+
# attr_encrypted and Encrypted validator
|
11
|
+
if defined?(ActiveRecord::Base)
|
12
|
+
require 'symmetric_encryption/extensions/active_record/base'
|
13
|
+
require 'symmetric_encryption/railties/symmetric_encryption_validator'
|
14
|
+
end
|
15
|
+
|
16
|
+
# field encryption for Mongoid
|
17
|
+
if defined?(Mongoid)
|
18
|
+
require 'symmetric_encryption/extensions/mongoid/fields'
|
19
|
+
end
|
@@ -32,13 +32,33 @@ module SymmetricEncryption
|
|
32
32
|
# Create a Symmetric::Key for encryption and decryption purposes
|
33
33
|
#
|
34
34
|
# Parameters:
|
35
|
-
# :key
|
35
|
+
# :key [String]
|
36
36
|
# The Symmetric Key to use for encryption and decryption
|
37
|
-
#
|
37
|
+
#
|
38
|
+
# :iv [String]
|
38
39
|
# Optional. The Initialization Vector to use with Symmetric Key
|
39
|
-
#
|
40
|
+
# Highly Recommended as it is the input into the CBC algorithm
|
41
|
+
#
|
42
|
+
# :cipher [String]
|
40
43
|
# Optional. Encryption Cipher to use
|
41
44
|
# Default: aes-256-cbc
|
45
|
+
#
|
46
|
+
# :encoding [Symbol]
|
47
|
+
# :base64strict
|
48
|
+
# Return as a base64 encoded string that does not include additional newlines
|
49
|
+
# This is the recommended format since newlines in the values to
|
50
|
+
# SQL queries are cumbersome. Also the newline reformatting is unnecessary
|
51
|
+
# It is not the default for backward compatibility
|
52
|
+
# :base64
|
53
|
+
# Return as a base64 encoded string
|
54
|
+
# :binary
|
55
|
+
# Return as raw binary data string. Note: String can contain embedded nulls
|
56
|
+
# Default: :base64
|
57
|
+
# Recommended: :base64strict
|
58
|
+
#
|
59
|
+
# :version [Fixnum]
|
60
|
+
# Optional. The version number of this encryption key
|
61
|
+
# Used by SymmetricEncryption to select the correct key when decrypting data
|
42
62
|
def initialize(parms={})
|
43
63
|
raise "Missing mandatory parameter :key" unless @key = parms[:key]
|
44
64
|
@iv = parms[:iv]
|
@@ -50,34 +70,46 @@ module SymmetricEncryption
|
|
50
70
|
end
|
51
71
|
|
52
72
|
# AES Symmetric Encryption of supplied string
|
73
|
+
# The String is encoded to UTF-8 prior to encryption
|
74
|
+
#
|
53
75
|
# Returns result as a Base64 encoded string
|
54
76
|
# Returns nil if the supplied str is nil
|
55
77
|
# Returns "" if it is a string and it is empty
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
78
|
+
if defined?(Encoding)
|
79
|
+
def encrypt(str)
|
80
|
+
return if str.nil?
|
81
|
+
buf = str.to_s.encode(SymmetricEncryption::UTF8_ENCODING)
|
82
|
+
return str if buf.empty?
|
83
|
+
crypt(:encrypt, buf)
|
84
|
+
end
|
85
|
+
else
|
86
|
+
def encrypt(str)
|
87
|
+
return if str.nil?
|
88
|
+
buf = str.to_s
|
89
|
+
return str if buf.empty?
|
90
|
+
crypt(:encrypt, buf)
|
91
|
+
end
|
70
92
|
end
|
71
93
|
|
72
94
|
# AES Symmetric Decryption of supplied string
|
73
|
-
#
|
95
|
+
# The encoding of the supplied string is ignored since it must be binary data
|
96
|
+
# Returns a UTF-8 encoded, decrypted string
|
74
97
|
# Returns nil if the supplied str is nil
|
75
98
|
# Returns "" if it is a string and it is empty
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
99
|
+
if defined?(Encoding)
|
100
|
+
def decrypt(str)
|
101
|
+
return if str.nil?
|
102
|
+
buf = str.to_s.force_encoding(SymmetricEncryption::BINARY_ENCODING)
|
103
|
+
return str if buf.empty?
|
104
|
+
crypt(:decrypt, buf).force_encoding(SymmetricEncryption::UTF8_ENCODING)
|
105
|
+
end
|
106
|
+
else
|
107
|
+
def decrypt(str)
|
108
|
+
return if str.nil?
|
109
|
+
buf = str.to_s
|
110
|
+
return str if buf.empty?
|
111
|
+
crypt(:decrypt, buf)
|
112
|
+
end
|
81
113
|
end
|
82
114
|
|
83
115
|
# Return a new random key using the configured cipher
|
@@ -104,6 +136,7 @@ module SymmetricEncryption
|
|
104
136
|
|
105
137
|
# Creates a new OpenSSL::Cipher with every call so that this call
|
106
138
|
# is thread-safe
|
139
|
+
# Return a binary encoded decrypted or encrypted string
|
107
140
|
def crypt(cipher_method, string) #:nodoc:
|
108
141
|
openssl_cipher = ::OpenSSL::Cipher.new(self.cipher)
|
109
142
|
openssl_cipher.send(cipher_method)
|
@@ -74,7 +74,7 @@ module SymmetricEncryption
|
|
74
74
|
# end
|
75
75
|
def self.open(filename_or_stream, options={}, &block)
|
76
76
|
raise "options must be a hash" unless options.respond_to?(:each_pair)
|
77
|
-
mode = options.fetch(:mode, '
|
77
|
+
mode = options.fetch(:mode, 'rb')
|
78
78
|
compress = options.fetch(:compress, false)
|
79
79
|
ios = filename_or_stream.is_a?(String) ? ::File.open(filename_or_stream, mode) : filename_or_stream
|
80
80
|
|
@@ -160,9 +160,6 @@ module SymmetricEncryption
|
|
160
160
|
true
|
161
161
|
end
|
162
162
|
|
163
|
-
# Future: Generate private key in config file generator
|
164
|
-
#new_key = OpenSSL::PKey::RSA.generate(2048)
|
165
|
-
|
166
163
|
# Generate new random symmetric keys for use with this Encryption library
|
167
164
|
#
|
168
165
|
# Note: Only the current Encryption key settings are used
|
@@ -310,4 +307,10 @@ module SymmetricEncryption
|
|
310
307
|
)
|
311
308
|
end
|
312
309
|
|
310
|
+
# With Ruby 1.9 strings have encodings
|
311
|
+
if defined?(Encoding)
|
312
|
+
BINARY_ENCODING = Encoding.find("binary")
|
313
|
+
UTF8_ENCODING = Encoding.find("UTF-8")
|
314
|
+
end
|
315
|
+
|
313
316
|
end
|
@@ -66,7 +66,7 @@ module SymmetricEncryption
|
|
66
66
|
# end
|
67
67
|
def self.open(filename_or_stream, options={}, &block)
|
68
68
|
raise "options must be a hash" unless options.respond_to?(:each_pair)
|
69
|
-
mode = options.fetch(:mode, '
|
69
|
+
mode = options.fetch(:mode, 'wb')
|
70
70
|
compress = options.fetch(:compress, false)
|
71
71
|
ios = filename_or_stream.is_a?(String) ? ::File.open(filename_or_stream, mode) : filename_or_stream
|
72
72
|
|
File without changes
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<project-private xmlns="http://www.netbeans.org/ns/project-private/1">
|
3
|
+
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/1">
|
4
|
+
<file>
|
5
|
+
<url>lib/symmetric/encryption.rb</url>
|
6
|
+
<line>62</line>
|
7
|
+
</file>
|
8
|
+
<file>
|
9
|
+
<url>lib/symmetric_encryption/symmetric_encryption.rb</url>
|
10
|
+
<line>75</line>
|
11
|
+
</file>
|
12
|
+
<file>
|
13
|
+
<url>lib/symmetric_encryption/encryption.rb</url>
|
14
|
+
<line>60</line>
|
15
|
+
</file>
|
16
|
+
</editor-bookmarks>
|
17
|
+
</project-private>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<project xmlns="http://www.netbeans.org/ns/project/1">
|
3
|
+
<type>org.netbeans.modules.ruby.rubyproject</type>
|
4
|
+
<configuration>
|
5
|
+
<data xmlns="http://www.netbeans.org/ns/ruby-project/1">
|
6
|
+
<name>symmetric-encryption</name>
|
7
|
+
<source-roots>
|
8
|
+
<root id="src.lib.dir" name="Source Files"/>
|
9
|
+
<root id="src.examples.dir" name="Examples"/>
|
10
|
+
</source-roots>
|
11
|
+
<test-roots>
|
12
|
+
<root id="test.test.dir" name="Test Files"/>
|
13
|
+
</test-roots>
|
14
|
+
</data>
|
15
|
+
</configuration>
|
16
|
+
</project>
|
data/test/cipher_test.rb
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'
|
|
4
4
|
require 'rubygems'
|
5
5
|
require 'test/unit'
|
6
6
|
require 'shoulda'
|
7
|
-
require 'symmetric_encryption
|
7
|
+
require 'symmetric_encryption'
|
8
8
|
|
9
9
|
# Unit Test for SymmetricEncryption::Cipher
|
10
10
|
#
|
@@ -24,7 +24,13 @@ class CipherTest < Test::Unit::TestCase
|
|
24
24
|
cipher = SymmetricEncryption::Cipher.new(
|
25
25
|
:key => '1234567890ABCDEF1234567890ABCDEF'
|
26
26
|
)
|
27
|
-
|
27
|
+
result = "\302<\351\227oj\372\3331\310\260V\001\v'\346"
|
28
|
+
# Note: This test fails on JRuby 1.7 RC1 since it's OpenSSL
|
29
|
+
# behaves differently when no IV is supplied.
|
30
|
+
# It instead encrypts to the following value:
|
31
|
+
# result = "0h\x92\x88\xA1\xFE\x8D\xF5\xF3v\x82\xAF(P\x83Y"
|
32
|
+
result.force_encoding('binary') if defined?(Encoding)
|
33
|
+
assert_equal result, cipher.encrypt('Hello World')
|
28
34
|
end
|
29
35
|
|
30
36
|
should "throw an exception on bad data" do
|
@@ -47,7 +53,10 @@ class CipherTest < Test::Unit::TestCase
|
|
47
53
|
:iv => '1234567890ABCDEF'
|
48
54
|
)
|
49
55
|
@social_security_number = "987654321"
|
56
|
+
|
50
57
|
@social_security_number_encrypted = "A\335*\314\336\250V\340\023%\000S\177\305\372\266"
|
58
|
+
@social_security_number_encrypted.force_encoding('binary') if defined?(Encoding)
|
59
|
+
|
51
60
|
@sample_data = [
|
52
61
|
{ :text => '555052345', :encrypted => ''}
|
53
62
|
]
|
@@ -65,5 +74,17 @@ class CipherTest < Test::Unit::TestCase
|
|
65
74
|
assert_equal @social_security_number, @cipher.decrypt(@social_security_number_encrypted)
|
66
75
|
end
|
67
76
|
|
77
|
+
if defined?(Encoding)
|
78
|
+
context "on Ruby 1.9" do
|
79
|
+
should "encode encrypted data as binary" do
|
80
|
+
assert_equal Encoding.find('binary'), @cipher.encrypt(@social_security_number).encoding
|
81
|
+
end
|
82
|
+
|
83
|
+
should "decode encrypted data as utf-8" do
|
84
|
+
assert_equal Encoding.find('utf-8'), @cipher.decrypt(@cipher.encrypt(@social_security_number)).encoding
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
68
89
|
end
|
69
90
|
end
|
File without changes
|
@@ -6,13 +6,15 @@ require 'logger'
|
|
6
6
|
require 'erb'
|
7
7
|
require 'test/unit'
|
8
8
|
require 'shoulda'
|
9
|
-
# Since we want both the
|
9
|
+
# Since we want both the Mongoid extensions loaded we need to require it first
|
10
10
|
require 'active_record'
|
11
11
|
require 'mongoid'
|
12
12
|
require 'symmetric-encryption'
|
13
|
+
require 'symmetric_encryption/extensions/mongoid/fields'
|
13
14
|
|
14
15
|
Mongoid.logger = Logger.new($stdout)
|
15
|
-
Mongoid.
|
16
|
+
filename = defined?(Mongoid::VERSION) ? "test/config/mongoid_v3.yml" : "test/config/mongoid_v2.yml"
|
17
|
+
Mongoid.load!(filename)
|
16
18
|
|
17
19
|
class MongoidUser
|
18
20
|
include Mongoid::Document
|
data/test/reader_test.rb
CHANGED
@@ -69,8 +69,8 @@ class ReaderTest < Test::Unit::TestCase
|
|
69
69
|
|
70
70
|
context "reading from file" do
|
71
71
|
# With and without header
|
72
|
-
[{:header => false}, {:
|
73
|
-
context "with#{'out' unless options[:header]} header" do
|
72
|
+
[{:header => false}, {:compress => false}, {:compress => true}].each_with_index do |options, i|
|
73
|
+
context "with#{'out' unless options[:header]} header #{i}" do
|
74
74
|
setup do
|
75
75
|
@filename = '._test'
|
76
76
|
# Create encrypted file
|
data/test/writer_test.rb
CHANGED
@@ -36,7 +36,9 @@ class EncryptionWriterTest < Test::Unit::TestCase
|
|
36
36
|
file.close
|
37
37
|
|
38
38
|
assert_equal @data_len, written_len
|
39
|
-
|
39
|
+
result = stream.string
|
40
|
+
result.force_encoding('binary') if defined?(Encoding)
|
41
|
+
assert_equal @data_encrypted, result
|
40
42
|
end
|
41
43
|
|
42
44
|
should "encrypt to string stream using .open" do
|
@@ -54,7 +56,7 @@ class EncryptionWriterTest < Test::Unit::TestCase
|
|
54
56
|
written_len = @data.inject(0) {|sum,str| sum + file.write(str)}
|
55
57
|
end
|
56
58
|
assert_equal @data_len, written_len
|
57
|
-
assert_equal @data_encrypted, File.
|
59
|
+
assert_equal @data_encrypted, File.open(@filename, 'rb') {|f| f.read }
|
58
60
|
end
|
59
61
|
end
|
60
62
|
end
|
metadata
CHANGED
@@ -1,37 +1,27 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: symmetric-encryption
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 8
|
8
|
-
- 0
|
9
|
-
version: 0.8.0
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.0
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Reid Morrison
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
date: 2012-08-28 00:00:00 -04:00
|
18
|
-
default_executable:
|
12
|
+
date: 2012-09-26 00:00:00.000000000 Z
|
19
13
|
dependencies: []
|
20
|
-
|
21
|
-
|
22
|
-
|
14
|
+
description: SymmetricEncryption supports encrypting ActiveRecord data, Mongoid data,
|
15
|
+
passwords in configuration files, encrypting and decrypting of large files through
|
16
|
+
streaming
|
17
|
+
email:
|
23
18
|
- reidmo@gmail.com
|
24
19
|
executables: []
|
25
|
-
|
26
20
|
extensions: []
|
27
|
-
|
28
21
|
extra_rdoc_files: []
|
29
|
-
|
30
|
-
files:
|
31
|
-
- csv.zip
|
32
|
-
- csv_encrypted
|
33
|
-
- csv_encrypted_zip
|
22
|
+
files:
|
34
23
|
- examples/symmetric-encryption.yml
|
24
|
+
- foo.zip
|
35
25
|
- lib/rails/generators/symmetric_encryption/config/config_generator.rb
|
36
26
|
- lib/rails/generators/symmetric_encryption/config/templates/symmetric-encryption.yml
|
37
27
|
- lib/rails/generators/symmetric_encryption/new_keys/new_keys_generator.rb
|
@@ -46,13 +36,21 @@ files:
|
|
46
36
|
- lib/symmetric_encryption/symmetric_encryption.rb
|
47
37
|
- lib/symmetric_encryption/version.rb
|
48
38
|
- lib/symmetric_encryption/writer.rb
|
39
|
+
- lib/symmetric_encryption.rb
|
49
40
|
- LICENSE.txt
|
41
|
+
- nbproject/private/config.properties
|
42
|
+
- nbproject/private/private.properties
|
43
|
+
- nbproject/private/private.xml
|
44
|
+
- nbproject/private/rake-d.txt
|
45
|
+
- nbproject/project.properties
|
46
|
+
- nbproject/project.xml
|
50
47
|
- Rakefile
|
51
48
|
- README.md
|
52
49
|
- test/attr_encrypted_test.rb
|
53
50
|
- test/cipher_test.rb
|
54
51
|
- test/config/database.yml
|
55
|
-
- test/config/
|
52
|
+
- test/config/mongoid_v2.yml
|
53
|
+
- test/config/mongoid_v3.yml
|
56
54
|
- test/config/symmetric-encryption.yml
|
57
55
|
- test/config/test_new.iv
|
58
56
|
- test/config/test_new.key
|
@@ -62,35 +60,28 @@ files:
|
|
62
60
|
- test/reader_test.rb
|
63
61
|
- test/symmetric_encryption_test.rb
|
64
62
|
- test/writer_test.rb
|
65
|
-
has_rdoc: true
|
66
63
|
homepage: https://github.com/ClarityServices/symmetric-encryption
|
67
64
|
licenses: []
|
68
|
-
|
69
65
|
post_install_message:
|
70
66
|
rdoc_options: []
|
71
|
-
|
72
|
-
require_paths:
|
67
|
+
require_paths:
|
73
68
|
- lib
|
74
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
requirements:
|
83
|
-
- -
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
|
86
|
-
- 0
|
87
|
-
version: "0"
|
69
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ! '>='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
77
|
+
requirements:
|
78
|
+
- - ! '>='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
88
81
|
requirements: []
|
89
|
-
|
90
82
|
rubyforge_project:
|
91
|
-
rubygems_version: 1.
|
83
|
+
rubygems_version: 1.8.24
|
92
84
|
signing_key:
|
93
85
|
specification_version: 3
|
94
86
|
summary: Symmetric Encryption for Ruby, and Ruby on Rails
|
95
87
|
test_files: []
|
96
|
-
|
data/csv.zip
DELETED
Binary file
|
data/csv_encrypted
DELETED
Binary file
|
data/csv_encrypted_zip
DELETED
Binary file
|