projects
/
tfcrypt.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
tfcrypt: fix "-M mac -u" failing to decrypt data due to missing ctr.
[tfcrypt.git]
/
tfc_base64.c
diff --git
a/tfc_base64.c
b/tfc_base64.c
index b92ac9676a3bc567aaf97f167201cb1bb1b0e8d0..b2edcbc7e705cb4ed7a3f8d854cef937c01edc19 100644
(file)
--- a/
tfc_base64.c
+++ b/
tfc_base64.c
@@
-2,7
+2,7
@@
* tfcrypt -- high security Threefish encryption tool.
*
* tfcrypt is copyrighted:
* tfcrypt -- high security Threefish encryption tool.
*
* tfcrypt is copyrighted:
- * Copyright (C) 2012-201
8
Andrey Rys. All rights reserved.
+ * Copyright (C) 2012-201
9
Andrey Rys. All rights reserved.
*
* tfcrypt is licensed to you under the terms of std. MIT/X11 license:
*
*
* tfcrypt is licensed to you under the terms of std. MIT/X11 license:
*
@@
-28,18
+28,22
@@
#include "tfcrypt.h"
#include "tfcrypt.h"
+enum { TFB64_STOP1 = 1, TFB64_STOPF };
+
void do_edbase64(char **fargv)
{
struct base64_decodestate dstate;
struct base64_encodestate estate;
size_t lread = 0;
void do_edbase64(char **fargv)
{
struct base64_decodestate dstate;
struct base64_encodestate estate;
size_t lread = 0;
+ xexit_no_nl = YES;
+
sfd = 0; dfd = 1;
if (fargv[0]) {
if (!strcmp(fargv[0], "-")) sfd = 0;
else {
sfd = 0; dfd = 1;
if (fargv[0]) {
if (!strcmp(fargv[0], "-")) sfd = 0;
else {
- sfd = open(fargv[0], O_RDONLY | O_LARGEFILE);
+ sfd =
x
open(fargv[0], O_RDONLY | O_LARGEFILE);
if (do_preserve_time) if (fstat(sfd, &s_stat) == -1)
xerror(YES, NO, YES, "stat(%s)", fargv[0]);
}
if (do_preserve_time) if (fstat(sfd, &s_stat) == -1)
xerror(YES, NO, YES, "stat(%s)", fargv[0]);
}
@@
-48,8
+52,7
@@
void do_edbase64(char **fargv)
if (fargv[0] && fargv[1]) {
if (!strcmp(fargv[1], "-")) dfd = 1;
if (fargv[0] && fargv[1]) {
if (!strcmp(fargv[1], "-")) dfd = 1;
- else dfd = open(fargv[1], O_WRONLY | O_CREAT | O_LARGEFILE | write_flags, 0666);
- if (dfd == -1) xerror(NO, NO, YES, "%s", fargv[1]);
+ else dfd = xopen(fargv[1], O_WRONLY | O_CREAT | O_LARGEFILE | write_flags);
}
if (do_edcrypt == TFC_DO_ENCRYPT) {
}
if (do_edcrypt == TFC_DO_ENCRYPT) {
@@
-68,8
+71,9
@@
void do_edbase64(char **fargv)
pblk = srcblk;
lblock = lrem = do_edcrypt == TFC_DO_DECRYPT ? TFC_B64_DWIDTH : TFC_B64_EWIDTH;
ldone = 0;
pblk = srcblk;
lblock = lrem = do_edcrypt == TFC_DO_DECRYPT ? TFC_B64_DWIDTH : TFC_B64_EWIDTH;
ldone = 0;
-_again: lio = read(sfd, pblk, lrem);
- if (lio == 0) do_stop = YES;
+ if (error_action == TFC_ERRACT_SYNC) rdpos = tfc_fdgetpos(sfd);
+_again: lio = xread(sfd, pblk, lrem);
+ if (lio == 0) do_stop = TFB64_STOP1;
if (lio != NOSIZE) ldone += lio;
else {
if (errno != EIO && catch_all_errors != YES)
if (lio != NOSIZE) ldone += lio;
else {
if (errno != EIO && catch_all_errors != YES)
@@
-77,10
+81,12
@@
_again: lio = read(sfd, pblk, lrem);
switch (error_action) {
case TFC_ERRACT_CONT: xerror(YES, NO, NO, "%s", fargv[0]); goto _again; break;
case TFC_ERRACT_SYNC:
switch (error_action) {
case TFC_ERRACT_CONT: xerror(YES, NO, NO, "%s", fargv[0]); goto _again; break;
case TFC_ERRACT_SYNC:
+ case TFC_ERRACT_LSYNC:
xerror(YES, NO, NO, "%s", fargv[0]);
lio = ldone = lrem = lblock;
memset(srcblk, 0, lio);
xerror(YES, NO, NO, "%s", fargv[0]);
lio = ldone = lrem = lblock;
memset(srcblk, 0, lio);
- lseek(sfd, lio, SEEK_CUR);
+ if (rdpos == NOFSIZE) lseek(sfd, lio, SEEK_CUR);
+ else lseek(sfd, rdpos + lio, SEEK_SET);
break;
default: xerror(NO, NO, NO, "%s", fargv[0]); break;
}
break;
default: xerror(NO, NO, NO, "%s", fargv[0]); break;
}
@@
-105,18
+111,18
@@
_again: lio = read(sfd, pblk, lrem);
pblk = dstblk;
if (ldone == 0) {
pblk = dstblk;
if (ldone == 0) {
- do_stop = TF
C_STOP_FULL
;
+ do_stop = TF
B64_STOPF
;
break;
}
lrem = ldone;
ldone = 0;
break;
}
lrem = ldone;
ldone = 0;
-_wagain: lio = write(dfd, pblk, lrem);
+_wagain: lio =
x
write(dfd, pblk, lrem);
if (lio != NOSIZE) ldone += lio;
else xerror(NO, NO, NO, "%s", fargv[1]);
if (do_edcrypt == TFC_DO_ENCRYPT) {
size_t t;
if (lio != NOSIZE) ldone += lio;
else xerror(NO, NO, NO, "%s", fargv[1]);
if (do_edcrypt == TFC_DO_ENCRYPT) {
size_t t;
- if (lread >= lblock || do_stop == TF
C_STOP_FULL
) {
- t = write(dfd, "\n", 1);
+ if (lread >= lblock || do_stop == TF
B64_STOPF
) {
+ t =
x
write(dfd, "\n", 1);
if (t != NOSIZE) lio += t;
else lio = NOSIZE;
}
if (t != NOSIZE) lio += t;
else lio = NOSIZE;
}
@@
-131,19
+137,18
@@
_wagain: lio = write(dfd, pblk, lrem);
}
}
}
}
- if (do_edcrypt == TFC_DO_ENCRYPT && do_stop == TF
C_STOP_BEGAN
) {
+ if (do_edcrypt == TFC_DO_ENCRYPT && do_stop == TF
B64_STOP1
) {
size_t t = estate.count;
pblk = dstblk + estate.count;
base64_encode_blockend((char *)dstblk, &estate);
lrem = estate.count - t;
ldone = 0;
size_t t = estate.count;
pblk = dstblk + estate.count;
base64_encode_blockend((char *)dstblk, &estate);
lrem = estate.count - t;
ldone = 0;
- do_stop = TF
C_STOP_FULL
;
+ do_stop = TF
B64_STOPF
;
goto _wagain;
}
memset(&estate, 0, sizeof(struct base64_encodestate));
memset(&dstate, 0, sizeof(struct base64_decodestate));
goto _wagain;
}
memset(&estate, 0, sizeof(struct base64_encodestate));
memset(&dstate, 0, sizeof(struct base64_decodestate));
- if (do_preserve_time) fcopy_matime(dfd, &s_stat);
xexit(0);
}
xexit(0);
}