write_flags |= O_SYNC;
else if (!strcmp(s, "trunc"))
write_flags |= O_TRUNC;
+ else if (!strcmp(s, "append"))
+ write_flags |= O_APPEND;
else if (!strcmp(s, "fsync"))
do_fsync = YES;
else if (!strcmp(s, "pad"))
}
if (sfd == -1) xerror(NO, NO, YES, "%s", argv[idx]);
- if (do_edcrypt == TFC_DO_DECRYPT && do_mac != NO && maxlen != NOFSIZE) {
- if (verbose) tfc_esay("%s: disabling signature verification on "
- "requested partial decryption.", tfc_format_pid(progname));
- do_mac = NO;
- }
-
- if ((do_mac >= TFC_MAC_VRFY || do_mac == TFC_MAC_DROP) && !do_mac_file) {
+ if ((do_mac >= TFC_MAC_VRFY || do_mac <= TFC_MAC_DROP) && !do_mac_file) {
maxlen = tfc_fdsize(sfd);
if (maxlen == NOFSIZE)
xerror(NO, YES, YES,
xexit(0);
}
- if (iseek_blocks && (do_edcrypt == TFC_DO_DECRYPT && do_mac != NO)) {
- if (verbose) tfc_esay("%s: disabling signature verification on "
- "requested partial decryption.", tfc_format_pid(progname));
- do_mac = NO;
- }
-
if (do_mac != NO) {
if (mackey_opt == TFC_MACKEY_RAWKEY) skein(mackey, TF_MAX_BITS, key, key, TF_FROM_BITS(TFC_KEY_BITS));
if (ctr_mode < TFC_MODE_OCB) {
lrem -= lio;
goto _ctrwagain;
}
+ total_written_dst += ldone;
total_processed_dst += ldone;
delta_processed += ldone;
}
}
}
+ if (verbose && status_timer && do_statline_dynamic == YES && statline_was_shown == YES) tfc_esay("\n");
+
errno = 0;
if (do_mac >= TFC_MAC_VRFY) {
if (!do_mac_file) {
}
if (do_mac == TFC_MAC_JUST_VRFY2) {
if (verbose) tfc_esay("%s: -u: MAC signature is valid, proceeding with decrypting it again", tfc_format_pid(progname));
- do_mac = TFC_MAC_DROP;
+ maxlen = total_processed_src - SKEIN_DIGEST_SIZE;
+ do_mac = TFC_MAC_DROP2;
goto _decrypt_again_vrfy2;
}
}
memset(macresult, 0, sizeof(macresult));
memset(tmpdata, 0, sizeof(tmpdata));
}
-
else if (do_mac == TFC_MAC_SIGN) {
if (ctr_mode < TFC_MODE_OCB) skein_final(macresult, &sk);
else skein(macresult, macbits, mackey, macresult, TF_FROM_BITS(macbits));
lrem -= lio;
goto _macwagain;
}
+ total_written_dst += ldone;
total_processed_dst += ldone;
delta_processed += ldone;
}
memset(macresult, 0, sizeof(macresult));
memset(tmpdata, 0, sizeof(tmpdata));
}
+ else if (do_mac == TFC_MAC_DROP2) total_processed_src += SKEIN_DIGEST_SIZE;
if (verbose || status_timer || (do_stop == YES && quiet == NO)) print_crypt_status(0);