SMOLNET PORTAL home about changes
iMove hashing to top layer - 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 4d8c3d50ca614a40275ad223fdfd31fd897b9627	/scm/dedup/commit/4d8c3d50ca614a40275ad223fdfd31fd897b9627.gph	bitreich.org	70
1parent c3a040a2db7964be918a34acc35db912431757b1	/scm/dedup/commit/c3a040a2db7964be918a34acc35db912431757b1.gph	bitreich.org	70
hAuthor: sin <sin@2f30.org>	URL:mailto:sin@2f30.org	bitreich.org	70
iDate:   Tue, 14 May 2019 13:05:50 +0300	Err	bitreich.org	70
i	Err	bitreich.org	70
iMove hashing to top layer	Err	bitreich.org	70
i	Err	bitreich.org	70
iThe hash of the block should be the hash of the plaintext block.  This	Err	bitreich.org	70
iis because when encryption is enabled the final block is always	Err	bitreich.org	70
idifferent even if it contained the same data originally.  This is due	Err	bitreich.org	70
ito the fact that each encrypted block contains a unique nonce.	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M bcompress.c                         |       9 ---------	Err	bitreich.org	70
i  M bencrypt.c                          |       9 ---------	Err	bitreich.org	70
i  M block.c                             |      58 ++++++++++++++++++++++++++++++-	Err	bitreich.org	70
i  M block.h                             |       1 -	Err	bitreich.org	70
i  M bstorage.c                          |      79 +------------------------------	Err	bitreich.org	70
i	Err	bitreich.org	70
i5 files changed, 58 insertions(+), 98 deletions(-)	Err	bitreich.org	70
i---	Err	bitreich.org	70
1diff --git a/bcompress.c b/bcompress.c	/scm/dedup/file/bcompress.c.gph	bitreich.org	70
i@@ -36,7 +36,6 @@ static int bcput(struct bctx *bctx, void *buf, size_t n, unsigned char *md);	Err	bitreich.org	70
i static int bcget(struct bctx *bctx, unsigned char *md, void *buf, size_t *n);	Err	bitreich.org	70
i static int bcrm(struct bctx *bctx, unsigned char *md);	Err	bitreich.org	70
i static int bcgc(struct bctx *bctx);	Err	bitreich.org	70
i-static int bccheck(struct bctx *bctx, unsigned char *md);	Err	bitreich.org	70
i static int bcsync(struct bctx *bctx);	Err	bitreich.org	70
i static int bcclose(struct bctx *bctx);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -47,7 +46,6 @@ static struct bops bops = {	Err	bitreich.org	70
i         .get = bcget,	Err	bitreich.org	70
i         .rm = bcrm,	Err	bitreich.org	70
i         .gc = bcgc,	Err	bitreich.org	70
i-        .check = bccheck,	Err	bitreich.org	70
i         .sync = bcsync,	Err	bitreich.org	70
i         .close = bcclose,	Err	bitreich.org	70
i };	Err	bitreich.org	70
i@@ -318,13 +316,6 @@ bcgc(struct bctx *bctx)	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i static int	Err	bitreich.org	70
i-bccheck(struct bctx *bctx, unsigned char *md)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        return bencryptops()->check(bctx, md);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-static int	Err	bitreich.org	70
i bcsync(struct bctx *bctx)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         return bencryptops()->sync(bctx);	Err	bitreich.org	70
1diff --git a/bencrypt.c b/bencrypt.c	/scm/dedup/file/bencrypt.c.gph	bitreich.org	70
i@@ -34,7 +34,6 @@ static int beput(struct bctx *bctx, void *buf, size_t n, unsigned char *md);	Err	bitreich.org	70
i static int beget(struct bctx *bctx, unsigned char *md, void *buf, size_t *n);	Err	bitreich.org	70
i static int berm(struct bctx *bctx, unsigned char *md);	Err	bitreich.org	70
i static int begc(struct bctx *bctx);	Err	bitreich.org	70
i-static int becheck(struct bctx *bctx, unsigned char *md);	Err	bitreich.org	70
i static int besync(struct bctx *bctx);	Err	bitreich.org	70
i static int beclose(struct bctx *bctx);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -45,7 +44,6 @@ static struct bops bops = {	Err	bitreich.org	70
i         .get = beget,	Err	bitreich.org	70
i         .rm = berm,	Err	bitreich.org	70
i         .gc = begc,	Err	bitreich.org	70
i-        .check = becheck,	Err	bitreich.org	70
i         .sync = besync,	Err	bitreich.org	70
i         .close = beclose,	Err	bitreich.org	70
i };	Err	bitreich.org	70
i@@ -325,13 +323,6 @@ begc(struct bctx *bctx)	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i static int	Err	bitreich.org	70
i-becheck(struct bctx *bctx, unsigned char *md)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        return bstorageops()->check(bctx, md);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-static int	Err	bitreich.org	70
i besync(struct bctx *bctx)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         return bstorageops()->sync(bctx);	Err	bitreich.org	70
1diff --git a/block.c b/block.c	/scm/dedup/file/block.c.gph	bitreich.org	70
i@@ -9,9 +9,18 @@	Err	bitreich.org	70
i #include <stdlib.h>	Err	bitreich.org	70
i #include <string.h>	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+#include <sodium.h>	Err	bitreich.org	70
i+	Err	bitreich.org	70
i #include "block.h"	Err	bitreich.org	70
i+#include "config.h"	Err	bitreich.org	70
i #include "misc.h"	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+static int	Err	bitreich.org	70
i+bhash(void *buf, size_t n, unsigned char *md)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        return crypto_generichash(md, MDSIZE, buf, n, NULL, 0);	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i int	Err	bitreich.org	70
i bcreat(char *path, int mode, struct bctx **bctx)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i@@ -20,6 +29,11 @@ bcreat(char *path, int mode, struct bctx **bctx)	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+                seterr("sodium_init: failed");	Err	bitreich.org	70
i+                return -1;	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i         *bctx = calloc(1, sizeof(**bctx));	Err	bitreich.org	70
i         if (*bctx == NULL) {	Err	bitreich.org	70
i                 seterr("calloc: %s", strerror(errno));	Err	bitreich.org	70
i@@ -41,6 +55,11 @@ bopen(char *path, int flags, int mode, struct bctx **bctx)	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+                seterr("sodium_init: failed");	Err	bitreich.org	70
i+                return -1;	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i         *bctx = calloc(1, sizeof(**bctx));	Err	bitreich.org	70
i         if (*bctx == NULL) {	Err	bitreich.org	70
i                 seterr("calloc: %s", strerror(errno));	Err	bitreich.org	70
i@@ -62,6 +81,11 @@ bput(struct bctx *bctx, void *buf, size_t n, unsigned char *md)	Err	bitreich.org	70
i                 return -1;	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+        if (bhash(buf, n, md) < 0) {	Err	bitreich.org	70
i+                seterr("bhash: failed");	Err	bitreich.org	70
i+                return -1;	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i         return bcompressops()->put(bctx, buf, n, md);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -98,15 +122,47 @@ bgc(struct bctx *bctx)	Err	bitreich.org	70
i         return bcompressops()->gc(bctx);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+/*	Err	bitreich.org	70
i+ * Lookup the block given hash and rehash it.	Err	bitreich.org	70
i+ * Check that the hashes match.  It returns -1	Err	bitreich.org	70
i+ * on error, 0 on success and 1 if a block hash	Err	bitreich.org	70
i+ * mismatch is detected.	Err	bitreich.org	70
i+ */	Err	bitreich.org	70
i int	Err	bitreich.org	70
i bcheck(struct bctx *bctx, unsigned char *md)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i+        unsigned char tmp[MDSIZE];	Err	bitreich.org	70
i+        void *buf;	Err	bitreich.org	70
i+        size_t n;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i         if (bctx == NULL || md == NULL) {	Err	bitreich.org	70
i                 seterr("invalid params");	Err	bitreich.org	70
i                 return -1;	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        return bcompressops()->check(bctx, md);	Err	bitreich.org	70
i+        buf = malloc(BSIZEMAX);	Err	bitreich.org	70
i+        if (buf == NULL) {	Err	bitreich.org	70
i+                seterr("malloc: out of memory");	Err	bitreich.org	70
i+                return -1;	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+        n = BSIZEMAX;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        if (bcompressops()->get(bctx, md, buf, &n) < 0) {	Err	bitreich.org	70
i+                free(buf);	Err	bitreich.org	70
i+                return -1;	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        if (bhash(buf, n, tmp) < 0) {	Err	bitreich.org	70
i+                free(buf);	Err	bitreich.org	70
i+                return -1;	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        if (memcmp(tmp, md, MDSIZE) != 0) {	Err	bitreich.org	70
i+                free(buf);	Err	bitreich.org	70
i+                return -1;	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+        free(buf);	Err	bitreich.org	70
i+        return 0;	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i int	Err	bitreich.org	70
1diff --git a/block.h b/block.h	/scm/dedup/file/block.h.gph	bitreich.org	70
i@@ -21,7 +21,6 @@ struct bops {	Err	bitreich.org	70
i         int (*get)(struct bctx *, unsigned char *, void *, size_t *);	Err	bitreich.org	70
i         int (*rm)(struct bctx *, unsigned char *);	Err	bitreich.org	70
i         int (*gc)(struct bctx *);	Err	bitreich.org	70
i-        int (*check)(struct bctx *, unsigned char *);	Err	bitreich.org	70
i         int (*sync)(struct bctx *);	Err	bitreich.org	70
i         int (*close)(struct bctx *);	Err	bitreich.org	70
i };	Err	bitreich.org	70
1diff --git a/bstorage.c b/bstorage.c	/scm/dedup/file/bstorage.c.gph	bitreich.org	70
i@@ -22,8 +22,6 @@	Err	bitreich.org	70
i #include <strings.h>	Err	bitreich.org	70
i #include <unistd.h>	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-#include <sodium.h>	Err	bitreich.org	70
i-	Err	bitreich.org	70
i #include "block.h"	Err	bitreich.org	70
i #include "config.h"	Err	bitreich.org	70
i #include "misc.h"	Err	bitreich.org	70
i@@ -56,7 +54,6 @@ static int bsput(struct bctx *, void *, size_t, unsigned char *);	Err	bitreich.org	70
i static int bsget(struct bctx *, unsigned char *, void *, size_t *);	Err	bitreich.org	70
i static int bsrm(struct bctx *, unsigned char *);	Err	bitreich.org	70
i static int bsgc(struct bctx *);	Err	bitreich.org	70
i-static int bscheck(struct bctx *, unsigned char *);	Err	bitreich.org	70
i static int bssync(struct bctx *);	Err	bitreich.org	70
i static int bsclose(struct bctx *);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -67,7 +64,6 @@ static struct bops bops = {	Err	bitreich.org	70
i         .get = bsget,	Err	bitreich.org	70
i         .rm = bsrm,	Err	bitreich.org	70
i         .gc = bsgc,	Err	bitreich.org	70
i-        .check = bscheck,	Err	bitreich.org	70
i         .sync = bssync,	Err	bitreich.org	70
i         .close = bsclose,	Err	bitreich.org	70
i };	Err	bitreich.org	70
i@@ -116,12 +112,6 @@ bd_cmp(struct bd *b1, struct bd *b2)	Err	bitreich.org	70
i static RB_PROTOTYPE(bdcache, bd, rbe, bd_cmp)	Err	bitreich.org	70
i static RB_GENERATE(bdcache, bd, rbe, bd_cmp)	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-static int	Err	bitreich.org	70
i-bhash(void *buf, size_t n, unsigned char *md)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        return crypto_generichash(md, MDSIZE, buf, n, NULL, 0);	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i /* Unpack block header */	Err	bitreich.org	70
i static int	Err	bitreich.org	70
i unpackbhdr(unsigned char *buf, struct bhdr *bhdr)	Err	bitreich.org	70
i@@ -283,11 +273,6 @@ bscreat(struct bctx *bctx, char *path, int mode)	Err	bitreich.org	70
i         struct bhdr *bhdr;	Err	bitreich.org	70
i         int fd;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        if (sodium_init() < 0) {	Err	bitreich.org	70
i-                seterr("sodium_init: failed");	Err	bitreich.org	70
i-                return -1;	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         fd = open(path, O_RDWR | O_CREAT | O_EXCL, mode);	Err	bitreich.org	70
i         if (fd < 0) {	Err	bitreich.org	70
i                 seterr("open: %s", strerror(errno));	Err	bitreich.org	70
i@@ -342,11 +327,6 @@ bsopen(struct bctx *bctx, char *path, int flags, int mode)	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-                seterr("sodium_init: failed");	Err	bitreich.org	70
i-                return -1;	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         fd = open(path, flags, mode);	Err	bitreich.org	70
i         if (fd < 0) {	Err	bitreich.org	70
i                 seterr("open: %s", strerror(errno));	Err	bitreich.org	70
i@@ -409,17 +389,13 @@ bsput(struct bctx *bctx, void *buf, size_t n, unsigned char *md)	Err	bitreich.org	70
i         struct bd key, *bd;	Err	bitreich.org	70
i         off_t offs;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        if (bhash(buf, n, key.md) < 0) {	Err	bitreich.org	70
i-                seterr("bhash: failed");	Err	bitreich.org	70
i-                return -1;	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         /*	Err	bitreich.org	70
i          * If the block is already present in the cache	Err	bitreich.org	70
i          * just increment the reference count and write back	Err	bitreich.org	70
i          * the block descriptor associated for that block.	Err	bitreich.org	70
i          */	Err	bitreich.org	70
i         sctx = bctx->sctx;	Err	bitreich.org	70
i+        memcpy(key.md, md, MDSIZE);	Err	bitreich.org	70
i         bd = RB_FIND(bdcache, &sctx->bdcache, &key);	Err	bitreich.org	70
i         if (bd != NULL) {	Err	bitreich.org	70
i                 off_t bdoffs;	Err	bitreich.org	70
i@@ -605,59 +581,6 @@ bsgc(struct bctx *bctx)	Err	bitreich.org	70
i         return 0;	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-/*	Err	bitreich.org	70
i- * Lookup the block given hash and rehash it.	Err	bitreich.org	70
i- * Check that the hashes match.  It returns -1	Err	bitreich.org	70
i- * on error, 0 on success and 1 if a block hash	Err	bitreich.org	70
i- * mismatch is detected.	Err	bitreich.org	70
i- */	Err	bitreich.org	70
i-static int	Err	bitreich.org	70
i-bscheck(struct bctx *bctx, unsigned char *md)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        struct sctx *sctx;	Err	bitreich.org	70
i-        struct bd key, *bd;	Err	bitreich.org	70
i-        void *buf;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        sctx = bctx->sctx;	Err	bitreich.org	70
i-        memcpy(key.md, md, MDSIZE);	Err	bitreich.org	70
i-        bd = RB_FIND(bdcache, &sctx->bdcache, &key);	Err	bitreich.org	70
i-        if (bd == NULL) {	Err	bitreich.org	70
i-                seterr("unknown block");	Err	bitreich.org	70
i-                return -1;	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        buf = malloc(bd->size);	Err	bitreich.org	70
i-        if (buf == NULL) {	Err	bitreich.org	70
i-                seterr("malloc: %s", strerror(errno));	Err	bitreich.org	70
i-                return -1;	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        if (lseek(sctx->fd, bd->offset, SEEK_SET) < 0) {	Err	bitreich.org	70
i-                free(buf);	Err	bitreich.org	70
i-                seterr("lseek: %s", strerror(errno));	Err	bitreich.org	70
i-                return -1;	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        if (xread(sctx->fd, buf, bd->size) != bd->size) {	Err	bitreich.org	70
i-                free(buf);	Err	bitreich.org	70
i-                seterr("failed to read block: %s", strerror(errno));	Err	bitreich.org	70
i-                return -1;	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        if (bhash(buf, bd->size, key.md) < 0) {	Err	bitreich.org	70
i-                free(buf);	Err	bitreich.org	70
i-                seterr("bhash: failed");	Err	bitreich.org	70
i-                return -1;	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        if (memcmp(key.md, md, MDSIZE) != 0) {	Err	bitreich.org	70
i-                free(buf);	Err	bitreich.org	70
i-                return 1;	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-        free(buf);	Err	bitreich.org	70
i-        return 0;	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i /* Sync block header to storage file */	Err	bitreich.org	70
i static int	Err	bitreich.org	70
i bssync(struct bctx *bctx)	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/dedup/commit/4d8c3d50ca614a40...
Content-Typetext/plain; charset=utf-8