shredder 0.0.0

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 (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
+