mirror of
https://github.com/cyberarm/w3d_hub_linux_launcher.git
synced 2026-09-19 23:03:53 +00:00
Manifest package verification now works and partial package downloads (resumed downloads)
This commit is contained in:
@@ -31,32 +31,32 @@ module W3DHubLauncher
|
||||
|
||||
# checksum whole file and file chunks until a mismatch occurs or the whole file is verified.
|
||||
def verify_file(filename)
|
||||
return false unless File.exist?(filename) && !File.directory?(filename)
|
||||
|
||||
file_size = File.size(filename)
|
||||
|
||||
checksum_chunks = {}
|
||||
overall_checksum = ""
|
||||
overall_digest = Digest::SHA256.new
|
||||
chunk_digest = Digest::SHA256.new
|
||||
|
||||
File.open(filename, "rb") do |f|
|
||||
f.pos = 0
|
||||
offset = 0
|
||||
last_valid_offset = 0
|
||||
|
||||
while (chunk = f.read(@checksum_chunk_size))
|
||||
|
||||
overall_digest << chunk
|
||||
|
||||
checksum_chunks[offset] = chunk_digest.update(chunk).hexdigest.upcase
|
||||
# return last valid chunk on invalid chunk
|
||||
return last_valid_offset unless @checksum_chunks[offset.to_s] == chunk_digest.update(chunk).hexdigest.upcase
|
||||
|
||||
last_valid_offset = offset
|
||||
offset += @checksum_chunk_size
|
||||
chunk_digest.reset
|
||||
end
|
||||
end
|
||||
|
||||
overall_checksum = overall_digest.hexdigest.upcase
|
||||
|
||||
# FIXME: Make this a nice Data struct object
|
||||
[overall_checksum, checksum_chunks, file_size]
|
||||
# return boolean after completely digesting file
|
||||
@sha256_checksum == overall_digest.hexdigest.upcase
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user