revenc 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/.document +5 -0
  2. data/.gitattributes +1 -0
  3. data/.gitignore +30 -0
  4. data/CLONING.rdoc +108 -0
  5. data/LICENSE +20 -0
  6. data/README.rdoc +198 -0
  7. data/Rakefile +64 -0
  8. data/VERSION +1 -0
  9. data/bin/revenc +81 -0
  10. data/config/cucumber.yml +7 -0
  11. data/examples/rsync/encrypted_data/key/encfs6.xml +35 -0
  12. data/examples/rsync/revenc.conf +18 -0
  13. data/examples/rsync/scripts/passphrase +1 -0
  14. data/examples/rsync/unencrypted_data/test_file1.txt +1 -0
  15. data/examples/rsync/unencrypted_data/test_file2.txt +1 -0
  16. data/examples/simple/encfs6.xml +35 -0
  17. data/examples/simple/passphrase +1 -0
  18. data/examples/simple/unencrypted_data/test_file1.txt +1 -0
  19. data/examples/simple/unencrypted_data/test_file2.txt +1 -0
  20. data/features/app.feature +59 -0
  21. data/features/bin.feature +35 -0
  22. data/features/configuration.feature +98 -0
  23. data/features/copy.feature +169 -0
  24. data/features/generator.feature +15 -0
  25. data/features/mount.feature +133 -0
  26. data/features/step_definitions/.gitignore +0 -0
  27. data/features/step_definitions/revenc_steps.rb +64 -0
  28. data/features/support/aruba.rb +21 -0
  29. data/features/support/env.rb +4 -0
  30. data/features/support/hooks.rb +6 -0
  31. data/features/unmount.feature +58 -0
  32. data/lib/revenc/app.rb +128 -0
  33. data/lib/revenc/encfs_wrapper.rb +96 -0
  34. data/lib/revenc/errors.rb +78 -0
  35. data/lib/revenc/io.rb +265 -0
  36. data/lib/revenc/lockfile.rb +66 -0
  37. data/lib/revenc.rb +22 -0
  38. data/spec/revenc/error_spec.rb +50 -0
  39. data/spec/revenc/io_spec.rb +185 -0
  40. data/spec/revenc/lockfile_spec.rb +44 -0
  41. data/spec/spec.opts +2 -0
  42. data/spec/spec_helper.rb +16 -0
  43. data/spec/watchr.rb +142 -0
  44. metadata +179 -0
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.gitattributes ADDED
@@ -0,0 +1 @@
1
+ *.rb diff=ruby
data/.gitignore ADDED
@@ -0,0 +1,30 @@
1
+ ## mac os
2
+ .DS_Store
3
+
4
+ ## textmate
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## emacs
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## vim
14
+ *.swp
15
+
16
+ ## project::general
17
+ coverage
18
+ rdoc
19
+ pkg
20
+ *.gemspec
21
+
22
+ ## cucumber
23
+ rerun.txt
24
+
25
+ ## ctags
26
+ tags
27
+
28
+ ## project::specific
29
+ tmp/fixtures
30
+ tmp/aruba
data/CLONING.rdoc ADDED
@@ -0,0 +1,108 @@
1
+ = Cloning from BasicApp
2
+
3
+ BasicApp provides no stand-alone functionality. It purpose is to
4
+ provide a repository for jump-starting a new RubyGem based CLI
5
+ application and provide a point to cloned applications to facilitate
6
+ pulling in future enhancements and fixes.
7
+
8
+ == Features/Dependencies
9
+
10
+ * Jeweler for RubyGem management http://github.com/technicalpickles/jeweler
11
+ * Rspec for unit testing http://github.com/dchelimsky/rspec
12
+ * Cucumber for functional testing http://github.com/tpope/vim-cucumber
13
+ * Aruba for CLI testing http://github.com/aslakhellesoy/aruba
14
+
15
+ == Jump-starting a new project with BasicApp
16
+
17
+ The following steps illustrate creating a new application called "oct." Oct
18
+ is a simple command line utility that prints file listing permissions in octal
19
+ notation.
20
+
21
+ cd ~/workspace
22
+ git clone git://github.com/robertwahler/basic_app.git oct
23
+ cd oct
24
+
25
+ === Setup repository for cloned project
26
+
27
+ We are going to change the origin URL to our own server and setup a remote
28
+ for pulling in future BasicApp changes. If our own repo is setup at
29
+ git@red:oct.git, change the URL with sed:
30
+
31
+ sed -i 's/url =.*\.git$/url = git@red:oct.git/' .git/config
32
+
33
+ Push it up
34
+
35
+ git push origin master:refs/heads/master
36
+
37
+ Add BasicApp as remote
38
+
39
+ git remote add basic_app git://github.com/robertwahler/basic_app.git
40
+
41
+ === Rename your application
42
+
43
+ We need to change the name of the application from basic_app to oct
44
+
45
+ git mv bin/basic_app bin/oct
46
+ git mv lib/basic_app.rb lib/oct.rb
47
+ git mv lib/basic_app lib/oct
48
+
49
+ # BasicApp => Oct
50
+ find ./bin -type f -exec sed -i 's/BasicApp/Oct/' '{}' +
51
+ find . -name *.rb -exec sed -i 's/BasicApp/Oct/' '{}' +
52
+ find . -name Rakefile -exec sed -i 's/BasicApp/Oct/' '{}' +
53
+ # basic_app => oct
54
+ find ./bin -type f -exec sed -i 's/basic_app/oct/' '{}' +
55
+ find ./spec -type f -exec sed -i 's/basic_app/oct/' '{}' +
56
+ find . -name *.rb -exec sed -i 's/basic_app/oct/' '{}' +
57
+ find . -name *.feature -exec sed -i 's/basic_app/oct/' '{}' +
58
+ find . -name Rakefile -exec sed -i 's/basic_app/oct/' '{}' +
59
+
60
+ Replace TODO's and update documentation
61
+
62
+ * Replace README.rdoc
63
+ * Replace LICENSE
64
+ * (OPTIONAL) git rm CLONING.rdoc
65
+ * Replace the TODO's in Rakefile and bin
66
+
67
+ Application should now be functional, lets test it
68
+
69
+ cucumber
70
+
71
+ Looks OK, commit it
72
+
73
+ git commit -a -m "renamed basic_app to oct"
74
+
75
+ == Merging of future BasicApp changes
76
+
77
+ Cherry picking method
78
+
79
+ git fetch basic_app
80
+ git cherry-pick a0f9745
81
+
82
+ Merge 2-step method
83
+
84
+ git fetch basic_app
85
+ git merge basic_app/master
86
+
87
+ Trusting pull of HEAD
88
+
89
+ git pull basic_app HEAD
90
+
91
+ Conflicted?
92
+
93
+ git mergetool
94
+ git commit
95
+
96
+ == Note on Patches/Pull Requests
97
+
98
+ * Fork the project.
99
+ * Make your feature addition or bug fix.
100
+ * Add tests for it. This is important so I don't break it in a
101
+ future version unintentionally.
102
+ * Commit, do not mess with rakefile, version, or history.
103
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
104
+ * Send me a pull request. Bonus points for topic branches.
105
+
106
+ == Copyright
107
+
108
+ Copyright (c) 2010 GearheadForHire, LLC. See LICENSE for details.
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 GearheadForHire, LLC
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,198 @@
1
+ = Revenc
2
+
3
+ Mount an unencrypted folder as encrypted using EncFS and copy/synchronize the
4
+ encrypted files to untrusted destinations using rsync/cp
5
+
6
+ == Background
7
+
8
+ EncFS in reverse mode facilitates mounting an encrypted file system
9
+ from an unencrypted source folder. This allows keeping your files unencrypted
10
+ in a trusted environment while gaining the ability to encrypt on demand
11
+ i.e. when you want to rsync encrypted files off-site to an untrusted system.
12
+
13
+ == Why Revenc?
14
+
15
+ Revenc facilitates scripting EncFS reverse mounting and synchronizing by
16
+ providing a configuration framework and validating mounts before running tools
17
+ like rsync.
18
+
19
+ === Benefits
20
+
21
+ * Provides conventions for EncFS reverse mounting
22
+ * Validates mountpoints before copying to prevent "rsync --delete" commands
23
+ from trying to sync empty folders
24
+ * Mount, unmount, and copy actions are protected by a mutex to prevent
25
+ recursion on long running copy/sync operations. (mount, unmount and
26
+ copy actions will fail if another instance of revenc is blocking)
27
+ * Allow short, easy to remember command lines when used with configuration files.
28
+ i.e. revenc mount, revenc unmount, revenc copy
29
+
30
+ == Installation
31
+
32
+ sudo gem install revenc
33
+
34
+ == Usage
35
+
36
+ revenc action [options]
37
+
38
+ === Actions
39
+
40
+ ==== Mount
41
+
42
+ Reverse mount using EncFS. Source and mountpoint are not required when
43
+ using a configuration file.
44
+
45
+ Mount: revenc mount <unencrypted source> <empty mountpoint>
46
+
47
+ This calls the executable "encfs" with the following by default:
48
+
49
+ cat <%= passphrasefile.name %> | ENCFS6_CONFIG=<%= keyfile.name %> \
50
+ <%= executable %> --stdinpass --reverse <%= source.name %> \
51
+ <%= mountpoint.name %> -- -o ro
52
+
53
+ ==== Unmount
54
+
55
+ Unmount using EncFS. Mountpoint is required when specified by revenc.conf.
56
+
57
+ Unmount: revenc unmount <mountpoint>
58
+
59
+ This calls the executable "fusermount" with the following by default:
60
+
61
+ <%= executable %> -u <%= mountpoint.name %>
62
+
63
+ ==== Copy
64
+
65
+ Recursive copy with "cp -r", for rsync copy, see examples. Source and destination
66
+ are not required when specified by revenc.conf.
67
+
68
+ Copy: revenc copy <source> <destination>
69
+
70
+ This calls the executable "cp" with the following by default:
71
+
72
+ <%= executable %> -r <%= source.name %> <%= destination.name %>
73
+
74
+ === Setup
75
+
76
+ The following is a walk through of the steps used to create the example project
77
+ "simple" in the examples folder.
78
+
79
+ mkdir -p revenc/examples/simple/encrypted_mountpoint
80
+ mkdir -p revenc/examples/simple/unencrypted_data
81
+ mkdir -p revenc/examples/simple/copy_destination
82
+
83
+ cd revenc/examples/simple
84
+
85
+ echo "some stuff" > unencrypted_data/test_file1.txt
86
+ echo "some more stuff" > unencrypted_data/test_file2.txt
87
+
88
+ === Create the EncFS passphrase file
89
+
90
+ You must supply EncFS with a passphrase in plain text. The passphrase is piped in on the command line
91
+ to EncFS. This file can be stored anywhere on your trusted system. Revenc expects it in the
92
+ current folder, use revenc.conf to supply a different location.
93
+
94
+ echo "my_super_secret_PassPHRase" > passphrase
95
+ chmod 600 passphrase
96
+
97
+ === Generate the EncFS key file
98
+
99
+ Generation of your key file is done once. The same key is used for each mount action on the same
100
+ unencrypted source folder. You need to keep a copy of your key available in order to restore encrypted files.
101
+ EncFS doesn't supply a method to fully automate the generation of the key file with so it needs
102
+ to be done manually.
103
+
104
+ NOTE: The ENCFS6_CONFIG var is needed to control where the key file is created. The "${PWD}" is
105
+ used because EncFS expects full paths from the root folder.
106
+
107
+ ENCFS6_CONFIG=./encfs6.xml encfs --reverse ${PWD}/unencrypted_data ${PWD}/encrypted_mountpoint -- -o ro
108
+
109
+ You will see a message about encfs6.xml failing to load, this is OK. You should now be at the EncFS
110
+ command prompt. You can complete the key generation any way you like. The following are the responses
111
+ used to generate the sample key. Note the I opted to store filenames in plain text for clarity.
112
+
113
+ EncFS command prompt responses:
114
+
115
+ x # expert mode
116
+ 1 # AES
117
+ 128 # key size
118
+ 1024 # block size
119
+ 2 # Null => no encryption of filenames
120
+ my_super_secret_PassPHRase # passphrase we stored in the step above
121
+ my_super_secret_PassPHRase # confirm passphrase
122
+
123
+
124
+ EncFS should generate encfs6.xml, mount the folder and return you to the command prompt. You can
125
+ now work with your encrypted files.
126
+
127
+ ls encrypted_mountpoint
128
+
129
+ test_file1.txt test_file2.txt
130
+
131
+ revenc unmount encrypted_mountpoint
132
+ ls encrypted_mountpoint
133
+
134
+ <no files here>
135
+
136
+ revenc mount unencrypted_data encrypted_mountpoint
137
+ ls encrypted_mountpoint
138
+
139
+ test_file1.txt test_file2.txt
140
+
141
+
142
+ revenc copy encrypted_mountpoint copy_to_destination
143
+ ls copy_to_destination
144
+
145
+ test_file1.txt test_file2.txt
146
+
147
+
148
+ === Configuration files
149
+
150
+ Revenc expects a passphrase file and the key file "encfs6.xml" to exist in the
151
+ current folder. You can override these locations using the revenc.conf file. Revenc
152
+ looks for its configuration file in the current folder. When you use configuration file,
153
+ you can ommit action parameters. For example:
154
+
155
+ cd examples/rsync
156
+
157
+ revenc mount
158
+ revenc copy
159
+ revenc unmount
160
+
161
+ The configuration file is YAML http://www.yaml.org/ format with ERB processing. You must
162
+ escape ERB in the action commands. These need to be lazy loaded by Revenc. Unescaped
163
+ ERB is evaluated as the configuration file is read but before Revenc parses the commands.
164
+ See the example configuration file examples/rsync/revenc.conf.
165
+
166
+ The file features/configuration.feature has more details.
167
+
168
+
169
+ == System Requirements
170
+
171
+ * POSIX system
172
+ * EncFS http://www.arg0.net/encfs
173
+
174
+ == Runtime Dependencies
175
+
176
+ * term-ansicolor
177
+ * configatron
178
+
179
+ == Development Dependencies
180
+
181
+ * rspec for unit testing http://github.com/dchelimsky/rspec
182
+ * cucumber for functional testing http://github.com/tpope/vim-cucumber
183
+ * aruba for CLI testing http://github.com/aslakhellesoy/aruba
184
+
185
+ == Note on Patches/Pull Requests
186
+
187
+ * Fork the project.
188
+ * Make your feature addition or bug fix.
189
+ * Add tests for it. This is important so I don't break it in a
190
+ future version unintentionally.
191
+ * Commit, do not mess with rakefile, version, or history.
192
+ (if you want to have your own version, that is fine but bump version
193
+ in a commit by itself I can ignore when I pull)
194
+ * Send me a pull request. Bonus points for topic branches.
195
+
196
+ == Copyright
197
+
198
+ Copyright (c) 2010 GearheadForHire, LLC. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,64 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "revenc"
8
+ gem.summary = %Q{Helper for reverse mounting encrypted file systems}
9
+ gem.description = %Q{Mount, unmount, and copy/synchronize encrypted files to
10
+ untrusted destinations using EncFS and rsync}
11
+ gem.email = "robert@gearheadforhire.com"
12
+ gem.homepage = "http://github.com/robertwahler/revenc"
13
+ gem.authors = ["Robert Wahler"]
14
+
15
+ gem.add_dependency 'term-ansicolor', '>= 1.0.4'
16
+ gem.add_dependency 'configatron', '>= 2.5.1'
17
+
18
+ gem.add_development_dependency "rspec", ">= 1.2.9"
19
+ gem.add_development_dependency "cucumber", ">= 0.6"
20
+ gem.add_development_dependency "aruba", ">= 0.1.7"
21
+
22
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
23
+ end
24
+ Jeweler::GemcutterTasks.new
25
+ rescue LoadError
26
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
27
+ end
28
+
29
+ require 'spec/rake/spectask'
30
+ Spec::Rake::SpecTask.new(:spec) do |spec|
31
+ spec.libs << 'lib' << 'spec'
32
+ spec.spec_files = FileList['spec/**/*_spec.rb']
33
+ end
34
+
35
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
36
+ spec.libs << 'lib' << 'spec'
37
+ spec.pattern = 'spec/**/*_spec.rb'
38
+ spec.rcov = true
39
+ end
40
+
41
+ task :spec => :check_dependencies
42
+
43
+ begin
44
+ require 'cucumber/rake/task'
45
+ Cucumber::Rake::Task.new(:features)
46
+
47
+ task :features => :check_dependencies
48
+ rescue LoadError
49
+ task :features do
50
+ abort "Cucumber is not available. In order to run features, you must: sudo gem install cucumber"
51
+ end
52
+ end
53
+
54
+ task :default => :spec
55
+
56
+ require 'rake/rdoctask'
57
+ Rake::RDocTask.new do |rdoc|
58
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
59
+
60
+ rdoc.rdoc_dir = 'rdoc'
61
+ rdoc.title = "Revenc #{version}"
62
+ rdoc.rdoc_files.include('README*')
63
+ rdoc.rdoc_files.include('lib/**/*.rb')
64
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.2
data/bin/revenc ADDED
@@ -0,0 +1,81 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
4
+
5
+ require 'revenc'
6
+ require 'optparse'
7
+ require 'term/ansicolor'
8
+
9
+ available_actions = Revenc::AVAILABLE_ACTIONS
10
+
11
+ banner = <<BANNER
12
+ Revenc is an encfs helper
13
+
14
+ Usage: revenc action [options]
15
+ BANNER
16
+ banner << "\nActions: #{available_actions.join(' ')}\n" unless available_actions.empty?
17
+
18
+ help = banner
19
+ help += <<HELP
20
+ Mount: revenc mount <unencrypted source> <empty mountpoint>
21
+ Unmount: revenc unmount <mounted encypted folder>
22
+ Copy: revenc copy <encrypted source> <destination>
23
+ Note: Copying is normally done via rsync
24
+
25
+ Options:
26
+
27
+ HELP
28
+
29
+ options = {}
30
+ OptionParser.new do |opts|
31
+ opts.banner = help
32
+
33
+ # set defaults
34
+ options[:verbose] = false
35
+ options[:coloring] = true
36
+
37
+ opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
38
+ options[:verbose] = v
39
+ end
40
+
41
+ opts.on("-c", "--[no-]coloring", "Ansi color in output") do |c|
42
+ options[:coloring] = c
43
+ end
44
+
45
+ opts.on("--version", "Display current version") do
46
+ puts "revenc, version " + Revenc.version
47
+ exit 0
48
+ end
49
+
50
+ opts.on("-d", "--dry-run", "Run action but omit the final execute step. Useful combined with --verbose") do |d|
51
+ options[:dry_run] = d
52
+ end
53
+
54
+ opts.on("--config FILE", "Load configuration options from FILE") do |file|
55
+ options[:config] = file
56
+ end
57
+
58
+ # no argument, shows at tail. This will print an options summary.
59
+ opts.on_tail("-h", "--help", "Show this message") do
60
+ puts opts
61
+ exit 0
62
+ end
63
+
64
+ begin
65
+ opts.parse!
66
+ rescue OptionParser::InvalidOption => e
67
+ puts "revenc #{e}"
68
+ puts "revenc --help for more information"
69
+ exit 1
70
+ end
71
+
72
+ end
73
+
74
+ if STDOUT.isatty
75
+ Term::ANSIColor::coloring = options[:coloring]
76
+ else
77
+ Term::ANSIColor::coloring = false
78
+ end
79
+
80
+ app = Revenc::App.new(FileUtils.pwd, options)
81
+ app.run
@@ -0,0 +1,7 @@
1
+ <%
2
+ rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : ""
3
+ rerun_opts = rerun.to_s.strip.empty? ? "--format pretty features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}"
4
+ std_opts = "#{rerun_opts} --format rerun --out rerun.txt --strict --tags ~@wip"
5
+ %>
6
+ default: <%= std_opts %> --no-diff
7
+ wip: --tags @wip:3 --wip features
@@ -0,0 +1,35 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
2
+ <!DOCTYPE boost_serialization>
3
+ <boost_serialization signature="serialization::archive" version="4">
4
+ <config class_id="0" tracking_level="1" version="20080816" object_id="_0">
5
+ <creator>EncFS 1.5</creator>
6
+ <cipherAlg class_id="1" tracking_level="0" version="0">
7
+ <name>ssl/aes</name>
8
+ <major>2</major>
9
+ <minor>2</minor>
10
+ </cipherAlg>
11
+ <nameAlg>
12
+ <name>nameio/null</name>
13
+ <major>1</major>
14
+ <minor>0</minor>
15
+ </nameAlg>
16
+ <keySize>128</keySize>
17
+ <blockSize>1024</blockSize>
18
+ <uniqueIV>0</uniqueIV>
19
+ <chainedNameIV>0</chainedNameIV>
20
+ <externalIVChaining>0</externalIVChaining>
21
+ <blockMACBytes>0</blockMACBytes>
22
+ <blockMACRandBytes>0</blockMACRandBytes>
23
+ <allowHoles>1</allowHoles>
24
+ <encodedKeySize>36</encodedKeySize>
25
+ <encodedKeyData>
26
+ unVmAfPQFd5t4cakBxbE7uosu4tzZbo8B513iGGNynzArOKM=
27
+ </encodedKeyData>
28
+ <saltLen>20</saltLen>
29
+ <saltData>
30
+ IcFy11sZw/w7juCI+Cro8AZVp6Q
31
+ </saltData>
32
+ <kdfIterations>97493</kdfIterations>
33
+ <desiredKDFDuration>500</desiredKDFDuration>
34
+ </config>
35
+ </boost_serialization>
@@ -0,0 +1,18 @@
1
+ mount:
2
+ source:
3
+ name: unencrypted_data
4
+ mountpoint:
5
+ name: encrypted_data/mountpoint
6
+ passphrasefile:
7
+ name: scripts/passphrase
8
+ keyfile:
9
+ name: encrypted_data/key/encfs6.xml
10
+ cmd: cat <%%= passphrasefile.name %> | ENCFS6_CONFIG=<%%= keyfile.name %> <%%= executable %> --stdinpass --reverse <%%= source.name %> <%%= mountpoint.name %> -- -o ro
11
+ copy:
12
+ source:
13
+ name: encrypted_data # sync the encrypted data as well as the key
14
+ destination:
15
+ name: copy_destination # could be a remote host instead of a folder, i.e. user1@example.com:backups/here
16
+ executable: rsync
17
+ cmd: <%%= executable %> --perms --links --times --recursive --verbose --compress --stats --human-readable --inplace <%%= source.name %> <%%= destination.name %>
18
+
@@ -0,0 +1 @@
1
+ test
@@ -0,0 +1 @@
1
+ some stuff
@@ -0,0 +1 @@
1
+ some more stuff
@@ -0,0 +1,35 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
2
+ <!DOCTYPE boost_serialization>
3
+ <boost_serialization signature="serialization::archive" version="4">
4
+ <config class_id="0" tracking_level="1" version="20080816" object_id="_0">
5
+ <creator>EncFS 1.5</creator>
6
+ <cipherAlg class_id="1" tracking_level="0" version="0">
7
+ <name>ssl/aes</name>
8
+ <major>2</major>
9
+ <minor>2</minor>
10
+ </cipherAlg>
11
+ <nameAlg>
12
+ <name>nameio/null</name>
13
+ <major>1</major>
14
+ <minor>0</minor>
15
+ </nameAlg>
16
+ <keySize>128</keySize>
17
+ <blockSize>1024</blockSize>
18
+ <uniqueIV>0</uniqueIV>
19
+ <chainedNameIV>0</chainedNameIV>
20
+ <externalIVChaining>0</externalIVChaining>
21
+ <blockMACBytes>0</blockMACBytes>
22
+ <blockMACRandBytes>0</blockMACRandBytes>
23
+ <allowHoles>1</allowHoles>
24
+ <encodedKeySize>36</encodedKeySize>
25
+ <encodedKeyData>
26
+ BjZ2dl0VE8ezDBvAwgxLo1ODmnrLlawYrlfhG8Fe3wcQBzZu=
27
+ </encodedKeyData>
28
+ <saltLen>20</saltLen>
29
+ <saltData>
30
+ tPmiXlNgrbvvSlnGcqe4aCjGWGY
31
+ </saltData>
32
+ <kdfIterations>83342</kdfIterations>
33
+ <desiredKDFDuration>500</desiredKDFDuration>
34
+ </config>
35
+ </boost_serialization>
@@ -0,0 +1 @@
1
+ my_super_secret_PassPHRase
@@ -0,0 +1 @@
1
+ some stuff
@@ -0,0 +1 @@
1
+ some more stuff