reedb 0.10.rc1
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 +7 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +15 -0
- data/Gemfile.lock +38 -0
- data/Rakefile +2 -0
- data/bin/reedbd +62 -0
- data/lib/reedb.rb +739 -0
- data/lib/reedb/config.rb +24 -0
- data/lib/reedb/constants.rb +42 -0
- data/lib/reedb/daemon_wrapper.rb +617 -0
- data/lib/reedb/datafile.rb +268 -0
- data/lib/reedb/errors/daemon_errors.rb +34 -0
- data/lib/reedb/errors/encryption_errors.rb +29 -0
- data/lib/reedb/errors/vault_errors.rb +39 -0
- data/lib/reedb/reevault.rb +547 -0
- data/lib/reedb/security/aes.rb +94 -0
- data/lib/reedb/security/encryption.rb +64 -0
- data/lib/reedb/security/multifish.rb +15 -0
- data/lib/reedb/security/secure_hash.rb +131 -0
- data/lib/reedb/security/twofish.rb +14 -0
- data/lib/reedb/utils/logger.rb +97 -0
- data/lib/reedb/utils/meta_vault.rb +28 -0
- data/lib/reedb/utils/sorting.rb +49 -0
- data/lib/reedb/utils/utilities.rb +121 -0
- data/lib/reedb/utils/uuids.rb +375 -0
- data/lib/reedb/utils/version.rb +101 -0
- data/reedb.gemspec +31 -0
- data/tests/daemons/reedb.rb +27 -0
- data/tests/layout.rb +24 -0
- data/tests/networking/client.rb +14 -0
- data/tests/networking/server.rb +14 -0
- data/tests/play.rb +5 -0
- data/tests/serialisation.rb +49 -0
- data/tests/tests.rb +64 -0
- metadata +209 -0
@@ -0,0 +1,101 @@
|
|
1
|
+
# ====================================================
|
2
|
+
# Copyright 2015 Lonely Robot (see @author)
|
3
|
+
# @author: Katharina Sabel | www.2rsoftworks.de
|
4
|
+
#
|
5
|
+
# Distributed under the GNU Lesser GPL Version 3
|
6
|
+
# (See accompanying LICENSE file or get a copy at
|
7
|
+
# https://www.gnu.org/licenses/lgpl.html)
|
8
|
+
# ====================================================
|
9
|
+
|
10
|
+
require_relative 'utilities'
|
11
|
+
|
12
|
+
module Reedb
|
13
|
+
class Version1
|
14
|
+
attr_reader :timestamp, :revision
|
15
|
+
|
16
|
+
def initialize(existing = nil)
|
17
|
+
|
18
|
+
# If a version is created from an existing pattern
|
19
|
+
if existing != nil
|
20
|
+
existing["R"] = "" if existing[0] == "R"
|
21
|
+
data = existing.split('::')
|
22
|
+
@revision = data[0].to_i
|
23
|
+
@timestamp = data[1].to_i
|
24
|
+
return self
|
25
|
+
end
|
26
|
+
|
27
|
+
# This creates a new version
|
28
|
+
@revision = 1
|
29
|
+
@timestamp = DateTime.now.strftime('%Q')
|
30
|
+
end
|
31
|
+
|
32
|
+
def update
|
33
|
+
@revision += 1
|
34
|
+
@timestamp = DateTime.now.strftime('%Q')
|
35
|
+
end
|
36
|
+
|
37
|
+
# This formatting is actually used in the dataset
|
38
|
+
def to_s
|
39
|
+
return "R#{@revision}::#{@timestamp}"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Has been depreciated in version 0.9.9 (of Reedb, not the class)
|
44
|
+
# Too specific and broad usecase. Was replaced with the new Version
|
45
|
+
# DO NOT USE!
|
46
|
+
#
|
47
|
+
class Version_spec
|
48
|
+
|
49
|
+
attr_reader :host, :timestamp, :numeral
|
50
|
+
|
51
|
+
def initialize(existing = nil)
|
52
|
+
puts "DO NOT USE! Use 'Reedb::Version' INSTEAD!"
|
53
|
+
if existing
|
54
|
+
data = existing.split('_')
|
55
|
+
@host = data[0]
|
56
|
+
|
57
|
+
# Hack to make the version numeral work.
|
58
|
+
@numeral = data[1].split('.')
|
59
|
+
@numeral[0] = @numeral[0].to_i
|
60
|
+
@numeral[1] = @numeral[1].to_i
|
61
|
+
|
62
|
+
@timestamp = data[2]
|
63
|
+
@timestamp = @timestamp.to_i
|
64
|
+
return self
|
65
|
+
end
|
66
|
+
@host = Reedb::Utilities::parse_host
|
67
|
+
@timestamp = DateTime.now.strftime('%Q')
|
68
|
+
@numeral = [0, 0]
|
69
|
+
@timestamp = @timestamp.to_i
|
70
|
+
end
|
71
|
+
|
72
|
+
def update
|
73
|
+
@timestamp = DateTime.now.strftime('%Q')
|
74
|
+
@host == Reedb::Utilities::parse_host ? incr_last : incr_first
|
75
|
+
@host = Reedb::Utilities::parse_host
|
76
|
+
end
|
77
|
+
|
78
|
+
# def greater(other)
|
79
|
+
# if @timestamp > other.timestamp
|
80
|
+
# puts "This is greater"
|
81
|
+
# else
|
82
|
+
# puts "Other is greater"
|
83
|
+
# end
|
84
|
+
# end
|
85
|
+
|
86
|
+
def to_s
|
87
|
+
return [@host, @numeral.join('.'), @timestamp].join('_')
|
88
|
+
end
|
89
|
+
|
90
|
+
private
|
91
|
+
|
92
|
+
def incr_first
|
93
|
+
@numeral[0] += 1
|
94
|
+
@numeral[-1] = 0
|
95
|
+
end
|
96
|
+
|
97
|
+
def incr_last
|
98
|
+
@numeral[-1] += 1
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
data/reedb.gemspec
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('./lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require_relative 'lib/reedb/constants'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "reedb"
|
8
|
+
spec.version = Reedb::VERSION
|
9
|
+
spec.authors = ["Lonely Robot", "Katharina Sabel"]
|
10
|
+
spec.email = ["sabel.katharina@gmail.com"]
|
11
|
+
spec.summary = %q{Ruby storage containers/ database that uses completely encrpypted files for maximum security.}
|
12
|
+
spec.description = %q{Ruby storage containers/ database. Uses Rinjdael, Twofish, ... to keep your data safe. Made for native and local application development. Spawns a system daemon that manages vaults that applications can talk to.}
|
13
|
+
spec.homepage = "https://github.com/tr-lonelyrobot/reedb/wiki"
|
14
|
+
spec.license = "LGPL v3.0"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.7"
|
22
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
23
|
+
|
24
|
+
spec.add_dependency 'aes', '~> 0.5'
|
25
|
+
spec.add_dependency 'twofish', '~> 1.0'
|
26
|
+
spec.add_dependency 'digest-tiger', '~> 1.0'
|
27
|
+
spec.add_dependency 'json', '~> 1.8'
|
28
|
+
spec.add_dependency 'daemons', '~> 1.2'
|
29
|
+
spec.add_dependency 'sinatra', '~> 1.4'
|
30
|
+
spec.add_dependency 'hashids', '~> 1.0'
|
31
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# this is my_daemons.rb
|
2
|
+
require 'daemons'
|
3
|
+
require_relative '../../lib/reedb/utils/logger'
|
4
|
+
require_relative '../../lib/reedb/utils/utilities'
|
5
|
+
|
6
|
+
puts "Output 1"
|
7
|
+
|
8
|
+
# Initialize the app while we're not a daemon
|
9
|
+
Reedb::DaemonLogger.setup("/home/spacekookie/Desktop")
|
10
|
+
# server = TCPServer.open(2000)
|
11
|
+
|
12
|
+
puts "Init done"
|
13
|
+
|
14
|
+
|
15
|
+
# Become a daemon
|
16
|
+
Daemons.daemonize
|
17
|
+
|
18
|
+
Reedb::DaemonLogger.write("Daemon created")
|
19
|
+
|
20
|
+
# The server loop
|
21
|
+
loop do
|
22
|
+
# puts "Loop!"
|
23
|
+
# client = server.accept
|
24
|
+
# params = JSON.parse(client.gets)
|
25
|
+
Reedb::DaemonLogger.write("Still alive")
|
26
|
+
sleep(1)
|
27
|
+
end
|
data/tests/layout.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
module Reedb
|
2
|
+
|
3
|
+
module Config
|
4
|
+
module Master
|
5
|
+
class << self
|
6
|
+
def config
|
7
|
+
puts "Master Config"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
module Vault
|
13
|
+
class << self
|
14
|
+
def config
|
15
|
+
puts "Vault Config"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
Reedb::Config::Master::config
|
24
|
+
Reedb::Config::Vault::config
|
data/tests/play.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'yaml'
|
3
|
+
require 'aes'
|
4
|
+
|
5
|
+
data = {}
|
6
|
+
data['header'] = {}
|
7
|
+
data['header']['header'] =
|
8
|
+
data['header']['name'] = "Entry name"
|
9
|
+
data['header']['url'] = "www.entry.com"
|
10
|
+
data['header']['version'] = "1.1"
|
11
|
+
|
12
|
+
data['content'] = {}
|
13
|
+
|
14
|
+
data['content']['1.0'] = {}
|
15
|
+
data['content']['1.0']['username'] = 'spacekookie'
|
16
|
+
data['content']['1.0']['password'] = 'blume123'
|
17
|
+
|
18
|
+
data['content']['1.1'] = {}
|
19
|
+
data['content']['1.1']['reason'] = 'My reason to edit this entry was BEWBS!'
|
20
|
+
data['content']['1.1']['note'] = 'This is an example note'
|
21
|
+
data['content']['1.1']['password'] = '123brei'
|
22
|
+
|
23
|
+
@key = AES.key
|
24
|
+
|
25
|
+
rounds = 10
|
26
|
+
|
27
|
+
start_json = Time.now
|
28
|
+
|
29
|
+
rounds.times do |x|
|
30
|
+
json_data = data.to_json
|
31
|
+
encrypted_json = AES.encrypt(json_data, @key)
|
32
|
+
File.open("json#{x}.ree", "wb").write(Base64.encode64("#{encrypted_json}")) # => Using ASCII Armour
|
33
|
+
end
|
34
|
+
end_json = Time.now
|
35
|
+
puts "JSON ==> #{((end_json - start_json)) * 1000} ms"
|
36
|
+
|
37
|
+
start_yaml = Time.now
|
38
|
+
|
39
|
+
rounds.times do |x|
|
40
|
+
yaml_data = data.to_yaml
|
41
|
+
encrypted_yaml = AES.encrypt(yaml_data, @key)
|
42
|
+
File.open("yaml#{x}.ree", "wb").write(Base64.encode64("#{encrypted_yaml}")) # => Using ASCII Armour
|
43
|
+
end
|
44
|
+
end_yaml = Time.now
|
45
|
+
puts "YAML ==> #{((end_yaml - start_yaml)) * 1000} ms"
|
46
|
+
|
47
|
+
#
|
48
|
+
# JSON IS A CLEAR!!! Winner!
|
49
|
+
#
|
data/tests/tests.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
|
2
|
+
# user_pw = "1234567890123"
|
3
|
+
|
4
|
+
# Reedb.init(:unix, 12) # => defines OS and minimal password length on vault
|
5
|
+
# path = File.expand_path('~/Desktop/reedb')
|
6
|
+
|
7
|
+
# # Default encryption is set to 'aes'
|
8
|
+
# begin
|
9
|
+
# Reedb.vault('default', "#{path}", :aes).load(user_pw)
|
10
|
+
# rescue VaultDoesNotExistError, VaultExistsAtLocationError => e
|
11
|
+
# puts e.message
|
12
|
+
# puts "If you think this is a bug, please report it <3"
|
13
|
+
# # exit
|
14
|
+
# end
|
15
|
+
|
16
|
+
# data = {
|
17
|
+
# 'body'=>{
|
18
|
+
# 'password'=>'mega_secure_password',
|
19
|
+
# 'username'=>'spacekookie'
|
20
|
+
# }
|
21
|
+
# }
|
22
|
+
|
23
|
+
# data2 = {
|
24
|
+
# 'body'=>{
|
25
|
+
# 'password'=>'less_secure',
|
26
|
+
# }
|
27
|
+
# }
|
28
|
+
|
29
|
+
# Reedb.active_vaults['default'].insert('Peter pan', data)
|
30
|
+
|
31
|
+
# begin
|
32
|
+
# puts Reedb.active_vaults['default'].read_file('Peter pan')
|
33
|
+
# rescue
|
34
|
+
# puts "This error was handled: could not read!"
|
35
|
+
# end
|
36
|
+
|
37
|
+
|
38
|
+
# begin
|
39
|
+
# Reedb.active_vaults['default'].remove_file('Peter pan')
|
40
|
+
# rescue
|
41
|
+
# puts "This error was handled: could not remove!"
|
42
|
+
# end
|
43
|
+
|
44
|
+
|
45
|
+
|
46
|
+
# begin
|
47
|
+
# Reedb.vault(name='default', "#{path}", :aes).secure_config(true).create(user_pw)
|
48
|
+
|
49
|
+
# sample_data = {}
|
50
|
+
# sample_data['header'] = {}
|
51
|
+
# sample_data['header']['name'] = "Sample"
|
52
|
+
# sample_data['header']['category'] = "Unsorted"
|
53
|
+
# sample_data['body'] = {}
|
54
|
+
# sample_data['body']['username'] = "spacekookie"
|
55
|
+
# sample_data['body']['password'] = 'the_flying_unicorn_shits_rainbows'
|
56
|
+
|
57
|
+
# Reedb.active_vaults['default'].insert('Sample', sample_data)
|
58
|
+
|
59
|
+
# rescue
|
60
|
+
# puts "Error occured opening your vault. Does it exist?"
|
61
|
+
# end
|
62
|
+
|
63
|
+
# puts Reedb.active_vaults['default'].read_file('Peter Pan')
|
64
|
+
# Reedb.active_vaults['default'].close
|
metadata
ADDED
@@ -0,0 +1,209 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: reedb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.10.rc1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Lonely Robot
|
8
|
+
- Katharina Sabel
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2015-05-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '1.7'
|
21
|
+
type: :development
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "~>"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '1.7'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: rake
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - "~>"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '10.0'
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "~>"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '10.0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: aes
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0.5'
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0.5'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: twofish
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - "~>"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '1.0'
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '1.0'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: digest-tiger
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - "~>"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '1.0'
|
77
|
+
type: :runtime
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '1.0'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: json
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - "~>"
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '1.8'
|
91
|
+
type: :runtime
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - "~>"
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '1.8'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: daemons
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - "~>"
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '1.2'
|
105
|
+
type: :runtime
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - "~>"
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '1.2'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: sinatra
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - "~>"
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '1.4'
|
119
|
+
type: :runtime
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - "~>"
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '1.4'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: hashids
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - "~>"
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '1.0'
|
133
|
+
type: :runtime
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - "~>"
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '1.0'
|
140
|
+
description: Ruby storage containers/ database. Uses Rinjdael, Twofish, ... to keep
|
141
|
+
your data safe. Made for native and local application development. Spawns a system
|
142
|
+
daemon that manages vaults that applications can talk to.
|
143
|
+
email:
|
144
|
+
- sabel.katharina@gmail.com
|
145
|
+
executables:
|
146
|
+
- reedbd
|
147
|
+
extensions: []
|
148
|
+
extra_rdoc_files: []
|
149
|
+
files:
|
150
|
+
- ".ruby-gemset"
|
151
|
+
- ".ruby-version"
|
152
|
+
- Gemfile
|
153
|
+
- Gemfile.lock
|
154
|
+
- Rakefile
|
155
|
+
- bin/reedbd
|
156
|
+
- lib/reedb.rb
|
157
|
+
- lib/reedb/config.rb
|
158
|
+
- lib/reedb/constants.rb
|
159
|
+
- lib/reedb/daemon_wrapper.rb
|
160
|
+
- lib/reedb/datafile.rb
|
161
|
+
- lib/reedb/errors/daemon_errors.rb
|
162
|
+
- lib/reedb/errors/encryption_errors.rb
|
163
|
+
- lib/reedb/errors/vault_errors.rb
|
164
|
+
- lib/reedb/reevault.rb
|
165
|
+
- lib/reedb/security/aes.rb
|
166
|
+
- lib/reedb/security/encryption.rb
|
167
|
+
- lib/reedb/security/multifish.rb
|
168
|
+
- lib/reedb/security/secure_hash.rb
|
169
|
+
- lib/reedb/security/twofish.rb
|
170
|
+
- lib/reedb/utils/logger.rb
|
171
|
+
- lib/reedb/utils/meta_vault.rb
|
172
|
+
- lib/reedb/utils/sorting.rb
|
173
|
+
- lib/reedb/utils/utilities.rb
|
174
|
+
- lib/reedb/utils/uuids.rb
|
175
|
+
- lib/reedb/utils/version.rb
|
176
|
+
- reedb.gemspec
|
177
|
+
- tests/daemons/reedb.rb
|
178
|
+
- tests/layout.rb
|
179
|
+
- tests/networking/client.rb
|
180
|
+
- tests/networking/server.rb
|
181
|
+
- tests/play.rb
|
182
|
+
- tests/serialisation.rb
|
183
|
+
- tests/tests.rb
|
184
|
+
homepage: https://github.com/tr-lonelyrobot/reedb/wiki
|
185
|
+
licenses:
|
186
|
+
- LGPL v3.0
|
187
|
+
metadata: {}
|
188
|
+
post_install_message:
|
189
|
+
rdoc_options: []
|
190
|
+
require_paths:
|
191
|
+
- lib
|
192
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
193
|
+
requirements:
|
194
|
+
- - ">="
|
195
|
+
- !ruby/object:Gem::Version
|
196
|
+
version: '0'
|
197
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - ">"
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: 1.3.1
|
202
|
+
requirements: []
|
203
|
+
rubyforge_project:
|
204
|
+
rubygems_version: 2.4.6
|
205
|
+
signing_key:
|
206
|
+
specification_version: 4
|
207
|
+
summary: Ruby storage containers/ database that uses completely encrpypted files for
|
208
|
+
maximum security.
|
209
|
+
test_files: []
|