lenc 1.1.3 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -678,6 +678,7 @@ end
678
678
  def simple_str(s)
679
679
  if s.encoding.name != 'ASCII-8BIT' && s.encoding.name != 'UTF-8'
680
680
  pr("string [%s]\n encoding is %s,\n expected ASCII-8BIT\n",s,s.encoding.name)
681
+ pr("ruby version = #{RUBY_VERSION}\n")
681
682
  assert!(false)
682
683
  end
683
684
  end
@@ -703,6 +704,27 @@ def windows?
703
704
  $__windows__
704
705
  end
705
706
 
707
+ # Make a system call
708
+ #
709
+ # @param cmd command to execute
710
+ # @param abort_if_problem if return code is nonzero, aborts
711
+ # @return [captured output, return code]
712
+ #
713
+ def scall(cmd, abort_if_problem = true)
714
+ # printf("...(making system call: #{cmd} )...\n")
715
+
716
+ res = `#{cmd} 2>&1`
717
+ succ = $?.success?
718
+ if !succ && abort_if_problem
719
+ puts("Failed system call '#{cmd}':\n\n#{res}")
720
+ exit
721
+ end
722
+
723
+ [res, succ]
724
+ end
725
+
726
+
727
+
706
728
  # Mark all constants ending with '_' as private constants
707
729
  #
708
730
  # @param entity the class to examine
@@ -4,13 +4,17 @@ require_relative '../lib/lenc/tools.rb'
4
4
  req('repo lencrypt')
5
5
 
6
6
 
7
- #SINGLETEST = "test_101_update_repo_with_verify"
7
+ #SINGLETEST = "test_121_update_repo_with_lencrypt_program"
8
8
  if defined? SINGLETEST
9
9
  if main?(__FILE__)
10
10
  ARGV.concat("-n #{SINGLETEST}".split)
11
11
  end
12
12
  end
13
13
 
14
+ # Enable to display verbose output
15
+ #ARGV.concat("-v")
16
+
17
+
14
18
  class RepoTest < MyTestSuite
15
19
 
16
20
  include LEnc
@@ -32,6 +36,7 @@ class RepoTest < MyTestSuite
32
36
  mkdir(@@testDir)
33
37
 
34
38
  @@sourceDir = File.join(@@testDir,"__source__")
39
+ @@sourceDir2 = File.join(@@testDir,"ip")
35
40
  @@encryptDir = File.join(@@testDir,"__encrypted__")
36
41
  @@recoverDir = File.join(@@testDir,"__recovered__")
37
42
  @@repoFile = File.join(@@sourceDir,Repo::LENC_REPO_FILENAME)
@@ -41,7 +46,7 @@ class RepoTest < MyTestSuite
41
46
  if !File.directory?(@@sourceDir)
42
47
  create_source_tree()
43
48
  end
44
-
49
+
45
50
  clean()
46
51
 
47
52
  # Construct a list of the source subdirectories, since some of them have
@@ -144,18 +149,18 @@ class RepoTest < MyTestSuite
144
149
  pluto|
145
150
  SCR
146
151
 
147
- # Script of predetermined file lengths:
152
+ # Script of predetermined file lengths:
148
153
  cs = RepoInternal::CHUNK_SIZE_ENCR
149
154
  hs = RepoInternal::CHUNK_HEADER_SIZE
150
155
  flens = [0, cs - 1, cs, cs + 1, cs + hs - 1, cs + hs, cs + hs + 1,
151
- (2 * cs) - 1, 2 * cs, 2 * cs + 1, 2 * (cs + hs) - 1, 2 * (cs + hs), 2 * (cs + hs) + 1]
156
+ (2 * cs) - 1, 2 * cs, 2 * cs + 1, 2 * (cs + hs) - 1, 2 * (cs + hs), 2 * (cs + hs) + 1]
152
157
  fNum = 0
153
-
158
+
154
159
  srand(1983)
155
-
156
- dr = @@sourceDir
160
+
161
+ dr = @@sourceDir
157
162
  mkdir(dr)
158
-
163
+
159
164
  dirStack = []
160
165
  k = 0
161
166
  k0 = k
@@ -163,29 +168,36 @@ SCR
163
168
  c = scr[k]
164
169
  k += 1
165
170
  next if !"|/^".index(c)
166
-
171
+
167
172
  nm = scr[k0...k-1].strip
168
-
173
+
169
174
  k0 = k
170
-
171
- if c == '|'
175
+
176
+ if c == '|'
172
177
  # create a file; use our predetermined lengths, if we still have some;
173
178
  # otherwise, choose a random file length
174
179
  if fNum < flens.size
175
180
  j = flens[fNum]
176
- else
181
+ else
177
182
  j = (rand() * rand() * 130000).to_i + 3
178
183
  end
184
+
185
+ # Make the length end with a particular sequence of digits so we can quickly determine whether
186
+ # file has been encrypted or decrypted
187
+ q = (j - 11) % 100
188
+ j -= q
189
+ j += 100 if j <= 0
190
+
179
191
  fNum += 1
180
192
  makeFile(File.join(dr, nm), j)
181
193
  elsif c == '/'
182
- dirStack.push(dr)
183
- dr = File.join(dr,nm)
184
- mkdir(dr)
185
- elsif c == '^'
186
- dr = dirStack.pop
187
- end
188
- end
194
+ dirStack.push(dr)
195
+ dr = File.join(dr,nm)
196
+ mkdir(dr)
197
+ elsif c == '^'
198
+ dr = dirStack.pop
199
+ end
200
+ end
189
201
 
190
202
  # Store some .lencignore files
191
203
  dr = @@sourceDir
@@ -199,6 +211,18 @@ end
199
211
  end
200
212
 
201
213
 
214
+ # Create in-place source tree as copy of normal source tree
215
+ def create_source_tree2
216
+ if !File.exist?(@@sourceDir2)
217
+ remove_file_or_dir(@@sourceDir2)
218
+ FileUtils.cp_r(@@sourceDir,@@sourceDir2)
219
+ end
220
+ remove_file_or_dir(File.join(@@sourceDir2,".lenc"))
221
+ end
222
+
223
+
224
+
225
+
202
226
  def writeIgnore(dr, contents)
203
227
  pth = File.join(dr,Repo::IGNOREFILENAME)
204
228
  File.open(pth,'w') do |f|
@@ -210,7 +234,8 @@ end
210
234
  if args.is_a? String
211
235
  args = args.split
212
236
  end
213
- args.concat(["-w", @@sourceDir, "-q"])
237
+ args.concat(["-w", @@sourceDir])
238
+ args.concat(["-q"])
214
239
  LEncApp.new().run(args)
215
240
  end
216
241
 
@@ -234,14 +259,14 @@ end
234
259
 
235
260
  def update_repo(silent = true)
236
261
  rp = build_repo_obj(silent)
237
- rp.open(@@sourceDir)
238
- rp.perform_update
262
+ rp.open(@@sourceDir,@@key)
263
+ rp.perform_encrypt
239
264
  rp.close
240
265
  end
241
266
 
242
267
  def do_recover
243
268
  rp = build_repo_obj
244
- rp.perform_recovery(@@key, @@encryptDir,@@recoverDir)
269
+ rp.perform_recovery(@@key, @@encryptDir, @@recoverDir)
245
270
  rp.close
246
271
  end
247
272
 
@@ -304,25 +329,25 @@ end
304
329
  end
305
330
 
306
331
  # Create repo using lencrypt program
307
- def test_101_create_repo
332
+ def test_101_create_repo_with_lencrypt_program
308
333
  clean
309
- a = "-i #{@@key} #{@@encryptDir} --storekey"
334
+ a = "--init #{@@encryptDir} --key #{@@key}"
310
335
  ex(a)
311
336
  end
312
337
 
313
338
  def test_101_update_repo_with_verify
314
339
  clean
315
- ex("-i #{@@key} #{@@encryptDir} --storekey")
340
+ ex("--init #{@@encryptDir} --key #{@@key}")
316
341
  rp = build_repo_obj
317
- rp.open(@@sourceDir)
318
- rp.perform_update(true)
342
+ rp.open(@@sourceDir,@@key)
343
+ rp.perform_encrypt()
319
344
  rp.close
320
345
  end
321
346
 
322
347
  def test_110_open_repo_using_Repo_class
323
348
  # (assumes repo exists at this point; preceding test creates it)
324
349
  rp = build_repo_obj
325
- rp.open(@@sourceDir)
350
+ rp.open(@@sourceDir,@@key)
326
351
  end
327
352
 
328
353
  def test_120_update_repo_using_Repo_class
@@ -331,8 +356,11 @@ end
331
356
  end
332
357
 
333
358
  def test_121_update_repo_with_lencrypt_program
359
+ create_repo
334
360
  remove_file_or_dir(@@encryptDir)
335
- ex("")
361
+
362
+ ex("--key #{@@key}")
363
+
336
364
  assert(File.directory?(@@encryptDir))
337
365
  end
338
366
 
@@ -353,7 +381,7 @@ end
353
381
 
354
382
  def test_200_recover_with_incorrect_password
355
383
  create_repo
356
- ex("") # updates repo
384
+ ex("--key #{@@key}") # updates repo
357
385
  assert_raise(DecryptionError) do
358
386
  remove_file_or_dir(@@recoverDir)
359
387
  rp = build_repo_obj()
@@ -362,4 +390,44 @@ end
362
390
  end
363
391
  end
364
392
 
393
+ def test_300_singular_repo
394
+ create_source_tree2
395
+
396
+ # Create in-place repository
397
+ rp = build_repo_obj
398
+ rp.create(@@sourceDir2,@@key,nil)
399
+ rp.close
400
+
401
+ # Update the repo
402
+ rp = build_repo_obj
403
+ rp.open(@@sourceDir2, @@key)
404
+ rp.perform_encrypt()
405
+ rp.close
406
+
407
+
408
+ end
409
+
410
+ def test_310_singular_encrypt_then_decrypt
411
+
412
+ create_source_tree2
413
+
414
+ # Create in-place repository
415
+ rp = build_repo_obj
416
+ rp.create(@@sourceDir2,@@key,nil)
417
+ rp.close
418
+
419
+ # Update the repo
420
+ rp = build_repo_obj
421
+ rp.open(@@sourceDir2, @@key)
422
+ rp.perform_encrypt()
423
+ rp.close
424
+
425
+ # Try decrypting
426
+ rp = build_repo_obj
427
+ rp.open(@@sourceDir2, @@key)
428
+ rp.perform_decrypt()
429
+ rp.close
430
+ end
431
+
432
+
365
433
  end
metadata CHANGED
@@ -1,22 +1,39 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lenc
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Sember
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-04-15 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2013-05-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: highline
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  description: "Encrypts a set of local files, and copies the encrypted versions to
14
28
  a repository, \nwhich may be located within a free cloud service (Dropbox, Google
15
29
  Drive, Microsoft SkyDrive). \nThe program uses the trusted AES 256-bit encryption
16
30
  standard. \nAll files are encrypted on the user machine; \npasswords and unencrypted
17
- files are never seen by the cloud service. \n"
31
+ files are never seen by the cloud service. \n\nIt can also encrypt or decrypt directory
32
+ trees 'in place', so that the original files are\noverwritten by their encrypted
33
+ versions.\n\n"
18
34
  email: jpsember@gmail.com
19
35
  executables:
36
+ - encr
20
37
  - lencrypt
21
38
  extensions: []
22
39
  extra_rdoc_files: []
@@ -25,10 +42,12 @@ files:
25
42
  - lib/lenc/_OLD_tools.rb
26
43
  - lib/lenc/aes.rb
27
44
  - lib/lenc/config_file.rb
45
+ - lib/lenc/encr.rb
28
46
  - lib/lenc/lencrypt.rb
29
47
  - lib/lenc/repo.rb
30
48
  - lib/lenc/tools.rb
31
49
  - lib/lenc/trollop.rb
50
+ - bin/encr
32
51
  - bin/lencrypt
33
52
  - CHANGELOG.txt
34
53
  - README.md
@@ -53,7 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
53
72
  version: '0'
54
73
  requirements: []
55
74
  rubyforge_project:
56
- rubygems_version: 2.0.2
75
+ rubygems_version: 2.0.0
57
76
  signing_key:
58
77
  specification_version: 4
59
78
  summary: Maintains an encrypted repository of a set of files for secure cloud storage.