revenc 0.1.2

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.
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