unveiler 0.0.2 → 0.1.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 (4) hide show
  1. checksums.yaml +4 -4
  2. data/bin/unveiler +62 -11
  3. data/lib/unveiler.rb +6 -9
  4. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 67d455f8d288e57cb4eb0dbb6517033e8c05d4bf
4
- data.tar.gz: e86d30fce804d99f582559f7989f03d776eb840b
3
+ metadata.gz: 3a0a0cd10d2fb7c824ca8f8fe7e1c0faacb6a3e4
4
+ data.tar.gz: e348cd099894106a3335fa21940adb4ef269fab4
5
5
  SHA512:
6
- metadata.gz: 65bfd2f634fa3990e5743af2c2f085a79cde6ece4e646ccb83e0c7d237b65edb1a1516f1a373d0b94a631056cc43f4f85a560598d80dbfeb98e6bbf4eebea917
7
- data.tar.gz: 2f1a39d376ce923e8a3af84cb2ae3a3100c6e429ae70a9ad20551bbe6798331946955aa93dfefa4c9157b0a6480327b8f507ed08d8ddef82e13af747f4bbad44
6
+ metadata.gz: 94d770ff5573c8f2fbbe7d6f343f500fd7d96ed1661513ee581d05af1b210b7b22a897dfb5650c841416d3f4900183edff1c250813362ce2672dde87d30a35df
7
+ data.tar.gz: 0fd8072c8a75354e13621fc7123f7dca7f458389fa3d2c574d6559a0c91890f1003dbc65b3f795d4c36723b0c60c8f5e385b6e419873015f6267de97ab8e256c
@@ -6,15 +6,25 @@ require 'unveiler'
6
6
  #
7
7
  # +input+:: File to be encoded
8
8
  # +output+:: File to write encoded data to
9
- # +data+:: Data to be encoded
10
- def encode(input, output, data)
9
+ # +type+:: Specifies whether the data is a file name or a string
10
+ # +value+:: File name or string data
11
+ def encode(input, output, type, value)
12
+ puts 'Starting encoding! This may take some time...'
13
+ start_time = Time.now
14
+
15
+ data = value if type == 'string'
16
+ data = read_file(value) if type == 'file'
17
+
11
18
  begin
12
19
  target = read_file(input)
13
20
  data = Unveiler.encode(target, data)
14
21
  write_file(output, data)
15
22
  rescue
16
- puts $!
23
+ puts $!.message
17
24
  end
25
+
26
+ time_elapsed = (Time.now - start_time).round(3)
27
+ puts "Encoding completed in #{time_elapsed} seconds!"
18
28
  end
19
29
 
20
30
  # Decodes the provided input file and saves the decoded data to the output
@@ -23,6 +33,9 @@ end
23
33
  # +input+:: File to be decoded
24
34
  # +output+:: File to write decoded data to
25
35
  def decode(input, output)
36
+ puts 'Starting decoding! This may take some time...'
37
+ start_time = Time.now
38
+
26
39
  begin
27
40
  target = read_file(input)
28
41
  data = Unveiler.decode(target)
@@ -30,6 +43,9 @@ def decode(input, output)
30
43
  rescue
31
44
  puts $!.message
32
45
  end
46
+
47
+ time_elapsed = (Time.now - start_time).round(3)
48
+ puts "Decoding completed in #{time_elapsed} seconds!"
33
49
  end
34
50
 
35
51
  # Reads data from the specified file.
@@ -48,20 +64,55 @@ end
48
64
 
49
65
  # Prints unveiler usage examples.
50
66
  def usage
51
- puts 'Usage:'
52
- puts 'unveiler encode [input_file] [output_file] [data]'
53
- puts 'unveiler decode [input_file] [output_file]'
67
+ puts "Usage Guide:"
68
+ puts "Short\tLong\t\tDescription"
69
+ puts "-e\t--encode\tEncodes the specified input file"
70
+ puts "-d\t--decode\tDecodes the specified input file"
71
+ puts "-i\t--input\t\tFile to read from"
72
+ puts "-o\t--output\tFile to write to"
73
+ puts "-s\t--string\tSpecify a string of data (following, in quotes)"
74
+ puts "-f\t--file\t\tSpecify a file to load data from"
75
+ exit
54
76
  end
55
77
 
56
78
  # Parses ARGV to ensure the correct parameters are given.
57
79
  def parse_argv
58
- if ARGV.first == 'encode'
59
- ARGV.length == 4 ? encode(ARGV[1], ARGV[2], ARGV[3]) : usage
60
- elsif ARGV.first == 'decode'
61
- ARGV.length == 3 ? decode(ARGV[1], ARGV[2]) : usage
62
- else
80
+ command = ''
81
+ data_type = ''
82
+ data_value = ''
83
+ input_file = ''
84
+ output_file = ''
85
+
86
+ begin
87
+ ARGV.length.times do |i|
88
+ if ARGV[i] == '-e' || ARGV[i] == '--encode'
89
+ command = 'encode'
90
+ elsif ARGV[i] == '-d' || ARGV[i] == '--decode'
91
+ command = 'decode'
92
+ elsif ARGV[i] == '-i' || ARGV[i] == '--input'
93
+ input_file = ARGV[i + 1]
94
+ elsif ARGV[i] == '-o' || ARGV[i] == '--output'
95
+ output_file = ARGV[i + 1]
96
+ elsif ARGV[i] == '-s' || ARGV[i] == '--string'
97
+ data_type = 'string'
98
+ data_value = ARGV[i + 1]
99
+ elsif ARGV[i] == '-f' || ARGV[i] == '--file'
100
+ data_type = 'file'
101
+ data_value = ARGV[i + 1]
102
+ end
103
+ end
104
+ rescue
63
105
  usage
64
106
  end
107
+
108
+ usage if command == '' || input_file == '' || output_file == ''
109
+ usage if command == 'encode' && (data_type == '' || data_value == '')
110
+
111
+ if command == 'encode'
112
+ encode(input_file, output_file, data_type, data_value)
113
+ elsif command == 'decode'
114
+ decode(input_file, output_file)
115
+ end
65
116
  end
66
117
 
67
118
  ARGV.empty? ? usage : parse_argv
@@ -88,6 +88,7 @@ class Unveiler
88
88
  #
89
89
  # +bytes+:: Array of bytes to be processed
90
90
  def self.process_bytes(bytes)
91
+ eof = '010001010100111101000110' # binary "EOF"
91
92
  bits = ''
92
93
 
93
94
  8.times do |index|
@@ -96,20 +97,16 @@ class Unveiler
96
97
  bits += byte[7 - index]
97
98
 
98
99
  # Check whether a full byte has been read
99
- if bits.length % 8 == 0
100
- # Convert bits to array of bytes
101
- data = bits.scan(/.{8}/)
100
+ if bits.length % 8 == 0 && bits.length >= 24
101
+ if bits[-24..-1] == eof
102
+ # Convert bits to array of bytes
103
+ data = bits.scan(/.{8}/)
102
104
 
103
- if data.length >= 3
104
105
  # Convert bytes to a UTF-8 string
105
106
  data.map!{|b| byte = b.to_i(2)}
106
107
  data = data.pack('C*').force_encoding('utf-8')
107
- len = data.length
108
108
 
109
- if data[-3,3] == 'EOF'
110
- # Return the UTF-8 string, excluding 'EOF'
111
- return data[0..len - 3]
112
- end
109
+ return data[0..data.length - 3]
113
110
  end
114
111
  end
115
112
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unveiler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brendan Goodenough