SMOLNET PORTAL home about changes
iSplit initmdhead() into plaintext/encrypted variants - 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 da5196be59c4f03fd81127900dd1b1afdbdfa34f	/scm/dedup/commit/da5196be59c4f03fd81127900dd1b1afdbdfa34f.gph	bitreich.org	70
1parent 1c0530ef5bf190a62ca8ce7c9b3ae14702b44a7f	/scm/dedup/commit/1c0530ef5bf190a62ca8ce7c9b3ae14702b44a7f.gph	bitreich.org	70
hAuthor: sin <sin@2f30.org>	URL:mailto:sin@2f30.org	bitreich.org	70
iDate:   Tue, 14 May 2019 13:33:06 +0300	Err	bitreich.org	70
i	Err	bitreich.org	70
iSplit initmdhead() into plaintext/encrypted variants	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M snap.c                              |     143 ++++++++++++++++---------------	Err	bitreich.org	70
i	Err	bitreich.org	70
i1 file changed, 76 insertions(+), 67 deletions(-)	Err	bitreich.org	70
i---	Err	bitreich.org	70
1diff --git a/snap.c b/snap.c	/scm/dedup/file/snap.c.gph	bitreich.org	70
i@@ -94,84 +94,93 @@ packshdr(unsigned char *buf, struct shdr *shdr)	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i static int	Err	bitreich.org	70
i+loadmdnone(struct sctx *sctx, int first)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        struct mdnode *mdnode;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        mdnode = calloc(1, sizeof(*mdnode));	Err	bitreich.org	70
i+        if (mdnode == NULL) {	Err	bitreich.org	70
i+                seterr("calloc: %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, mdnode->md, MDSIZE) != MDSIZE) {	Err	bitreich.org	70
i+                seterr("failed to read block hash: %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+        TAILQ_INSERT_TAIL(&sctx->mdhead, mdnode, e);	Err	bitreich.org	70
i+        return 0;	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+static int	Err	bitreich.org	70
i+loadmdcrypto(struct sctx *sctx, int first)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        unsigned char buf[MDSIZE + crypto_secretstream_xchacha20poly1305_ABYTES];	Err	bitreich.org	70
i+        unsigned char hdr[SHDRSIZE];	Err	bitreich.org	70
i+        static crypto_secretstream_xchacha20poly1305_state state;	Err	bitreich.org	70
i+        struct mdnode *mdnode;	Err	bitreich.org	70
i+        struct shdr *shdr;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        shdr = &sctx->shdr;	Err	bitreich.org	70
i+        packshdr(hdr, shdr);	Err	bitreich.org	70
i+        if (first && crypto_secretstream_xchacha20poly1305_init_pull(&state,	Err	bitreich.org	70
i+                                                                     shdr->header,	Err	bitreich.org	70
i+                                                                     param.key) < 0) {	Err	bitreich.org	70
i+                seterr("invalid crypto header");	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, sizeof(buf)) != sizeof(buf)) {	Err	bitreich.org	70
i+                seterr("failed to read block hash: %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+        mdnode = calloc(1, sizeof(*mdnode));	Err	bitreich.org	70
i+        if (mdnode == NULL) {	Err	bitreich.org	70
i+                seterr("calloc: %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 (crypto_secretstream_xchacha20poly1305_pull(&state, mdnode->md, NULL,	Err	bitreich.org	70
i+                                                       NULL, buf, sizeof(buf),	Err	bitreich.org	70
i+                                                       hdr, sizeof(hdr)) < 0) {	Err	bitreich.org	70
i+                free(mdnode);	Err	bitreich.org	70
i+                seterr("authentication failed");	Err	bitreich.org	70
i+                return -1;	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        TAILQ_INSERT_TAIL(&sctx->mdhead, mdnode, e);	Err	bitreich.org	70
i+        return 0;	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+static int	Err	bitreich.org	70
i initmdhead(struct sctx *sctx)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         struct shdr *shdr;	Err	bitreich.org	70
i+        int (*fn)(struct sctx *, int);	Err	bitreich.org	70
i         uint64_t i;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+        if (!sctx->crypto)	Err	bitreich.org	70
i+                fn = loadmdnone;	Err	bitreich.org	70
i+        else	Err	bitreich.org	70
i+                fn = loadmdcrypto;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i         shdr = &sctx->shdr;	Err	bitreich.org	70
i-        if (sctx->crypto) {	Err	bitreich.org	70
i-                unsigned char ad[SHDRSIZE];	Err	bitreich.org	70
i-                crypto_secretstream_xchacha20poly1305_state state;	Err	bitreich.org	70
i-                struct shdr *shdr;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-                shdr = &sctx->shdr;	Err	bitreich.org	70
i-                packshdr(ad, shdr);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-                if (crypto_secretstream_xchacha20poly1305_init_pull(&state,	Err	bitreich.org	70
i-                                                                    shdr->header,	Err	bitreich.org	70
i-                                                                    param.key) < 0) {	Err	bitreich.org	70
i-                        seterr("invalid crypto header");	Err	bitreich.org	70
i-                        return -1;	Err	bitreich.org	70
i-                }	Err	bitreich.org	70
i+        for (i = 0; i < shdr->nbd; i++) {	Err	bitreich.org	70
i+                if ((*fn)(sctx, i == 0) == 0)	Err	bitreich.org	70
i+                        continue;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-                for (i = 0; i < shdr->nbd; i++) {	Err	bitreich.org	70
i-                        unsigned char buf[MDSIZE + crypto_secretstream_xchacha20poly1305_ABYTES];	Err	bitreich.org	70
i-                        unsigned char md[MDSIZE];	Err	bitreich.org	70
i-                        struct mdnode *mdnode;	Err	bitreich.org	70
i-                        unsigned char tag;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-                        if (xread(sctx->fd, buf, sizeof(buf)) != sizeof(buf)) {	Err	bitreich.org	70
i-                                seterr("failed to read block hash: %s", strerror(errno));	Err	bitreich.org	70
i-                                goto err0;	Err	bitreich.org	70
i-                        }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-                        if (crypto_secretstream_xchacha20poly1305_pull(&state, md, NULL, &tag,	Err	bitreich.org	70
i-                                                                       buf, sizeof(buf),	Err	bitreich.org	70
i-                                                                       ad, sizeof(ad)) < 0) {	Err	bitreich.org	70
i-                                seterr("authentication failed");	Err	bitreich.org	70
i-                                goto err0;	Err	bitreich.org	70
i-                        }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-                        mdnode = calloc(1, sizeof(*mdnode));	Err	bitreich.org	70
i-                        if (mdnode == NULL) {	Err	bitreich.org	70
i-                                seterr("calloc: %s", strerror(errno));	Err	bitreich.org	70
i-                                goto err0;	Err	bitreich.org	70
i-                        }	Err	bitreich.org	70
i-                        memcpy(mdnode->md, md, MDSIZE);	Err	bitreich.org	70
i-                        TAILQ_INSERT_TAIL(&sctx->mdhead, mdnode, e);	Err	bitreich.org	70
i-                }	Err	bitreich.org	70
i-        } else {	Err	bitreich.org	70
i-                for (i = 0; i < shdr->nbd; i++) {	Err	bitreich.org	70
i-                        unsigned char md[MDSIZE];	Err	bitreich.org	70
i+                while (!TAILQ_EMPTY(&sctx->mdhead)) {	Err	bitreich.org	70
i                         struct mdnode *mdnode;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-                        if (xread(sctx->fd, md, MDSIZE) != MDSIZE) {	Err	bitreich.org	70
i-                                seterr("failed to read block hash: %s", strerror(errno));	Err	bitreich.org	70
i-                                goto err0;	Err	bitreich.org	70
i-                        }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-                        mdnode = calloc(1, sizeof(*mdnode));	Err	bitreich.org	70
i-                        if (mdnode == NULL) {	Err	bitreich.org	70
i-                                seterr("calloc: %s", strerror(errno));	Err	bitreich.org	70
i-                                goto err0;	Err	bitreich.org	70
i-                        }	Err	bitreich.org	70
i-                        memcpy(mdnode->md, md, MDSIZE);	Err	bitreich.org	70
i-                        TAILQ_INSERT_TAIL(&sctx->mdhead, mdnode, e);	Err	bitreich.org	70
i+                        mdnode = TAILQ_FIRST(&sctx->mdhead);	Err	bitreich.org	70
i+                        TAILQ_REMOVE(&sctx->mdhead, mdnode, e);	Err	bitreich.org	70
i+                        free(mdnode);	Err	bitreich.org	70
i                 }	Err	bitreich.org	70
i+                return -1;	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i         return 0;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-err0:	Err	bitreich.org	70
i-        /* Cleanup */	Err	bitreich.org	70
i-        while (!TAILQ_EMPTY(&sctx->mdhead)) {	Err	bitreich.org	70
i-                struct mdnode *mdnode;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-                mdnode = TAILQ_FIRST(&sctx->mdhead);	Err	bitreich.org	70
i-                TAILQ_REMOVE(&sctx->mdhead, mdnode, e);	Err	bitreich.org	70
i-                free(mdnode);	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-        return -1;	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i int	Err	bitreich.org	70
i@@ -486,7 +495,7 @@ sclose(struct sctx *sctx)	Err	bitreich.org	70
i         if (ssync(sctx) < 0)	Err	bitreich.org	70
i                 return -1;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        /* Cleanup */	Err	bitreich.org	70
i+        /* Free block hash list */	Err	bitreich.org	70
i         while (!TAILQ_EMPTY(&sctx->mdhead)) {	Err	bitreich.org	70
i                 struct mdnode *mdnode;	Err	bitreich.org	70
i 	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/dedup/commit/da5196be59c4f03f...
Content-Typetext/plain; charset=utf-8