icaprb-filter 0.0.1
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 +7 -0
- data/.gitignore +11 -0
- data/.rspec +2 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/LICENSE +25 -0
- data/README.md +68 -0
- data/README.rdoc +22 -0
- data/Rakefile +12 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/bin/start_server.rb +40 -0
- data/icaprb-filter.gemspec +33 -0
- data/lib/icaprb/filter.rb +189 -0
- data/lib/icaprb/filter/service.rb +107 -0
- data/lib/icaprb/filter/solution.rb +954 -0
- data/lib/icaprb/filter/steganography.rb +91 -0
- data/lib/icaprb/filter/version.rb +8 -0
- data/samples/block_samples/check_hashes_test.rb +7 -0
- data/samples/block_samples/check_hashes_test.txt +2 -0
- data/samples/block_samples/content_has_key_test.html +10 -0
- data/samples/block_samples/content_has_key_test.rb +6 -0
- data/samples/block_samples/content_includes_test.html +10 -0
- data/samples/block_samples/content_includes_test.rb +6 -0
- data/samples/block_samples/nothing_to_filter_test.html +10 -0
- data/samples/block_samples/url_contains_test.rb +6 -0
- data/samples/custom_samples/virustotal_config.rb +6 -0
- metadata +205 -0
@@ -0,0 +1,91 @@
|
|
1
|
+
|
2
|
+
require 'chunky_png'
|
3
|
+
require 'openssl'
|
4
|
+
require 'base64'
|
5
|
+
|
6
|
+
# ICAPrb
|
7
|
+
module ICAPrb
|
8
|
+
# Filter module
|
9
|
+
module Filter
|
10
|
+
# the steganography code of the filter - used to watermark files which are sent and downloaded.
|
11
|
+
module Steganography
|
12
|
+
# contains the code to encrypt the watermarks
|
13
|
+
module Cryptography
|
14
|
+
# Cipher to use
|
15
|
+
Cipher_To_Use = 'CAMELLIA-256-CBC'
|
16
|
+
|
17
|
+
class << self
|
18
|
+
# encrypt data using the the algorithm given in Cipher_To_Use using OpenSSL
|
19
|
+
# parameters:
|
20
|
+
# data:: data to encrypt
|
21
|
+
# key:: the key to use when encrypting data - when the default cipher is used, this must be 32 bytes
|
22
|
+
#
|
23
|
+
# returns the cipher string
|
24
|
+
def encrypt(data, key)
|
25
|
+
cipher = OpenSSL::Cipher.new(Cipher_To_Use)
|
26
|
+
cipher.encrypt
|
27
|
+
iv = cipher.random_iv
|
28
|
+
cipher.key = key
|
29
|
+
encrypted_data = cipher.update(data) + cipher.final
|
30
|
+
iv + encrypted_data
|
31
|
+
end
|
32
|
+
|
33
|
+
# decrypt data using the the algorithm given in Cipher_To_Use using OpenSSL
|
34
|
+
# parameters:
|
35
|
+
# data:: data to decrypt
|
36
|
+
# key:: the key to use when decrypting data - when the default cipher is used, this must be 32 bytes
|
37
|
+
#
|
38
|
+
# returns the decrypted string
|
39
|
+
# raises an error if the decryption is not successful
|
40
|
+
def decrypt(data, key)
|
41
|
+
cipher = OpenSSL::Cipher.new(Cipher_To_Use)
|
42
|
+
cipher.decrypt
|
43
|
+
iv = data[0..15]
|
44
|
+
encrypted_data = data[16...(data.length)]
|
45
|
+
cipher.iv = iv
|
46
|
+
cipher.key = key
|
47
|
+
cipher.update(encrypted_data) + cipher.final
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# contains classes which are used to support hiding messages in different file formats such as images,
|
53
|
+
# documents etc.
|
54
|
+
module Formats
|
55
|
+
# hide data in the png alpha channel
|
56
|
+
module PNG
|
57
|
+
class << self
|
58
|
+
# hide a string in a png file inside the last two significant bits of the alpha channel
|
59
|
+
# parameters:
|
60
|
+
# message:: the data (string) to hide in the image
|
61
|
+
# data_stream:: the png as a string
|
62
|
+
#
|
63
|
+
# returns the new image
|
64
|
+
def hide(message, data_stream)
|
65
|
+
png = ::ChunkyPNG::Image.from_blob(data_stream)
|
66
|
+
msg = message.bytes.map {|e| e.to_s(2).rjust(8,'0').scan(/../)}.flatten.map{|str| str.to_i(2)}
|
67
|
+
prepared_pixel = png.pixels.map {|pixel| pixel & 0xfffffffc}
|
68
|
+
0.upto(msg.length-1) { |i| prepared_pixel[i] |= msg[i] }
|
69
|
+
|
70
|
+
my_chunks = prepared_pixel.each_slice(png.width).to_a
|
71
|
+
(0.upto(png.height - 1)).each { |r| png.replace_row!(r,my_chunks[r]) }
|
72
|
+
png.to_blob(:fast_rgba)
|
73
|
+
end
|
74
|
+
|
75
|
+
# extract the data from the png
|
76
|
+
# parameters:
|
77
|
+
# data_stream:: the png file from which the data should be extracted
|
78
|
+
#
|
79
|
+
# returns the extracted string
|
80
|
+
def extract(data_stream)
|
81
|
+
png = ::ChunkyPNG::Image.from_blob(data_stream)
|
82
|
+
ac_data = png.pixels.map {|e| e & 3}.map {|e| e.to_s(2).rjust(2,'0') }.join.scan(/.{8}/).map {|e| e.to_i(2) }
|
83
|
+
real_length = ac_data.map.with_index {|a, i| a != 0 ? i : nil}.delete_if {|a| a.nil? }.last
|
84
|
+
ac_data[0..real_length].map{|c| c.chr}.join
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
metadata
ADDED
@@ -0,0 +1,205 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: icaprb-filter
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Fabian Franz
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-07-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: nokogiri
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.6'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.6.7
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.6'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.6.7
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: uirusu
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: pdf-reader
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '1.4'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '1.4'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: chunky_png
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
type: :runtime
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: icaprb-server
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
type: :runtime
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: rest-client
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
type: :runtime
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: bundler
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '1.11'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - "~>"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '1.11'
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: rake
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
type: :development
|
125
|
+
prerelease: false
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
name: rspec
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - "~>"
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '3.0'
|
138
|
+
type: :development
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - "~>"
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '3.0'
|
145
|
+
description:
|
146
|
+
email:
|
147
|
+
- fabian.franz@students.fh-hagenberg.at
|
148
|
+
executables: []
|
149
|
+
extensions: []
|
150
|
+
extra_rdoc_files: []
|
151
|
+
files:
|
152
|
+
- ".gitignore"
|
153
|
+
- ".rspec"
|
154
|
+
- ".travis.yml"
|
155
|
+
- Gemfile
|
156
|
+
- LICENSE
|
157
|
+
- README.md
|
158
|
+
- README.rdoc
|
159
|
+
- Rakefile
|
160
|
+
- bin/console
|
161
|
+
- bin/setup
|
162
|
+
- bin/start_server.rb
|
163
|
+
- icaprb-filter.gemspec
|
164
|
+
- lib/icaprb/filter.rb
|
165
|
+
- lib/icaprb/filter/service.rb
|
166
|
+
- lib/icaprb/filter/solution.rb
|
167
|
+
- lib/icaprb/filter/steganography.rb
|
168
|
+
- lib/icaprb/filter/version.rb
|
169
|
+
- samples/block_samples/check_hashes_test.rb
|
170
|
+
- samples/block_samples/check_hashes_test.txt
|
171
|
+
- samples/block_samples/content_has_key_test.html
|
172
|
+
- samples/block_samples/content_has_key_test.rb
|
173
|
+
- samples/block_samples/content_includes_test.html
|
174
|
+
- samples/block_samples/content_includes_test.rb
|
175
|
+
- samples/block_samples/nothing_to_filter_test.html
|
176
|
+
- samples/block_samples/url_contains_test.rb
|
177
|
+
- samples/custom_samples/virustotal_config.rb
|
178
|
+
homepage: https://github.com/fabianfrz/ICAPrb-Filter
|
179
|
+
licenses: []
|
180
|
+
metadata: {}
|
181
|
+
post_install_message:
|
182
|
+
rdoc_options: []
|
183
|
+
require_paths:
|
184
|
+
- lib
|
185
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
186
|
+
requirements:
|
187
|
+
- - ">="
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0'
|
190
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
requirements: []
|
196
|
+
rubyforge_project:
|
197
|
+
rubygems_version: 2.5.1
|
198
|
+
signing_key:
|
199
|
+
specification_version: 4
|
200
|
+
summary: Filter framework for ICAPrb-server. Does not work standalone. This gem includes
|
201
|
+
a framework to create a content filter which allows to filter content instead of
|
202
|
+
only the urls. It is extensible by plug ins. For example it can be used to enforce
|
203
|
+
your companies network usage policies at the proxy.
|
204
|
+
test_files: []
|
205
|
+
has_rdoc:
|