Initial catchat commit.
This commit is contained in:
commit
8b30fe923c
9 changed files with 460 additions and 0 deletions
81
image_utils.rb
Normal file
81
image_utils.rb
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
require "./pixel_image.rb"
|
||||
require "digest"
|
||||
|
||||
class ImageUtils
|
||||
@@magickImg = nil
|
||||
@@pixelImg = nil
|
||||
|
||||
@@password = ""
|
||||
@@message = ""
|
||||
|
||||
@@hash = nil
|
||||
|
||||
def initialize(pass, msg, i)
|
||||
@@password = pass
|
||||
@@message = msg
|
||||
|
||||
if msg.length > 400 then
|
||||
puts "Maximum length exceeded. Exiting."
|
||||
exit
|
||||
end
|
||||
|
||||
@@magickImg = i
|
||||
|
||||
@@pixelImg = PixelImage.new(@@magickImg)
|
||||
|
||||
self.generateHash
|
||||
end
|
||||
|
||||
def getImage
|
||||
return @@pixelImg
|
||||
end
|
||||
|
||||
def generateHash
|
||||
h = Digest::SHA512.hexdigest(@@password)
|
||||
s = @@pixelImg.getSalt
|
||||
|
||||
merge_to_i = h + s
|
||||
|
||||
@@hash = Digest::SHA512.hexdigest(h+s)
|
||||
end
|
||||
|
||||
def generateLookupTable
|
||||
tbl = []
|
||||
|
||||
hash_bits = @@pixelImg.getBits(@@hash)
|
||||
msg_bits = @@pixelImg.getBits(@@message)
|
||||
|
||||
# gross, but pad in the 24 bits that will become the msg length
|
||||
# and padding bits...
|
||||
msg_bits = msg_bits << 24
|
||||
|
||||
while msg_bits > 0 do
|
||||
loc = nil
|
||||
|
||||
loop do
|
||||
x = (hash_bits.to_i % @@pixelImg.getSize[:width])
|
||||
y = (hash_bits.to_i % @@pixelImg.getSize[:height])
|
||||
|
||||
loc = {"x": x, "y": y}
|
||||
|
||||
break if !tbl.include?(loc)
|
||||
hash_bits = hash_bits >> 1
|
||||
|
||||
if hash_bits <= 0 then
|
||||
puts
|
||||
puts "wow too much data"
|
||||
puts "leftover bits: " + msg_bits.to_s(36)
|
||||
exit
|
||||
end
|
||||
end
|
||||
|
||||
hash_bits = hash_bits >> 1
|
||||
|
||||
tbl.push(loc)
|
||||
|
||||
msg_bits = msg_bits >> 6
|
||||
end
|
||||
|
||||
return tbl
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue