static tfc_byte svctr[TF_BLOCK_SIZE];
static tfc_fsize rwd, do_read_loops, loopcnt;
+static tfc_yesno unbuffered;
static void open_log(const char *logfile)
{
ctr_mode = TFC_MODE_STREAM;
else if (!strcasecmp(optarg, "cbc"))
ctr_mode = TFC_MODE_CBC;
+ else if (!strcasecmp(optarg, "pcbc"))
+ ctr_mode = TFC_MODE_PCBC;
else if (!strcasecmp(optarg, "ecb"))
ctr_mode = TFC_MODE_ECB;
else if (!strcasecmp(optarg, "xts"))
show_when_done = YES;
else if (!strcmp(s, "pid"))
show_pid = YES;
+ else if (!strcmp(s, "nobuf")) {
+ if (!tfc_is_freestream(ctr_mode)) xerror(NO, YES, YES,
+ "cannot activate unbuffered mode for non-stream cipher mode %s!",
+ tfc_modename(ctr_mode));
+ else unbuffered = YES;
+ }
else if (!strncmp(s, "readloops", 9) && *(s+9) == '=') {
do_read_loops = tfc_humanfsize(s+10, &stoi);
if (!str_empty(stoi)) do_read_loops = NOSIZE;
"%s: invalid block size value", s);
}
else blksize = (size_t)tfc_modifysize((tfc_fsize)blksize, strchr(s, ':'));
- if (!tfc_is_stream(ctr_mode) && blksize < TF_BLOCK_SIZE) xerror(NO, YES, YES,
+ if (!tfc_is_freestream(ctr_mode) && blksize < TF_BLOCK_SIZE) xerror(NO, YES, YES,
"%s: block size is lesser than TF_BLOCK_SIZE (%u bytes)", s, TFC_U(TF_BLOCK_SIZE));
if (blksize > TFC_BLKSIZE) xerror(NO, YES, YES,
"%s: block size exceeds %u bytes",
|| !memcmp(progname+5, "sum", 3)
|| !memcmp(progname+6, "sum", 3)))))
do_sksum(progname, argv+optind);
- if (!strcmp(progname, "tfbase64")) do_edbase64(argv+optind);
+ if (!strcmp(progname, "base64")) do_edbase64(argv+optind);
idx = optind;
default: xerror(NO, NO, NO, "%s", srcfname); break;
}
}
- if (lio && lio < lrem) {
+ if (unbuffered == NO && lio && lio < lrem) {
pblk += lio;
lrem -= lio;
goto _ragain;
tf_cbc_encrypt(key, ctr, dstblk, srcblk, ldone);
else if (ctr_mode == TFC_MODE_CBC && do_edcrypt == TFC_DO_DECRYPT)
tf_cbc_decrypt(key, ctr, dstblk, srcblk, ldone);
+ else if (ctr_mode == TFC_MODE_PCBC && do_edcrypt == TFC_DO_ENCRYPT)
+ tf_pcbc_encrypt(key, ctr, dstblk, srcblk, ldone);
+ else if (ctr_mode == TFC_MODE_PCBC && do_edcrypt == TFC_DO_DECRYPT)
+ tf_pcbc_decrypt(key, ctr, dstblk, srcblk, ldone);
else if (ctr_mode == TFC_MODE_PLAIN)
memcpy(dstblk, srcblk, ldone);
else if (ctr_mode == TFC_MODE_XTS) tf_xts_decrypt(key, xtskey, ctr, tmpdata, macvrfy, TF_FROM_BITS(macbits), xtsblocks);
else if (ctr_mode == TFC_MODE_ECB) tf_ecb_decrypt(key, tmpdata, macvrfy, TF_FROM_BITS(macbits));
else if (ctr_mode == TFC_MODE_CBC) tf_cbc_decrypt(key, ctr, tmpdata, macvrfy, TF_FROM_BITS(macbits));
+ else if (ctr_mode == TFC_MODE_PCBC) tf_pcbc_decrypt(key, ctr, tmpdata, macvrfy, TF_FROM_BITS(macbits));
if (!memcmp(tmpdata, macresult, TF_FROM_BITS(macbits))) {
if (quiet == NO) {
else if (ctr_mode == TFC_MODE_XTS) tf_xts_encrypt(key, xtskey, ctr, tmpdata, macresult, TF_FROM_BITS(macbits), xtsblocks);
else if (ctr_mode == TFC_MODE_ECB) tf_ecb_encrypt(key, tmpdata, macresult, TF_FROM_BITS(macbits));
else if (ctr_mode == TFC_MODE_CBC) tf_cbc_encrypt(key, ctr, tmpdata, macresult, TF_FROM_BITS(macbits));
+ else if (ctr_mode == TFC_MODE_PCBC) tf_pcbc_encrypt(key, ctr, tmpdata, macresult, TF_FROM_BITS(macbits));
memset(macresult, 0, sizeof(macresult));
if (!do_mac_file) {