iError reporting for bencrypt.c - dedup - deduplicating backup program Err bitreich.org 70 hgit clone git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ URL:git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ bitreich.org 70 1Log /scm/dedup/log.gph bitreich.org 70 1Files /scm/dedup/files.gph bitreich.org 70 1Refs /scm/dedup/refs.gph bitreich.org 70 1Tags /scm/dedup/tag bitreich.org 70 1README /scm/dedup/file/README.gph bitreich.org 70 1LICENSE /scm/dedup/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 9be48e61285e87fff2638f5b2acee3e15a00046c /scm/dedup/commit/9be48e61285e87fff2638f5b2acee3e15a00046c.gph bitreich.org 70 1parent 873ae0109133cf38b38ad3a0466bfed825462b19 /scm/dedup/commit/873ae0109133cf38b38ad3a0466bfed825462b19.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Fri, 3 May 2019 15:11:01 +0100 Err bitreich.org 70 i Err bitreich.org 70 iError reporting for bencrypt.c Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M bencrypt.c | 48 +++++++++++++++++++++++-------- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 36 insertions(+), 12 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/bencrypt.c b/bencrypt.c /scm/dedup/file/bencrypt.c.gph bitreich.org 70 i@@ -99,24 +99,32 @@ becreat(struct bctx *bctx, char *path, int mode, struct bparam *bpar) Err bitreich.org 70 i int type; Err bitreich.org 70 i Err bitreich.org 70 i /* Determine algorithm type */ Err bitreich.org 70 i- if (strcasecmp(bpar->ealgo, "none") == 0) Err bitreich.org 70 i+ if (strcasecmp(bpar->ealgo, "none") == 0) { Err bitreich.org 70 i type = EDNONETYPE; Err bitreich.org 70 i- else if (strcasecmp(bpar->ealgo, "XChaCha20-Poly1305") == 0) Err bitreich.org 70 i+ } else if (strcasecmp(bpar->ealgo, "XChaCha20-Poly1305") == 0) { Err bitreich.org 70 i type = EDCHACHATYPE; Err bitreich.org 70 i- else Err bitreich.org 70 i+ } else { Err bitreich.org 70 i+ bseterr("invalid encryption type: %s", bpar->ealgo); Err bitreich.org 70 i return -1; Err bitreich.org 70 i+ } Err bitreich.org 70 i Err bitreich.org 70 i /* Ensure that if caller requested encryption, a key was provided */ Err bitreich.org 70 i- if (type != EDNONETYPE && bpar->key == NULL) Err bitreich.org 70 i+ if (type != EDNONETYPE && bpar->key == NULL) { Err bitreich.org 70 i+ bseterr("expected encryption key"); Err bitreich.org 70 i return -1; Err bitreich.org 70 i+ } Err bitreich.org 70 i Err bitreich.org 70 i- if (sodium_init() < 0) Err bitreich.org 70 i+ if (sodium_init() < 0) { Err bitreich.org 70 i+ bseterr("crypto library failed to initialize"); Err bitreich.org 70 i return -1; Err bitreich.org 70 i+ } Err bitreich.org 70 i Err bitreich.org 70 i /* Allocate and initialize encryption context */ Err bitreich.org 70 i bctx->ectx = calloc(1, sizeof(struct ectx)); Err bitreich.org 70 i- if (bctx->ectx == NULL) Err bitreich.org 70 i+ if (bctx->ectx == NULL) { Err bitreich.org 70 i+ bseterr("out of memory"); Err bitreich.org 70 i return -1; Err bitreich.org 70 i+ } Err bitreich.org 70 i ectx = bctx->ectx; Err bitreich.org 70 i ectx->type = type; Err bitreich.org 70 i if (bpar->key != NULL) Err bitreich.org 70 i@@ -138,8 +146,10 @@ beopen(struct bctx *bctx, char *path, int flags, int mode, struct bparam *bpar) Err bitreich.org 70 i Err bitreich.org 70 i /* Allocate and initialize encryption context */ Err bitreich.org 70 i bctx->ectx = calloc(1, sizeof(struct ectx)); Err bitreich.org 70 i- if (bctx->ectx == NULL) Err bitreich.org 70 i+ if (bctx->ectx == NULL) { Err bitreich.org 70 i+ bseterr("out of memory"); Err bitreich.org 70 i return -1; Err bitreich.org 70 i+ } Err bitreich.org 70 i ectx = bctx->ectx; Err bitreich.org 70 i if (bpar->key != NULL) Err bitreich.org 70 i memcpy(ectx->key, bpar->key, KEYSIZE); Err bitreich.org 70 i@@ -158,6 +168,7 @@ beopen(struct bctx *bctx, char *path, int flags, int mode, struct bparam *bpar) Err bitreich.org 70 i else { Err bitreich.org 70 i bops->close(bctx); Err bitreich.org 70 i free(ectx); Err bitreich.org 70 i+ bseterr("invalid encryption type: %s", bpar->ealgo); Err bitreich.org 70 i return -1; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -165,6 +176,7 @@ beopen(struct bctx *bctx, char *path, int flags, int mode, struct bparam *bpar) Err bitreich.org 70 i if (ectx->type != EDNONETYPE && bpar->key == NULL) { Err bitreich.org 70 i bops->close(bctx); Err bitreich.org 70 i free(ectx); Err bitreich.org 70 i+ bseterr("expected encryption key"); Err bitreich.org 70 i return -1; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -182,17 +194,21 @@ beput(struct bctx *bctx, void *buf, size_t n, unsigned char *md) Err bitreich.org 70 i Err bitreich.org 70 i /* Calculate size of encrypted block */ Err bitreich.org 70 i ectx = bctx->ectx; Err bitreich.org 70 i- if (ectx->type == EDNONETYPE) Err bitreich.org 70 i+ if (ectx->type == EDNONETYPE) { Err bitreich.org 70 i en = n; Err bitreich.org 70 i- else if (ectx->type == EDCHACHATYPE) Err bitreich.org 70 i+ } else if (ectx->type == EDCHACHATYPE) { Err bitreich.org 70 i en = n + crypto_aead_xchacha20poly1305_ietf_ABYTES; Err bitreich.org 70 i- else Err bitreich.org 70 i+ } else { Err bitreich.org 70 i+ bseterr("invalid encryption type: %d", ectx->type); Err bitreich.org 70 i return -1; Err bitreich.org 70 i+ } Err bitreich.org 70 i Err bitreich.org 70 i /* Allocate encrypted block */ Err bitreich.org 70 i ebuf = malloc(EDSIZE + en); Err bitreich.org 70 i- if (ebuf == NULL) Err bitreich.org 70 i+ if (ebuf == NULL) { Err bitreich.org 70 i+ bseterr("out of memory"); Err bitreich.org 70 i return -1; Err bitreich.org 70 i+ } Err bitreich.org 70 i Err bitreich.org 70 i /* Prepend the encryption descriptor */ Err bitreich.org 70 i ed.type = ectx->type; Err bitreich.org 70 i@@ -204,6 +220,7 @@ beput(struct bctx *bctx, void *buf, size_t n, unsigned char *md) Err bitreich.org 70 i randombytes_buf(ed.nonce, sizeof(ed.nonce)); Err bitreich.org 70 i } else { Err bitreich.org 70 i free(ebuf); Err bitreich.org 70 i+ bseterr("invalid encryption type: %d", ectx->type); Err bitreich.org 70 i return -1; Err bitreich.org 70 i } Err bitreich.org 70 i packed(ebuf, &ed); Err bitreich.org 70 i@@ -220,6 +237,7 @@ beput(struct bctx *bctx, void *buf, size_t n, unsigned char *md) Err bitreich.org 70 i assert(elen == en); Err bitreich.org 70 i } else { Err bitreich.org 70 i free(ebuf); Err bitreich.org 70 i+ bseterr("invalid encryption type: %d", ectx->type); Err bitreich.org 70 i return -1; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -244,8 +262,10 @@ beget(struct bctx *bctx, unsigned char *md, void *buf, size_t *n) Err bitreich.org 70 i /* Calculate maximum size of encrypted block */ Err bitreich.org 70 i size = EDSIZE + *n + crypto_aead_xchacha20poly1305_ietf_ABYTES; Err bitreich.org 70 i ebuf = malloc(size); Err bitreich.org 70 i- if (ebuf == NULL) Err bitreich.org 70 i+ if (ebuf == NULL) { Err bitreich.org 70 i+ bseterr("out of memory"); Err bitreich.org 70 i return -1; Err bitreich.org 70 i+ } Err bitreich.org 70 i Err bitreich.org 70 i /* Read encrypted block */ Err bitreich.org 70 i bops = bstorageops(); Err bitreich.org 70 i@@ -261,6 +281,7 @@ beget(struct bctx *bctx, unsigned char *md, void *buf, size_t *n) Err bitreich.org 70 i dn = ed.size; Err bitreich.org 70 i if (*n < dn) { Err bitreich.org 70 i free(ebuf); Err bitreich.org 70 i+ bseterr("buffer too small"); Err bitreich.org 70 i return -1; Err bitreich.org 70 i } Err bitreich.org 70 i memcpy(buf, &ebuf[EDSIZE], dn); Err bitreich.org 70 i@@ -271,6 +292,7 @@ beget(struct bctx *bctx, unsigned char *md, void *buf, size_t *n) Err bitreich.org 70 i dn = ed.size - crypto_aead_xchacha20poly1305_ietf_ABYTES; Err bitreich.org 70 i if (*n < dn) { Err bitreich.org 70 i free(ebuf); Err bitreich.org 70 i+ bseterr("buffer too small"); Err bitreich.org 70 i return -1; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -281,12 +303,14 @@ beget(struct bctx *bctx, unsigned char *md, void *buf, size_t *n) Err bitreich.org 70 i ebuf, EDSIZE, Err bitreich.org 70 i ed.nonce, ectx->key) < 0) { Err bitreich.org 70 i free(ebuf); Err bitreich.org 70 i+ bseterr("authentication or decryption failed"); Err bitreich.org 70 i return -1; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i assert(dn == dlen); Err bitreich.org 70 i } else { Err bitreich.org 70 i free(ebuf); Err bitreich.org 70 i+ bseterr("invalid encryption type: %d", ed.type); Err bitreich.org 70 i return -1; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 .