module Zip::TraditionalEncryption
def decrypt_byte
def decrypt_byte temp = (@key2 & 0xffff) | 2 ((temp * (temp ^ 1)) >> 8) & 0xff end
def gp_flags
def gp_flags 0x0001 | 0x0008 end
def header_bytesize
def header_bytesize 12 end
def initialize(password)
def initialize(password) @password = password reset_keys! end
def reset_keys!
def reset_keys! @key0 = 0x12345678 @key1 = 0x23456789 @key2 = 0x34567890 @password.each_byte do |byte| update_keys(byte.chr) end end
def update_keys(num)
def update_keys(num) @key0 = ~Zlib.crc32(num, ~@key0) @key1 = ((@key1 + (@key0 & 0xff)) * 134_775_813 + 1) & 0xffffffff @key2 = ~Zlib.crc32((@key1 >> 24).chr, ~@key2) end