Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env ruby
- # Copyright 2013 Jesse Zilstorff
- class Emerald
- def scramble(stream, key, cipher, start)
- last = key.first
- stream.bytes.map.with_index do |byte, index|
- key.unshift(last ^= (index+start) ^ key.pop)
- byte ^ last ^ cipher.getbyte(index)
- end.pack("C*")
- end
- def encrypt(instream, outstream, key)
- blksize = instream.stat.blksize
- buffer = 0x00.chr*blksize
- cipher = scramble(buffer, key, buffer, key.pop)
- subkey = key.pop(key.size/2)
- start = subkey.last
- index = -1
- while instream.read(blksize, buffer)
- subkey.push(start ^= (index+=1) ^ subkey.shift)
- cipher = scramble(buffer, key, cipher, start)
- outstream.write(cipher)
- end
- end
- def decrypt(instream, outstream, key)
- blksize = instream.stat.blksize
- buffer = 0x00.chr*blksize
- cipher = scramble(buffer, key, buffer, key.pop)
- subkey = key.pop(key.size/2)
- start = subkey.last
- index = -1
- while instream.read(blksize, buffer)
- subkey.push(start ^= (index+=1) ^ subkey.shift)
- outstream.write(scramble(buffer, key, cipher, start))
- cipher.replace(buffer)
- end
- end
- end
- Emerald.new.send(
- ARGV.shift,
- File.new(ARGV.shift),
- File.new(ARGV.shift, IO::CREAT|IO::WRONLY),
- "PUT YOUR RANDOM-LOOKING KEY HERE".bytes.to_a
- )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement