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