You should release resources acquired on exceptions, here you leave a file
handle hanging. I'm pretty sure the error you get is related to that. Reworked
code which should properly cleanup after itself
proc encryptFile(key, key_hash, input_file, output_file: string) =
#var buf: seq[uint8]
echo input_file
echo output_file
var bufSize: int = 1000
var source = newFileStream(input_file, fmRead)
var dest = newFileStream(output_file, fmWrite)
try:
dest.write(key_hash)
# encrypt 1st mb
#var buf_enc: seq[uint8] = @[]
var bytes_temp = source.readStr(1000000)
var bytes_enc = crypto_secretbox_easy(key, bytes_temp)
dest.write(bytes_enc)
# var iters = 1
# while source.atEnd == false or iters <= 1000:
# var bytes_temp = source.readStr(1000)
# dest.write(crypto_secretbox_easy(key, bytes_temp))
# iters = iters + 1
# copy the rest
#var buf: seq[uint8] = @[]
var buf: seq[uint8] = @[]
buf.setLen(bufSize)
while source.atEnd == false:
var bytes = source.readData(buf[0].addr, bufSize)
if bytes == 0:
break
dest.writeData(buf[0].addr, bytes)
except:
echo "Unknown exception!"
finally: # Always release resources
source.close
dest.close
Run