require "../bcrypt" require "../blowfish" # :nodoc: class Crypto::Bcrypt::Blowfish < Crypto::Blowfish def enhance_key_schedule(data : Bytes, key : Bytes, cost : Int32) : Nil enhance_key_schedule(data, key) (1_u32 << cost).times do expand_key(key) expand_key(data) end end def enhance_key_schedule(data : Bytes, key : Bytes) : Nil pos = 0 0.upto(17) do |i| @p.to_unsafe[i] ^= next_word(key, pointerof(pos)) end l, r, pos = 0_u32, 0_u32, 0 (0..17).step(2) do |i| l ^= next_word(data, pointerof(pos)) r ^= next_word(data, pointerof(pos)) l, r = encrypt_pair(l, r) @p.to_unsafe[i] = l @p.to_unsafe[i + 1] = r end (0..1023).step(2) do |i| l ^= next_word(data, pointerof(pos)) r ^= next_word(data, pointerof(pos)) l, r = encrypt_pair(l, r) @s.to_unsafe[i] = l @s.to_unsafe[i + 1] = r end end end