@@ -298,7 +298,7 @@ std::array<std::byte, ENCRYPT_KEY_SIZE> encrypt(
298298 bool allow_large) {
299299
300300 std::ifstream in;
301- in.exceptions (std::ios::failbit | std::ios:: badbit);
301+ in.exceptions (std::ios::badbit);
302302 in.open (file, std::ios::binary | std::ios::ate);
303303 size_t size = in.tellg ();
304304 in.seekg (0 , std::ios::beg);
@@ -315,18 +315,25 @@ std::array<std::byte, ENCRYPT_KEY_SIZE> encrypt(
315315
316316 size_t in_size = 0 ;
317317 std::array<std::byte, 4096 > chunk;
318- while (auto sz = in.readsome (reinterpret_cast <char *>(chunk.data ()), chunk.size ())) {
318+ while (in.read (reinterpret_cast <char *>(chunk.data ()), chunk.size ())) {
319319 crypto_generichash_blake2b_update (
320- &b_st, reinterpret_cast <const unsigned char *>(chunk.data ()), sz );
321- in_size += sz ;
320+ &b_st, reinterpret_cast <const unsigned char *>(chunk.data ()), chunk. size () );
321+ in_size += chunk. size () ;
322322 }
323+ if (in.gcount () > 0 ) {
324+ crypto_generichash_blake2b_update (
325+ &b_st, reinterpret_cast <const unsigned char *>(chunk.data ()), in.gcount ());
326+ in_size += in.gcount ();
327+ }
328+
323329 crypto_generichash_blake2b_final (&b_st, nonce_key.data (), nonce_key.size ());
324330
325331 std::array<std::byte, ENCRYPT_KEY_SIZE> key;
326332 std::memcpy (key.data (), nonce_key.data () + ENCRYPT_HEADER, ENCRYPT_KEY_SIZE);
327333
328- in.seekg (0 , std::ios::beg);
329334 in.clear ();
335+ in.exceptions (std::ios::badbit | std::ios::failbit);
336+ in.seekg (0 , std::ios::beg);
330337
331338 auto encrypted = make_buffer (size);
332339 if (encrypted.size () != size)
@@ -799,7 +806,7 @@ size_t decrypt(
799806 std::function<std::span<std::byte>(size_t dec_size)> make_buffer) {
800807
801808 std::ifstream in;
802- in.exceptions (std::ios::failbit | std::ios:: badbit);
809+ in.exceptions (std::ios::badbit);
803810 in.open (encrypted_file, std::ios::binary | std::ios::ate);
804811 size_t size = in.tellg ();
805812 in.seekg (0 , std::ios::beg);
@@ -825,8 +832,11 @@ size_t decrypt(
825832 }};
826833
827834 std::array<std::byte, 4096 > chunk;
828- while (auto sz = in.readsome (reinterpret_cast <char *>(chunk.data ()), chunk.size ()))
829- d.update (std::span{chunk}.first (sz));
835+ while (in.read (reinterpret_cast <char *>(chunk.data ()), chunk.size ()))
836+ d.update (chunk);
837+ if (in.gcount () > 0 )
838+ d.update (std::span{chunk}.first (in.gcount ()));
839+
830840 d.finalize ();
831841
832842 return decrypted - out.begin ();
@@ -852,7 +862,7 @@ void decrypt(
852862
853863 try {
854864 std::ifstream in;
855- in.exceptions (std::ios::failbit | std::ios:: badbit);
865+ in.exceptions (std::ios::badbit);
856866 in.open (file_in, std::ios::binary | std::ios::ate);
857867 size_t size = in.tellg ();
858868 in.seekg (0 , std::ios::beg);
@@ -871,8 +881,10 @@ void decrypt(
871881 }};
872882
873883 std::array<std::byte, 4096 > chunk;
874- while (auto sz = in.readsome (reinterpret_cast <char *>(chunk.data ()), chunk.size ()))
875- d.update (std::span{chunk}.first (sz));
884+ while (in.read (reinterpret_cast <char *>(chunk.data ()), chunk.size ()))
885+ d.update (chunk);
886+ if (in.gcount () > 0 )
887+ d.update (std::span{chunk}.first (in.gcount ()));
876888 d.finalize ();
877889 } catch (const std::exception& e) {
878890 std::error_code ec;
0 commit comments