# -*- coding: binary -*-
require_relative "nodekey"

module Rex
module Registry

class LFBlock

	attr_accessor :number_of_keys, :hash_records, :children

	def initialize(hive_blob, offset)
		offset = offset + 4
		lf_header = hive_blob[offset, 2]

		if lf_header !~ /lf/ && lf_header !~ /lh/
			return
		end

		@number_of_keys = hive_blob[offset + 0x02, 2].unpack('C').first

		@hash_records = []
		@children = []

		hash_offset = offset + 0x04

		1.upto(@number_of_keys) do |h|

			hash = LFHashRecord.new(hive_blob, hash_offset)

			@hash_records << hash

			hash_offset = hash_offset + 0x08

			@children << NodeKey.new(hive_blob, hash.nodekey_offset + 0x1000)
		end
	end
end

class LFHashRecord

	attr_accessor :nodekey_offset, :nodekey_name_verification

	def initialize(hive_blob, offset)
		@nodekey_offset = hive_blob[offset, 4].unpack('l').first
		@nodekey_name_verification = hive_blob[offset+0x04, 4].to_s
	end

end

end
end
