shredder 2.0.200126 → 3.1.221230
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.
- checksums.yaml +4 -4
- data/README.md +71 -72
- data/bin/shredder +4 -8
- data/lib/shredder/files.rb +6 -6
- data/lib/shredder/shredder.rb +6 -6
- data/lib/shredder/stdio.rb +6 -6
- data/lib/shredder.rb +5 -5
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2ba5d85280357dd18d03bad08517e9c7d4b7ef3e914c6939f758cfb066b0f9fd
|
4
|
+
data.tar.gz: b52e79f345d49b690850add5a60a9c22d72f9b0c0156f51dd421b96902813599
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d1267dc8c07c547304af86c273379f498c4ea033878cc244d0d02d8946d720e6d2592acd768288f885ca31830685cd93ed037ad4d4d349a9c9e36bef4b07999
|
7
|
+
data.tar.gz: 2f16d4adf30f708116eb5875435b650b6aa9e76a6afcbae0768a24c5abf6e527fe61dd62bf7ce3a4deb35364c022bf8c1c1e7e0559a258087d965c1ee08562e3
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
#
|
1
|
+
# Shredder
|
2
2
|
|
3
|
-
* [VERSION
|
3
|
+
* [VERSION 3.1.221230](https://github.com/carlosjhr64/shredder/releases)
|
4
4
|
* [github](https://github.com/carlosjhr64/shredder)
|
5
5
|
* [rubygems](https://rubygems.org/gems/shredder)
|
6
6
|
|
@@ -8,89 +8,89 @@
|
|
8
8
|
|
9
9
|
Shred a file into file fragments, and join fragments back into a restored file.
|
10
10
|
|
11
|
+
## INSTALL:
|
12
|
+
```console
|
13
|
+
$ gem install shredder
|
14
|
+
```
|
11
15
|
## HELP:
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
## SYNOPSIS
|
29
|
-
|
30
|
-
### Library
|
31
|
-
|
32
|
-
|
33
|
-
|
16
|
+
```console
|
17
|
+
$ shredder --help
|
18
|
+
Usage:
|
19
|
+
shredder shred [:options+] <shreds=FILENAME>+
|
20
|
+
shredder sew [:options+] <shreds=FILENAME>+
|
21
|
+
Options:
|
22
|
+
--n=INTEGER Number of shreds
|
23
|
+
Types:
|
24
|
+
FILENAME /^[[:print:]]+$/
|
25
|
+
INTEGER /^[2-9]\d*$/
|
26
|
+
# Examples:
|
27
|
+
# shredder shred file.1 file.2 < file.txt
|
28
|
+
# shredder shred --n=2 file < file.txt
|
29
|
+
# shredder sew file.1 file.2 > file.txt
|
30
|
+
# shredder shred --n=2 file > file.txt
|
31
|
+
```
|
32
|
+
## SYNOPSIS:
|
33
|
+
|
34
|
+
### Library
|
35
|
+
```ruby
|
36
|
+
require 'shredder'
|
37
|
+
```
|
34
38
|
#### Shredder::Streams
|
39
|
+
```ruby
|
40
|
+
require 'stringio'
|
35
41
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
sewn.string.length #=> 31
|
40
|
-
shreds = [StringIO.new, StringIO.new]
|
42
|
+
sewn = StringIO.new("This is a test String: 1, 2, 3.")
|
43
|
+
sewn.string.length #=> 31
|
44
|
+
shreds = [StringIO.new, StringIO.new]
|
41
45
|
|
42
|
-
|
43
|
-
|
46
|
+
shredder = Shredder::Streams.new(sewn, shreds)
|
47
|
+
shredder.shred #=> 31
|
44
48
|
|
45
|
-
|
46
|
-
|
47
|
-
|
49
|
+
shreds[0].string
|
50
|
+
#=> "T\u0001S\u001AAT\u0016T'\e\t\u001A\u001D\u0012\f\u001D"
|
51
|
+
shreds[0].string.length #=> 16
|
48
52
|
|
49
|
-
|
50
|
-
|
51
|
-
|
53
|
+
shreds[1].string
|
54
|
+
#=> "<\u001AISA\u0011\as\u0006\a]\u0011\f\u001E\u0013"
|
55
|
+
shreds[1].string.length #=> 15
|
52
56
|
|
53
|
-
|
54
|
-
|
57
|
+
restored = StringIO.new
|
58
|
+
shreds.each{|_|_.rewind}
|
55
59
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
restored.string #=> "This is a test String: 1, 2, 3."
|
60
|
+
shredder = Shredder::Streams.new(restored, shreds)
|
61
|
+
shredder.sew #=> 31
|
60
62
|
|
63
|
+
restored.string #=> "This is a test String: 1, 2, 3."
|
64
|
+
```
|
61
65
|
#### Shredder::Files
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
## INSTALL:
|
86
|
-
|
87
|
-
$ gem install shredder
|
88
|
-
|
66
|
+
```ruby
|
67
|
+
sewn = './test/sewn.txt'
|
68
|
+
shreds = './tmp/shreds'
|
69
|
+
restored = './tmp/restored.txt'
|
70
|
+
|
71
|
+
File.read(sewn).chomp #=> "This is a test file: 1, 2, 3."
|
72
|
+
File.size(sewn) #=> 30
|
73
|
+
|
74
|
+
shredder = Shredder::Files.new(sewn, shreds, 3)
|
75
|
+
shredder.shreds
|
76
|
+
#=> ["./tmp/shreds.1", "./tmp/shreds.2", "./tmp/shreds.3"]
|
77
|
+
shredder.shred #=> 30
|
78
|
+
|
79
|
+
File.read(shreds+'.1') #=> "T\u001A\u001AA\u0016F\t\u0011\u0012\u0013"
|
80
|
+
File.read(shreds+'.2') #=> "<SST\a\u000F_\u001D\u001E\u001D"
|
81
|
+
File.read(shreds+'.3') #=> "\u0001IA\u0011T\u0005\u001A\f\f$"
|
82
|
+
File.size(shreds+'.3') #=> 10
|
83
|
+
|
84
|
+
shredder = Shredder::Files.new(restored, shreds, 3)
|
85
|
+
shredder.sewn #=> "./tmp/restored.txt"
|
86
|
+
shredder.sew #=> 30
|
87
|
+
File.read(restored).chomp #=> "This is a test file: 1, 2, 3."
|
88
|
+
```
|
89
89
|
## LICENSE:
|
90
90
|
|
91
91
|
(The MIT License)
|
92
92
|
|
93
|
-
Copyright (c)
|
93
|
+
Copyright (c) 2022 CarlosJHR64
|
94
94
|
|
95
95
|
Permission is hereby granted, free of charge, to any person obtaining
|
96
96
|
a copy of this software and associated documentation files (the
|
@@ -110,4 +110,3 @@ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
110
110
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
111
111
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
112
112
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
113
|
-
|
data/bin/shredder
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require 'help_parser'
|
3
|
+
require 'shredder'
|
3
4
|
|
4
|
-
OPTIONS = HelpParser[
|
5
|
+
OPTIONS = HelpParser[Shredder::VERSION, <<HELP]
|
5
6
|
Usage:
|
6
7
|
shredder shred [:options+] <shreds=FILENAME>+
|
7
8
|
shredder sew [:options+] <shreds=FILENAME>+
|
8
9
|
Options:
|
9
|
-
--n=INTEGER \
|
10
|
-
--passphrase\tRelay passphrase from stding to stdout
|
10
|
+
--n=INTEGER \t Number of shreds
|
11
11
|
Types:
|
12
12
|
FILENAME /^[[:print:]]+$/
|
13
|
-
INTEGER /^[2-9]
|
13
|
+
INTEGER /^[2-9]\\d*$/
|
14
14
|
# Examples:
|
15
15
|
# shredder shred file.1 file.2 < file.txt
|
16
16
|
# shredder shred --n=2 file < file.txt
|
@@ -35,10 +35,6 @@ unless count > 1
|
|
35
35
|
exit 64
|
36
36
|
end
|
37
37
|
|
38
|
-
require 'shredder/shredder'
|
39
|
-
require 'shredder/streams'
|
40
|
-
require 'shredder/stdio'
|
41
|
-
|
42
38
|
shredder = Shredder::StdIO.new(shreds, count)
|
43
39
|
case OPTIONS[1]
|
44
40
|
when 'shred'
|
data/lib/shredder/files.rb
CHANGED
@@ -12,11 +12,11 @@ module Shredder
|
|
12
12
|
reader = writers = count = nil
|
13
13
|
begin
|
14
14
|
reader = File.open(@sewn, 'r')
|
15
|
-
writers = @shreds.map{
|
15
|
+
writers = @shreds.map{File.open _1, 'wb'}
|
16
16
|
count = Streams.new(reader, writers).shred(limit: limit)
|
17
17
|
ensure
|
18
|
-
writers.each{
|
19
|
-
reader.close
|
18
|
+
writers.each{_1.close} if writers
|
19
|
+
reader.close if reader
|
20
20
|
end
|
21
21
|
return count
|
22
22
|
end
|
@@ -25,11 +25,11 @@ module Shredder
|
|
25
25
|
writer = readers = count = nil
|
26
26
|
begin
|
27
27
|
writer = File.open(@sewn, 'wb')
|
28
|
-
readers = @shreds.map{
|
28
|
+
readers = @shreds.map{File.open(_1, 'r')}
|
29
29
|
count = Streams.new(writer, readers).sew(limit: limit)
|
30
30
|
ensure
|
31
|
-
writer.close
|
32
|
-
readers.each{
|
31
|
+
writer.close if writer
|
32
|
+
readers.each{_1.close} if readers
|
33
33
|
end
|
34
34
|
return count
|
35
35
|
end
|
data/lib/shredder/shredder.rb
CHANGED
@@ -3,11 +3,11 @@ module Shredder
|
|
3
3
|
|
4
4
|
# note that these are streams
|
5
5
|
def shred(sewn=(@sewn or $stdin), shreds=@shreds,
|
6
|
-
writers: shreds, reader: sewn, limit: 0)
|
7
|
-
shreds,
|
6
|
+
writers: shreds, reader: sewn, limit: 0, xor: 0)
|
7
|
+
shreds,count = writers.length,0
|
8
8
|
while byte = reader.getbyte do
|
9
9
|
writers[count%shreds].putc(xor^(xor=byte))
|
10
|
-
count += 1 #
|
10
|
+
count += 1 # note that 0 is skipped
|
11
11
|
break if count == limit
|
12
12
|
end
|
13
13
|
return count
|
@@ -15,8 +15,8 @@ module Shredder
|
|
15
15
|
|
16
16
|
# note that these are streams
|
17
17
|
def sew(shreds=@shreds, sewn=(@sewn or $stdout),
|
18
|
-
readers: shreds, writer: sewn, limit: 0)
|
19
|
-
shreds,
|
18
|
+
readers: shreds, writer: sewn, limit: 0, xor: 0)
|
19
|
+
shreds,count = readers.length,0
|
20
20
|
while byte = readers[count%shreds].getbyte do
|
21
21
|
writer.putc(xor=(byte^xor))
|
22
22
|
count += 1 # note that 0 is skipped
|
@@ -25,7 +25,7 @@ module Shredder
|
|
25
25
|
return count
|
26
26
|
end
|
27
27
|
|
28
|
-
def shred_files(b, m=2, basename: b, n: m)
|
28
|
+
def shred_files(b=nil, m=2, basename: b, n: m)
|
29
29
|
case basename
|
30
30
|
when Array
|
31
31
|
basename
|
data/lib/shredder/stdio.rb
CHANGED
@@ -2,17 +2,17 @@ module Shredder
|
|
2
2
|
class StdIO
|
3
3
|
include Shredder
|
4
4
|
# this one takes shred filenames and uses $stdin or $stdout appropriately.
|
5
|
-
def initialize(
|
6
|
-
@shreds = shred_files(
|
5
|
+
def initialize(...)
|
6
|
+
@shreds = shred_files(...)
|
7
7
|
end
|
8
8
|
|
9
9
|
def shred(limit=0)
|
10
10
|
writers = count = nil
|
11
11
|
begin
|
12
|
-
writers = @shreds.map{
|
12
|
+
writers = @shreds.map{File.open _1, 'wb'}
|
13
13
|
count = Streams.new($stdin, writers).shred(limit: limit)
|
14
14
|
ensure
|
15
|
-
writers.each{
|
15
|
+
writers.each{_1.close} if writers
|
16
16
|
end
|
17
17
|
return count
|
18
18
|
end
|
@@ -20,10 +20,10 @@ module Shredder
|
|
20
20
|
def sew(limit=0)
|
21
21
|
readers = count = nil
|
22
22
|
begin
|
23
|
-
readers = @shreds.map{
|
23
|
+
readers = @shreds.map{File.open _1, 'r'}
|
24
24
|
count = Streams.new($stdout, readers).sew(limit: limit)
|
25
25
|
ensure
|
26
|
-
readers.each{
|
26
|
+
readers.each{_1.close} if readers
|
27
27
|
end
|
28
28
|
return count
|
29
29
|
end
|
data/lib/shredder.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
module Shredder
|
2
|
-
VERSION = '
|
2
|
+
VERSION = '3.1.221230'
|
3
|
+
require 'shredder/shredder'
|
4
|
+
autoload :Streams, 'shredder/streams'
|
5
|
+
autoload :StdIO, 'shredder/stdio'
|
6
|
+
autoload :Files, 'shredder/files'
|
3
7
|
end
|
4
|
-
require 'shredder/shredder'
|
5
|
-
require 'shredder/streams'
|
6
|
-
require 'shredder/stdio'
|
7
|
-
require 'shredder/files'
|
8
8
|
# Requires:
|
9
9
|
#`ruby`
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shredder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.1.221230
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- CarlosJHR64
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-12-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: help_parser
|
@@ -16,20 +16,20 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '8.1'
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
22
|
+
version: 8.1.221206
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
29
|
+
version: '8.1'
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
32
|
+
version: 8.1.221206
|
33
33
|
description: 'Shred a file into file fragments, and join fragments back into a restored
|
34
34
|
file.
|
35
35
|
|
@@ -66,8 +66,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
66
66
|
- !ruby/object:Gem::Version
|
67
67
|
version: '0'
|
68
68
|
requirements:
|
69
|
-
- 'ruby: ruby
|
70
|
-
rubygems_version: 3.
|
69
|
+
- 'ruby: ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [aarch64-linux]'
|
70
|
+
rubygems_version: 3.3.7
|
71
71
|
signing_key:
|
72
72
|
specification_version: 4
|
73
73
|
summary: Shred a file into file fragments, and join fragments back into a restored
|