flatulent 0.0.1 → 0.0.2

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 (69) hide show
  1. data/README +60 -16
  2. data/flatulent-0.0.2.gem +0 -0
  3. data/lib/flatulent/crypt/blowfish-tables.rb +190 -0
  4. data/lib/flatulent/crypt/blowfish.rb +109 -0
  5. data/lib/flatulent/crypt/cbc.rb +123 -0
  6. data/lib/flatulent/crypt/gost.rb +140 -0
  7. data/lib/flatulent/crypt/idea.rb +193 -0
  8. data/lib/flatulent/crypt/noise.rb +94 -0
  9. data/lib/flatulent/crypt/purerubystringio.rb +378 -0
  10. data/lib/flatulent/crypt/rijndael-tables.rb +117 -0
  11. data/lib/flatulent/crypt/rijndael.rb +269 -0
  12. data/lib/flatulent/crypt/stringxor.rb +27 -0
  13. data/lib/flatulent.rb +332 -121
  14. data/lib/flatulent.rb.bak +337 -0
  15. data/rails/app/controllers/flatulent_controller.rb +61 -6
  16. data/rails/lib/flatulent/attributes.rb +79 -0
  17. data/rails/lib/flatulent/crypt/blowfish-tables.rb +190 -0
  18. data/rails/lib/flatulent/crypt/blowfish.rb +109 -0
  19. data/rails/lib/flatulent/crypt/cbc.rb +123 -0
  20. data/rails/lib/flatulent/crypt/gost.rb +140 -0
  21. data/rails/lib/flatulent/crypt/idea.rb +193 -0
  22. data/rails/lib/flatulent/crypt/noise.rb +94 -0
  23. data/rails/lib/flatulent/crypt/purerubystringio.rb +378 -0
  24. data/rails/lib/flatulent/crypt/rijndael-tables.rb +117 -0
  25. data/rails/lib/flatulent/crypt/rijndael.rb +269 -0
  26. data/rails/lib/flatulent/fontfiles/banner.flf +2494 -0
  27. data/rails/lib/flatulent/fontfiles/big.flf +2204 -0
  28. data/rails/lib/flatulent/fontfiles/block.flf +1691 -0
  29. data/rails/lib/flatulent/fontfiles/bubble.flf +1630 -0
  30. data/rails/lib/flatulent/fontfiles/digital.flf +1286 -0
  31. data/rails/lib/flatulent/fontfiles/ivrit.flf +900 -0
  32. data/rails/lib/flatulent/fontfiles/lean.flf +1691 -0
  33. data/rails/lib/flatulent/fontfiles/mini.flf +899 -0
  34. data/rails/lib/flatulent/fontfiles/mnemonic.flf +3702 -0
  35. data/rails/lib/flatulent/fontfiles/script.flf +1493 -0
  36. data/rails/lib/flatulent/fontfiles/shadow.flf +1097 -0
  37. data/rails/lib/flatulent/fontfiles/slant.flf +1295 -0
  38. data/rails/lib/flatulent/fontfiles/small.flf +1097 -0
  39. data/rails/lib/flatulent/fontfiles/smscript.flf +1097 -0
  40. data/rails/lib/flatulent/fontfiles/smshadow.flf +899 -0
  41. data/rails/lib/flatulent/fontfiles/smslant.flf +1097 -0
  42. data/rails/lib/flatulent/fontfiles/standard.flf +2227 -0
  43. data/rails/lib/flatulent/fontfiles/term.flf +600 -0
  44. data/rails/lib/flatulent/pervasives.rb +32 -0
  45. data/rails/lib/flatulent/stringxor.rb +27 -0
  46. data/rails/lib/flatulent/text/double_metaphone.rb +356 -0
  47. data/rails/lib/flatulent/text/figlet/font.rb +117 -0
  48. data/rails/lib/flatulent/text/figlet/smusher.rb +64 -0
  49. data/rails/lib/flatulent/text/figlet/typesetter.rb +68 -0
  50. data/rails/lib/flatulent/text/figlet.rb +17 -0
  51. data/rails/lib/flatulent/text/levenshtein.rb +65 -0
  52. data/rails/lib/flatulent/text/metaphone.rb +97 -0
  53. data/rails/lib/flatulent/text/porter_stemming.rb +171 -0
  54. data/rails/lib/flatulent/text/soundex.rb +61 -0
  55. data/rails/lib/flatulent/text.rb +6 -0
  56. data/rails/lib/flatulent.rb +450 -0
  57. data/rails/log/development.log +14297 -0
  58. data/rails/log/fastcgi.crash.log +111 -0
  59. data/rails/log/lighttpd.access.log +3993 -0
  60. data/rails/log/lighttpd.error.log +111 -0
  61. data/rails/tmp/cache/javascripts/prototype.js-gzip-3275912-71260-1183440172 +0 -0
  62. data/rails/tmp/sessions/ruby_sess.32d68bc997054475 +0 -0
  63. data/rails/tmp/sessions/ruby_sess.4694a4b9bdf9bcf4 +0 -0
  64. data/rails/tmp/sessions/ruby_sess.99469fde69043a05 +0 -0
  65. data/rails/tmp/sessions/ruby_sess.a588c0a457345912 +0 -0
  66. data/rails/tmp/sessions/ruby_sess.b3344125a84a3efa +0 -0
  67. data/samples.rb +10 -0
  68. metadata +69 -3
  69. data/flatulent-0.0.0.gem +0 -0
@@ -0,0 +1,378 @@
1
+ # Thanks to Binky DaClown who wrote this pure-ruby implementation
2
+ # http://rubyforge.org/projects/prstringio/
3
+ # Apparently CBC does not work well with the C-based stringio
4
+
5
+ module Crypt
6
+ class PureRubyStringIO
7
+
8
+ include Enumerable
9
+
10
+ SEEK_CUR = IO::SEEK_CUR
11
+ SEEK_END = IO::SEEK_END
12
+ SEEK_SET = IO::SEEK_SET
13
+
14
+ @@relayMethods = [:<<, :all?, :any?, :binmode, :close, :close_read, :close_write, :closed?, :closed_read?,
15
+ :closed_write?, :collect, :detect, :each, :each_byte, :each_line, :each_with_index,
16
+ :entries, :eof, :eof?, :fcntl, :fileno, :find, :find_all, :flush, :fsync, :getc, :gets,
17
+ :grep, :include?, :inject, :isatty, :length, :lineno, :lineno=, :map, :max, :member?,
18
+ :min, :partition, :path, :pid, :pos, :pos=, :print, :printf, :putc, :puts, :read,
19
+ :readchar, :readline, :readlines, :reject, :rewind, :seek, :select, :size, :sort,
20
+ :sort_by, :string, :string=, :sync, :sync=, :sysread, :syswrite, :tell, :truncate, :tty?,
21
+ :ungetc, :write, :zip]
22
+
23
+ def self.open(string="", mode="r+")
24
+ if block_given? then
25
+ sio = new(string, mode)
26
+ rc = yield(sio)
27
+ sio.close
28
+ rc
29
+ else
30
+ new(string, mode)
31
+ end
32
+ end
33
+
34
+ def <<(obj)
35
+ requireWritable
36
+ write obj
37
+ self
38
+ end
39
+
40
+ def binmode
41
+ self
42
+ end
43
+
44
+ def close
45
+ requireOpen
46
+ @sio_closed_read = true
47
+ @sio_closed_write = true
48
+ self
49
+ end
50
+
51
+ def close_read
52
+ raise IOError, "closing non-duplex IO for reading", caller if closed_read?
53
+ @sio_closed_read = true
54
+ self
55
+ end
56
+
57
+ def close_write
58
+ raise IOError, "closing non-duplex IO for writing", caller if closed_write?
59
+ @sio_closed_read = true
60
+ self
61
+ end
62
+
63
+ def closed?
64
+ closed_read? && closed_write?
65
+ end
66
+
67
+ def closed_read?
68
+ @sio_closed_read
69
+ end
70
+
71
+ def closed_write?
72
+ @sio_closed_write
73
+ end
74
+
75
+ def each(sep_string=$/, &block)
76
+ requireReadable
77
+ @sio_string.each(sep_string, &block)
78
+ @sio_pos = @sio_string.length
79
+ end
80
+
81
+ def each_byte(&block)
82
+ requireReadable
83
+ @sio_string.each_byte(&block)
84
+ @sio_pos = @sio_string.length
85
+ end
86
+
87
+ def eof
88
+ requireReadable { @sio_pos >= @sio_string.length }
89
+ end
90
+
91
+ def fcntl(integer_cmd, arg)
92
+ raise NotImplementedError, "The fcntl() function is unimplemented on this machine", caller
93
+ end
94
+
95
+ def fileno
96
+ nil
97
+ end
98
+
99
+ def flush
100
+ self
101
+ end
102
+
103
+ def fsync
104
+ 0
105
+ end
106
+
107
+ def getc
108
+ requireReadable
109
+ char = @sio_string[@sio_pos]
110
+ @sio_pos += 1 unless char.nil?
111
+ char
112
+ end
113
+
114
+ def gets(sep_string=$/)
115
+ requireReadable
116
+ @sio_lineno += 1
117
+ pstart = @sio_pos
118
+ @sio_pos = @sio_string.index(sep_string, @sio_pos) || [@sio_string.length, @sio_pos].max
119
+ @sio_string[pstart..@sio_pos]
120
+ end
121
+
122
+ def initialize(string="", mode="r+")
123
+ @sio_string = string.to_s
124
+ @sio_lineno = 0
125
+ @mode = mode
126
+ @relay = nil
127
+ case mode.delete("b")
128
+ when "r"
129
+ @sio_closed_read = false
130
+ @sio_closed_write = true
131
+ @sio_pos = 0
132
+ when "r+"
133
+ @sio_closed_read = false
134
+ @sio_closed_write = false
135
+ @sio_pos = 0
136
+ when "w"
137
+ @sio_closed_read = true
138
+ @sio_closed_write = false
139
+ @sio_pos = 0
140
+ @sio_string.replace("")
141
+ when "w+"
142
+ @sio_closed_read = false
143
+ @sio_closed_write = false
144
+ @sio_pos = 0
145
+ @sio_string.replace("")
146
+ when "a"
147
+ @sio_closed_read = true
148
+ @sio_closed_write = false
149
+ @sio_pos = @sio_string.length
150
+ when "a+"
151
+ @sio_closed_read = false
152
+ @sio_closed_write = false
153
+ @sio_pos = @sio_string.length
154
+ else
155
+ raise ArgumentError, "illegal access mode #{mode}", caller
156
+ end
157
+ end
158
+
159
+ def isatty
160
+ flase
161
+ end
162
+
163
+ def length
164
+ @sio_string.length
165
+ end
166
+
167
+ def lineno
168
+ @sio_lineno
169
+ end
170
+
171
+ def lineno=(integer)
172
+ @sio_lineno = integer
173
+ end
174
+
175
+ def path
176
+ nil
177
+ end
178
+
179
+ def pid
180
+ nil
181
+ end
182
+
183
+ def pos
184
+ @sio_pos
185
+ end
186
+
187
+ def pos=(integer)
188
+ raise Errno::EINVAL, "Invalid argument", caller if integer < 0
189
+ @sio_pos = integer
190
+ end
191
+
192
+ def print(*args)
193
+ requireWritable
194
+ args.unshift($_) if args.empty
195
+ args.each { |obj| write(obj) }
196
+ write($\) unless $\.nil?
197
+ nil
198
+ end
199
+
200
+ def printf(format_string, *args)
201
+ requireWritable
202
+ write format(format_string, *args)
203
+ nil
204
+ end
205
+
206
+ def putc(obj)
207
+ requireWritable
208
+ write(obj.is_a?(Numeric) ? sprintf("%c", obj) : obj.to_s[0..0])
209
+ obj
210
+ end
211
+
212
+ def puts(*args)
213
+ requireWritable
214
+ args.unshift("") if args.empty?
215
+ args.each { |obj|
216
+ write obj
217
+ write $/
218
+ }
219
+ nil
220
+ end
221
+
222
+ def read(length=nil, buffer=nil)
223
+ requireReadable
224
+ len = length || [@sio_string.length - @sio_pos, 0].max
225
+ raise ArgumentError, "negative length #{len} given", caller if len < 0
226
+ buffer ||= ""
227
+ pstart = @sio_pos
228
+ @sio_pos += len
229
+ buffer.replace(@sio_string[pstart..@sio_pos])
230
+ buffer.empty? && !length.nil? ? nil : buffer
231
+ end
232
+
233
+ def readchar
234
+ requireReadable
235
+ raise EOFError, "End of file reached", caller if eof?
236
+ getc
237
+ end
238
+
239
+ def readline
240
+ requireReadable
241
+ raise EOFError, "End of file reached", caller if eof?
242
+ gets
243
+ end
244
+
245
+ def readlines(sep_string=$/)
246
+ requireReadable
247
+ raise EOFError, "End of file reached", caller if eof?
248
+ rc = []
249
+ until eof
250
+ rc << gets(sep_string)
251
+ end
252
+ rc
253
+ end
254
+
255
+ def reopen(string, mode=nil)
256
+ if string.is_a?(self.class) then
257
+ raise ArgumentError, "wrong number of arguments (2 for 1)", caller if !mode.nil?
258
+ @relay = string
259
+ instance_eval(%Q{
260
+ class << self
261
+ @@relayMethods.each { |name|
262
+ define_method(name, ObjectSpace._id2ref(#{@relay.object_id}).method(("original_" + name.to_s).to_sym).to_proc)
263
+ }
264
+ end
265
+ })
266
+ else
267
+ raise ArgumentError, "wrong number of arguments (1 for 2)", caller if mode.nil?
268
+ class << self
269
+ @@relayMethods.each { |name|
270
+ alias_method(name, "original_#{name}".to_sym)
271
+ public name
272
+ }
273
+ @relay = nil
274
+ end unless @relay.nil?
275
+ @sio_string = string.to_s
276
+ @mode = mode
277
+ end
278
+ end
279
+
280
+ def rewind
281
+ @sio_pos = 0
282
+ @sio_lineno = 0
283
+ end
284
+
285
+ def seek(amount, whence=SEEK_SET)
286
+ if whence == SEEK_CUR then
287
+ offset += @sio_pos
288
+ elsif whence == SEEK_END then
289
+ offset += size
290
+ end
291
+ @sio_pos = offset
292
+ end
293
+
294
+ def string
295
+ @sio_string
296
+ end
297
+
298
+ def string=(newstring)
299
+ @sio_string = newstring
300
+ end
301
+
302
+ def sync
303
+ true
304
+ end
305
+
306
+ def sync=(boolean)
307
+ boolean
308
+ end
309
+
310
+ def sysread(length=nil, buffer=nil)
311
+ requireReadable
312
+ raise EOFError, "End of file reached", caller if eof?
313
+ read(length, buffer)
314
+ end
315
+
316
+ def syswrite(string)
317
+ requireWritable
318
+ addition = "\000" * (@sio_string.length - @sio_pos) + string.to_s
319
+ @sio_string[@sio_pos..(addition.length - 1)] = addition
320
+ @sio_pos += addition.size
321
+ addition.size
322
+ end
323
+
324
+ #In ruby 1.8.4 truncate differs from the docs in two ways.
325
+ #First, if an integer greater that the length is given then the string is expanded to the new integer
326
+ #length. As this expansion seems to contain junk characters instead of nulls I suspect this may be a
327
+ #flaw in the C code which could cause a core dump if abused/used.
328
+ #Second, the documentation states that truncate returns 0. It returns the integer instead.
329
+ #This implementation follows the documentation in the first instance as I suspect this will be fixed
330
+ #in the C code. In the second instance, it follows the actions of the C code instead of the docs.
331
+ #This was decided as it causes no immedeate harm and this ruby implentation is to be as compatable
332
+ #as possible with the C version. Should the C version change to match the docs the ruby version
333
+ #will be simple to update as well.
334
+ def truncate(integer)
335
+ requireWritable
336
+ raise Errno::EINVAL, "Invalid argument - negative length", caller if integer < 0
337
+ @sio_string[[integer, @sio_string.length].max..-1] = ""
338
+ integer
339
+ end
340
+
341
+ def ungetc(integer)
342
+ requireWritable
343
+ if @sio_pos > 0 then
344
+ @sio_pos -= 1
345
+ putc(integer)
346
+ @sio_pos -= 1
347
+ end
348
+ end
349
+
350
+ alias :each_line :each
351
+ alias :eof? :eof
352
+ alias :size :length
353
+ alias :tty? :isatty
354
+ alias :tell :pos
355
+ alias :write :syswrite
356
+
357
+ protected
358
+ @@relayMethods.each { |name|
359
+ alias_method("original_#{name}".to_sym, name)
360
+ protected "original_#{name}".to_sym
361
+ }
362
+
363
+ private
364
+
365
+ def requireReadable
366
+ raise IOError, "not opened for reading", caller[1..-1] if @sio_closed_read
367
+ end
368
+
369
+ def requireWritable
370
+ raise IOError, "not opened for writing", caller[1..-1] if @sio_closed_write
371
+ end
372
+
373
+ def requireOpen
374
+ raise IOError, "closed stream", caller[1..-1] if @sio_closed_read && @sio_closed_write
375
+ end
376
+
377
+ end
378
+ end
@@ -0,0 +1,117 @@
1
+ # rijndael-tables.rb Richard Kernahan <kernighan_rich@rubyforge.org>
2
+
3
+ module Crypt
4
+ module RijndaelTables
5
+
6
+ LogTable = [
7
+ 0, 0, 25, 1, 50, 2, 26, 198, 75, 199, 27, 104, 51, 238, 223, 3,
8
+ 100, 4, 224, 14, 52, 141, 129, 239, 76, 113, 8, 200, 248, 105, 28, 193,
9
+ 125, 194, 29, 181, 249, 185, 39, 106, 77, 228, 166, 114, 154, 201, 9, 120,
10
+ 101, 47, 138, 5, 33, 15, 225, 36, 18, 240, 130, 69, 53, 147, 218, 142,
11
+ 150, 143, 219, 189, 54, 208, 206, 148, 19, 92, 210, 241, 64, 70, 131, 56,
12
+ 102, 221, 253, 48, 191, 6, 139, 98, 179, 37, 226, 152, 34, 136, 145, 16,
13
+ 126, 110, 72, 195, 163, 182, 30, 66, 58, 107, 40, 84, 250, 133, 61, 186,
14
+ 43, 121, 10, 21, 155, 159, 94, 202, 78, 212, 172, 229, 243, 115, 167, 87,
15
+ 175, 88, 168, 80, 244, 234, 214, 116, 79, 174, 233, 213, 231, 230, 173, 232,
16
+ 44, 215, 117, 122, 235, 22, 11, 245, 89, 203, 95, 176, 156, 169, 81, 160,
17
+ 127, 12, 246, 111, 23, 196, 73, 236, 216, 67, 31, 45, 164, 118, 123, 183,
18
+ 204, 187, 62, 90, 251, 96, 177, 134, 59, 82, 161, 108, 170, 85, 41, 157,
19
+ 151, 178, 135, 144, 97, 190, 220, 252, 188, 149, 207, 205, 55, 63, 91, 209,
20
+ 83, 57, 132, 60, 65, 162, 109, 71, 20, 42, 158, 93, 86, 242, 211, 171,
21
+ 68, 17, 146, 217, 35, 32, 46, 137, 180, 124, 184, 38, 119, 153, 227, 165,
22
+ 103, 74, 237, 222, 197, 49, 254, 24, 13, 99, 140, 128, 192, 247, 112, 7
23
+ ]
24
+
25
+ AlogTable = [
26
+ 1, 3, 5, 15, 17, 51, 85, 255, 26, 46, 114, 150, 161, 248, 19, 53,
27
+ 95, 225, 56, 72, 216, 115, 149, 164, 247, 2, 6, 10, 30, 34, 102, 170,
28
+ 229, 52, 92, 228, 55, 89, 235, 38, 106, 190, 217, 112, 144, 171, 230, 49,
29
+ 83, 245, 4, 12, 20, 60, 68, 204, 79, 209, 104, 184, 211, 110, 178, 205,
30
+ 76, 212, 103, 169, 224, 59, 77, 215, 98, 166, 241, 8, 24, 40, 120, 136,
31
+ 131, 158, 185, 208, 107, 189, 220, 127, 129, 152, 179, 206, 73, 219, 118, 154,
32
+ 181, 196, 87, 249, 16, 48, 80, 240, 11, 29, 39, 105, 187, 214, 97, 163,
33
+ 254, 25, 43, 125, 135, 146, 173, 236, 47, 113, 147, 174, 233, 32, 96, 160,
34
+ 251, 22, 58, 78, 210, 109, 183, 194, 93, 231, 50, 86, 250, 21, 63, 65,
35
+ 195, 94, 226, 61, 71, 201, 64, 192, 91, 237, 44, 116, 156, 191, 218, 117,
36
+ 159, 186, 213, 100, 172, 239, 42, 126, 130, 157, 188, 223, 122, 142, 137, 128,
37
+ 155, 182, 193, 88, 232, 35, 101, 175, 234, 37, 111, 177, 200, 67, 197, 84,
38
+ 252, 31, 33, 99, 165, 244, 7, 9, 27, 45, 119, 153, 176, 203, 70, 202,
39
+ 69, 207, 74, 222, 121, 139, 134, 145, 168, 227, 62, 66, 198, 81, 243, 14,
40
+ 18, 54, 90, 238, 41, 123, 141, 140, 143, 138, 133, 148, 167, 242, 13, 23,
41
+ 57, 75, 221, 124, 132, 151, 162, 253, 28, 36, 108, 180, 199, 82, 246, 1
42
+ ]
43
+
44
+ S = [
45
+ 99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118,
46
+ 202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192,
47
+ 183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21,
48
+ 4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117,
49
+ 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132,
50
+ 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207,
51
+ 208, 239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168,
52
+ 81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210,
53
+ 205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115,
54
+ 96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219,
55
+ 224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121,
56
+ 231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8,
57
+ 186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138,
58
+ 112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158,
59
+ 225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223,
60
+ 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22
61
+ ]
62
+
63
+ Si = [
64
+ 82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215, 251,
65
+ 124, 227, 57, 130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222, 233, 203,
66
+ 84, 123, 148, 50, 166, 194, 35, 61, 238, 76, 149, 11, 66, 250, 195, 78,
67
+ 8, 46, 161, 102, 40, 217, 36, 178, 118, 91, 162, 73, 109, 139, 209, 37,
68
+ 114, 248, 246, 100, 134, 104, 152, 22, 212, 164, 92, 204, 93, 101, 182, 146,
69
+ 108, 112, 72, 80, 253, 237, 185, 218, 94, 21, 70, 87, 167, 141, 157, 132,
70
+ 144, 216, 171, 0, 140, 188, 211, 10, 247, 228, 88, 5, 184, 179, 69, 6,
71
+ 208, 44, 30, 143, 202, 63, 15, 2, 193, 175, 189, 3, 1, 19, 138, 107,
72
+ 58, 145, 17, 65, 79, 103, 220, 234, 151, 242, 207, 206, 240, 180, 230, 115,
73
+ 150, 172, 116, 34, 231, 173, 53, 133, 226, 249, 55, 232, 28, 117, 223, 110,
74
+ 71, 241, 26, 113, 29, 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, 27,
75
+ 252, 86, 62, 75, 198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, 244,
76
+ 31, 221, 168, 51, 136, 7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95,
77
+ 96, 81, 127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156, 239,
78
+ 160, 224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131, 83, 153, 97,
79
+ 23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12, 125,
80
+ ]
81
+
82
+ IG = [
83
+ [0x0e, 0x09, 0x0d, 0x0b],
84
+ [0x0b, 0x0e, 0x09, 0x0d],
85
+ [0x0d, 0x0b, 0x0e, 0x09],
86
+ [0x09, 0x0d, 0x0b, 0x0e]
87
+ ]
88
+
89
+ Rcon = [
90
+ 0x01, 0x02, 0x04, 0x08, 0x10, 0x20,
91
+ 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8,
92
+ 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc,
93
+ 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4,
94
+ 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91
95
+ ]
96
+
97
+ Shifts = [
98
+ [
99
+ [0, 0],
100
+ [1, 3],
101
+ [2, 2],
102
+ [3, 1]
103
+ ], [
104
+ [0, 0],
105
+ [1, 5],
106
+ [2, 4],
107
+ [3, 3]
108
+ ], [
109
+ [0, 0],
110
+ [1, 7],
111
+ [3, 5],
112
+ [4, 4]
113
+ ]
114
+ ]
115
+
116
+ end
117
+ end