shredder 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/README.txt +27 -0
  2. data/lib/shredder.rb +95 -0
  3. metadata +70 -0
@@ -0,0 +1,27 @@
1
+ ### SYNOPSIS ###
2
+
3
+ require 'shredder'
4
+
5
+ # Shreds text.txt into test.f.1, test.f.2, test.f.3
6
+ Shredder::Files.new('test.txt', ['test.f.1','test.f.2','test.f.3'] ).shred
7
+
8
+ # Sews test.f.1, test.f.2, test.f.3 into restored.f.txt
9
+ Shredder::Files.new('restored.f.txt', ['test.f.1','test.f.2','test.f.3'] ).sew
10
+
11
+ # or #
12
+
13
+ # shred streams #
14
+ reader = File.open('test.txt','r')
15
+ writers = []; ['test.s.1','test.s.2','test.s.3'].each{|writer| writers.push(File.open(writer,'wb'))}
16
+ Shredder::Streams.new(reader,writers).shred
17
+ reader.close
18
+ writers.each{|writer| writer.close}
19
+
20
+ # sew streams
21
+ writer = File.open('restored.s.txt','wb')
22
+ readers = []; ['test.s.1','test.s.2','test.s.3'].each{|writer| readers.push(File.open(writer,'r'))}
23
+ Shredder::Streams.new(writer,readers).sew
24
+ writer.close
25
+ readers.each{|reader| reader.close}
26
+
27
+ # Also available, Shredder.shred( writer, readers) and Shredder.sew( reader, writers )
@@ -0,0 +1,95 @@
1
+ module Shredder
2
+ VERSION = '0.0.0'
3
+
4
+ # note that these are streams
5
+ def self.shred(reader,writers,limit=0)
6
+ shreds = writers.length
7
+ xor = count = 0
8
+ while byte = reader.getbyte do
9
+ writers[ count % shreds ].putc byte^xor
10
+ xor = byte
11
+ count += 1
12
+ # note: will not break if limit is zero
13
+ break if count == limit
14
+ end
15
+ return count
16
+ end
17
+
18
+ # note that these are streams
19
+ def self.sew(writer,readers,limit=0)
20
+ shreds = readers.length
21
+ xor = count = 0
22
+ while byte = readers[ count % shreds ].getbyte do
23
+ chr = byte^xor
24
+ xor = chr
25
+ writer.putc chr
26
+ count += 1
27
+ # note: will not break if limit is zero
28
+ break if count == limit
29
+ end
30
+ return count
31
+ end
32
+
33
+ class Streams
34
+ # this one takes streams
35
+ def initialize(sew,shreds,limit=0)
36
+ @sew = sew
37
+ @shreds = shreds
38
+ @limit = limit
39
+ end
40
+
41
+ def shred(limit=@limit)
42
+ Shredder.shred(@sew,@shreds,limit)
43
+ end
44
+
45
+ def sew(limit=@limit)
46
+ Shredder.sew(@sew,@shreds,limit)
47
+ end
48
+ end
49
+
50
+ class Files
51
+ # this one takes filenames
52
+ def initialize(sew,shreds,limit=0)
53
+ @sew = sew
54
+ @shreds = shreds
55
+ @limit = limit
56
+ end
57
+
58
+ def shred(limit=@limit)
59
+ reader = File.open(@sew,'r')
60
+ writers = []
61
+ @shreds.each{|shred| writers.push( File.open(shred,'wb') ) }
62
+
63
+ count = nil
64
+ begin
65
+ count = Shredder.shred( reader, writers, limit )
66
+ rescue Exception
67
+ raise $!
68
+ ensure
69
+ writers.each{|writer| writer.close}
70
+ reader.close
71
+ end
72
+
73
+ return count
74
+ end
75
+
76
+ def sew(limit=@limit)
77
+ writer = File.open(@sew,'wb')
78
+ readers = []
79
+ @shreds.each{|shred| readers.push( File.open(shred,'r') ) }
80
+
81
+ count = nil
82
+ begin
83
+ count = Shredder.sew( writer, readers, limit )
84
+ rescue Exception
85
+ raise $!
86
+ ensure
87
+ writer.close
88
+ readers.each{|reader| reader.close}
89
+ end
90
+
91
+ return count
92
+ end
93
+ end
94
+
95
+ end
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: shredder
3
+ version: !ruby/object:Gem::Version
4
+ hash: 31
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 0
10
+ version: 0.0.0
11
+ platform: ruby
12
+ authors:
13
+ - carlosjhr64@gmail.com
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-06-12 00:00:00 Z
19
+ dependencies: []
20
+
21
+ description: |
22
+ The idea is to disperse file shreds in separate depositories
23
+ such that no one depository has the entire file.
24
+ Note: These are not file segments, they're shreds.
25
+
26
+ email: carlosjhr64@gmail.com
27
+ executables: []
28
+
29
+ extensions: []
30
+
31
+ extra_rdoc_files: []
32
+
33
+ files:
34
+ - ./lib/shredder.rb
35
+ - ./README.txt
36
+ homepage: https://sites.google.com/site/carlosjhr64/rubygems/shredder
37
+ licenses: []
38
+
39
+ post_install_message:
40
+ rdoc_options: []
41
+
42
+ require_paths:
43
+ - lib
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ none: false
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ hash: 3
50
+ segments:
51
+ - 0
52
+ version: "0"
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ hash: 3
59
+ segments:
60
+ - 0
61
+ version: "0"
62
+ requirements: []
63
+
64
+ rubyforge_project:
65
+ rubygems_version: 1.8.4
66
+ signing_key:
67
+ specification_version: 3
68
+ summary: Shred a file into file fragments, and join fragments back into a restored file.
69
+ test_files: []
70
+