if (!isatty(2)) do_statline_dynamic = NO;
+ s = (char *)srcblk;
+ d = getenv("HOME");
+ if (!d) d = "";
+ n = PATH_MAX > sizeof(srcblk) ? sizeof(srcblk) : PATH_MAX;
+ if (xstrlcpy(s, d, n) >= n) goto _baddfname;
+ if (xstrlcat(s, "/.tfcrypt.defs", n) >= n) goto _baddfname;
+ read_defaults(s, YES);
+_baddfname:
+ memset(s, 0, n);
+
opterr = 0;
- while ((c = getopt(argc, argv, "s:aU:C:r:K:t:TPkzxc:l:qedn:vV:pwE:O:S:AmM:R:Z:WHD:")) != -1) {
+ while ((c = getopt(argc, argv, "L:s:aU:C:r:K:t:TPkzxc:l:qedn:vV:pwE:O:S:AmM:R:Z:WHD:")) != -1) {
switch (c) {
+ case 'L':
+ read_defaults(optarg, NO);
+ break;
case 's':
saltf = optarg;
break;
counter_opt = TFC_CTR_HEAD;
else if (!strcasecmp(optarg, "rand"))
counter_opt = TFC_CTR_RAND;
+ else if (!strcasecmp(optarg, "zero"))
+ counter_opt = TFC_CTR_ZERO;
else counter_file = sksum_hashlist_file = optarg;
break;
case 'C':
break;
case 't':
tweakf = optarg;
+ do_full_key = NO;
break;
case 'T':
tfc_saltsz = 0;
- do_tfcrypt1 = YES;
+ do_full_key = NO;
break;
case 'l':
if (maxlen != NOFSIZE) break;
xerror(NO, YES, YES, "Cannot encrypt and read CTR from source!");
if (overwrite_source && counter_opt == TFC_CTR_RAND)
xerror(NO, YES, YES, "Cannot embed a CTR into file when overwriting it!");
- if (tweakf && do_tfcrypt1 == NO)
- xerror(NO, YES, YES, "Use -T with -t tweakfile to enable old tfcrypt mode!");
if (ctr_mode == TFC_MODE_PLAIN
&& (do_edcrypt || do_mac || rawkey
|| mackey_opt || counter_opt || counter_file))
else password = YES;
errno = 0;
- if (do_tfcrypt1 == YES && tweakf) {
+ if (do_full_key == NO && tweakf) {
int twfd;
if (!strcmp(tweakf, "-")) twfd = 0;
else twfd = open(tweakf, O_RDONLY | O_LARGEFILE);
if (twfd == -1) xerror(NO, NO, YES, "%s", tweakf);
- lio = ldone = xread(twfd, key+TF_FROM_BITS(TF_MAX_BITS)+TF_SIZE_UNIT, 2*TF_SIZE_UNIT);
+ lio = ldone = xread(twfd, tweak, TF_TWEAK_SIZE);
if (lio == NOSIZE) xerror(NO, NO, YES, "%s", tweakf);
- if (ldone < 2*TF_SIZE_UNIT)
- xerror(NO, NO, YES, "%s: %zu bytes tweak required", tweakf, 2*TF_SIZE_UNIT);
+ if (ldone < TF_TWEAK_SIZE)
+ xerror(NO, NO, YES, "%s: %zu bytes tweak required", tweakf, TF_TWEAK_SIZE);
xclose(twfd);
}
tf_convkey(key);
if (ctr_mode == TFC_MODE_XTS) tf_convkey(xtskey);
- if (do_tfcrypt1 == YES) {
- if (!tweakf) skein(key+TF_FROM_BITS(TF_MAX_BITS)+TF_SIZE_UNIT, 2*TF_UNIT_BITS, NULL, key, TF_FROM_BITS(TFC_KEY_BITS));
- tf_key_tweak_compat(key);
+ if (do_full_key == NO) {
+ if (!tweakf) skein(tweak, TF_NR_TWEAK_BITS, NULL, key, TF_FROM_BITS(TFC_KEY_BITS));
+ tf_tweak_set(key, tweak);
}
if (ctr_mode == TFC_MODE_ECB) goto _ctrskip2;
tfc_data_to_words64(&iseek_blocks, sizeof(iseek_blocks));
tf_ctr_set(ctr, &iseek_blocks, sizeof(iseek_blocks));
- if (ctr_mode == TFC_MODE_STREAM) tfe_init_iv(&tfe, key, ctr);
-
switch (counter_opt) {
case TFC_CTR_SHOW:
switch (do_outfmt) {
}
break;
case TFC_CTR_RAND: tfc_getrandom(ctr, ctrsz); break;
+ case TFC_CTR_ZERO: memset(ctr, 0, ctrsz); break;
}
_ctrskip2:
delta_processed += ldone;
}
+ if (ctr_mode == TFC_MODE_STREAM) tfe_init_iv(&tfe, key, ctr);
+
errno = 0;
do_stop = NO;
while (1) {