Advertisement
Jessehz

emerald.rb

Sep 11th, 2013
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.25 KB | None | 0 0
  1. #!/usr/bin/env ruby
  2. # Copyright 2013 Jesse Zilstorff
  3.  
  4. class Emerald
  5.     def scramble(stream, key, cipher, start)
  6.         last = key.first
  7.         stream.bytes.map.with_index do |byte, index|
  8.             key.unshift(last ^= (index+start) ^ key.pop)
  9.             byte ^ last ^ cipher.getbyte(index)
  10.         end.pack("C*")
  11.     end
  12.     def encrypt(instream, outstream, key)
  13.         blksize = instream.stat.blksize
  14.         buffer = 0x00.chr*blksize
  15.         cipher = scramble(buffer, key, buffer, key.pop)
  16.         subkey = key.pop(key.size/2)
  17.         start = subkey.last
  18.         index = -1
  19.         while instream.read(blksize, buffer)
  20.             subkey.push(start ^= (index+=1) ^ subkey.shift)
  21.             cipher = scramble(buffer, key, cipher, start)
  22.             outstream.write(cipher)
  23.         end
  24.     end
  25.     def decrypt(instream, outstream, key)
  26.         blksize = instream.stat.blksize
  27.         buffer = 0x00.chr*blksize
  28.         cipher = scramble(buffer, key, buffer, key.pop)
  29.         subkey = key.pop(key.size/2)
  30.         start = subkey.last
  31.         index = -1
  32.         while instream.read(blksize, buffer)
  33.             subkey.push(start ^= (index+=1) ^ subkey.shift)
  34.             outstream.write(scramble(buffer, key, cipher, start))
  35.             cipher.replace(buffer)
  36.         end
  37.     end
  38. end
  39.  
  40. Emerald.new.send(
  41.     ARGV.shift,
  42.     File.new(ARGV.shift),
  43.     File.new(ARGV.shift, IO::CREAT|IO::WRONLY),
  44.     "PUT YOUR RANDOM-LOOKING KEY HERE".bytes.to_a
  45. )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement