iSplit ssync() into plaintext/encryption 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 1c0530ef5bf190a62ca8ce7c9b3ae14702b44a7f /scm/dedup/commit/1c0530ef5bf190a62ca8ce7c9b3ae14702b44a7f.gph bitreich.org 70 1parent d13482ec75f44aea5e16f7942945a9263d4736f5 /scm/dedup/commit/d13482ec75f44aea5e16f7942945a9263d4736f5.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Tue, 14 May 2019 13:27:44 +0300 Err bitreich.org 70 i Err bitreich.org 70 iSplit ssync() into plaintext/encryption variants Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M snap.c | 121 +++++++++++++++++-------------- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 68 insertions(+), 53 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@@ -385,12 +385,74 @@ srewind(struct sctx *sctx) 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 i-ssync(struct sctx *sctx) Err bitreich.org 70 i+static int Err bitreich.org 70 i+syncnone(struct sctx *sctx) Err bitreich.org 70 i { Err bitreich.org 70 i+ unsigned char hdr[SHDRSIZE]; 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 (xwrite(sctx->fd, hdr, SHDRSIZE) != SHDRSIZE) { Err bitreich.org 70 i+ seterr("failed to write snapshot header: %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_FOREACH(mdnode, &sctx->mdhead, e) { Err bitreich.org 70 i+ if (xwrite(sctx->fd, mdnode->md, MDSIZE) != MDSIZE) { Err bitreich.org 70 i+ seterr("failed to write block hash: %s", Err bitreich.org 70 i+ strerror(errno)); Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ } 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+synccrypto(struct sctx *sctx) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ unsigned char hdr[SHDRSIZE]; Err bitreich.org 70 i+ 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+ crypto_secretstream_xchacha20poly1305_init_push(&state, Err bitreich.org 70 i+ shdr->header, Err bitreich.org 70 i+ param.key); Err bitreich.org 70 i+ Err bitreich.org 70 i+ packshdr(hdr, shdr); Err bitreich.org 70 i+ if (xwrite(sctx->fd, hdr, SHDRSIZE) != SHDRSIZE) { Err bitreich.org 70 i+ seterr("failed to write snapshot header: %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_FOREACH(mdnode, &sctx->mdhead, e) { Err bitreich.org 70 i+ unsigned char buf[MDSIZE + crypto_secretstream_xchacha20poly1305_ABYTES]; Err bitreich.org 70 i+ unsigned char tag; Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (TAILQ_LAST(&sctx->mdhead, mdhead) == mdnode) Err bitreich.org 70 i+ tag = crypto_secretstream_xchacha20poly1305_TAG_FINAL; Err bitreich.org 70 i+ else Err bitreich.org 70 i+ tag = 0; Err bitreich.org 70 i+ Err bitreich.org 70 i+ crypto_secretstream_xchacha20poly1305_push(&state, Err bitreich.org 70 i+ buf, NULL, Err bitreich.org 70 i+ mdnode->md, MDSIZE, Err bitreich.org 70 i+ hdr, SHDRSIZE, tag); Err bitreich.org 70 i+ if (xwrite(sctx->fd, buf, sizeof(buf)) != sizeof(buf)) { Err bitreich.org 70 i+ seterr("failed to write block hash: %s", Err bitreich.org 70 i+ strerror(errno)); Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ } 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 i+ssync(struct sctx *sctx) Err bitreich.org 70 i+{ Err bitreich.org 70 i if (sctx == NULL) { Err bitreich.org 70 i seterr("invalid params"); Err bitreich.org 70 i return -1; Err bitreich.org 70 i@@ -404,59 +466,12 @@ ssync(struct sctx *sctx) Err bitreich.org 70 i return -1; Err bitreich.org 70 i } 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 hdr[SHDRSIZE]; Err bitreich.org 70 i- crypto_secretstream_xchacha20poly1305_state state; Err bitreich.org 70 i- Err bitreich.org 70 i- crypto_secretstream_xchacha20poly1305_init_push(&state, Err bitreich.org 70 i- shdr->header, Err bitreich.org 70 i- param.key); Err bitreich.org 70 i- Err bitreich.org 70 i- packshdr(hdr, shdr); Err bitreich.org 70 i- if (xwrite(sctx->fd, hdr, SHDRSIZE) != SHDRSIZE) { Err bitreich.org 70 i- seterr("failed to write snapshot header: %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_FOREACH(mdnode, &sctx->mdhead, e) { Err bitreich.org 70 i- unsigned char buf[MDSIZE + crypto_secretstream_xchacha20poly1305_ABYTES]; Err bitreich.org 70 i- unsigned char tag; Err bitreich.org 70 i- Err bitreich.org 70 i- if (TAILQ_LAST(&sctx->mdhead, mdhead) == mdnode) Err bitreich.org 70 i- tag = crypto_secretstream_xchacha20poly1305_TAG_FINAL; Err bitreich.org 70 i- else Err bitreich.org 70 i- tag = 0; Err bitreich.org 70 i- Err bitreich.org 70 i- crypto_secretstream_xchacha20poly1305_push(&state, Err bitreich.org 70 i- buf, NULL, Err bitreich.org 70 i- mdnode->md, MDSIZE, Err bitreich.org 70 i- hdr, SHDRSIZE, tag); Err bitreich.org 70 i- if (xwrite(sctx->fd, buf, sizeof(buf)) != sizeof(buf)) { Err bitreich.org 70 i- seterr("failed to write block hash: %s", Err bitreich.org 70 i- strerror(errno)); Err bitreich.org 70 i- return -1; Err bitreich.org 70 i- } Err bitreich.org 70 i- } Err bitreich.org 70 i- } else { Err bitreich.org 70 i- unsigned char hdr[SHDRSIZE]; Err bitreich.org 70 i- Err bitreich.org 70 i- packshdr(hdr, shdr); Err bitreich.org 70 i- if (xwrite(sctx->fd, hdr, SHDRSIZE) != SHDRSIZE) { Err bitreich.org 70 i- seterr("failed to write snapshot header: %s", strerror(errno)); Err bitreich.org 70 i- return -1; Err bitreich.org 70 i- } Err bitreich.org 70 i+ if (!sctx->crypto) Err bitreich.org 70 i+ syncnone(sctx); Err bitreich.org 70 i+ else Err bitreich.org 70 i+ synccrypto(sctx); Err bitreich.org 70 i Err bitreich.org 70 i- TAILQ_FOREACH(mdnode, &sctx->mdhead, e) { Err bitreich.org 70 i- if (xwrite(sctx->fd, mdnode->md, MDSIZE) != MDSIZE) { Err bitreich.org 70 i- seterr("failed to write block hash: %s", Err bitreich.org 70 i- strerror(errno)); 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 fsync(sctx->fd); Err bitreich.org 70 i- Err bitreich.org 70 i return 0; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 .