iAdd back blake2s support - 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 266d6321fe55b0b95675378a7621d0c259d88f06 /scm/dedup/commit/266d6321fe55b0b95675378a7621d0c259d88f06.gph bitreich.org 70 1parent d2dad2c14804f240b36322ceebe3a56b4b480a93 /scm/dedup/commit/d2dad2c14804f240b36322ceebe3a56b4b480a93.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Wed, 1 May 2019 13:34:50 +0100 Err bitreich.org 70 i Err bitreich.org 70 iAdd back blake2s support Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M bstorage.c | 50 +++++++++++++++++++++++++++++-- Err bitreich.org 70 i M dotest | 18 ++++++++++++++++++ Err bitreich.org 70 i M dup-init.1 | 5 ++--- Err bitreich.org 70 i Err bitreich.org 70 i3 files changed, 67 insertions(+), 6 deletions(-) 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@@ -48,6 +48,7 @@ Err bitreich.org 70 i #define CNONETYPE 0 Err bitreich.org 70 i #define CSNAPPYTYPE 1 Err bitreich.org 70 i #define HBLAKE2BTYPE 0 Err bitreich.org 70 i+#define HBLAKE2STYPE 1 Err bitreich.org 70 i Err bitreich.org 70 i extern ssize_t xread(int, void *, size_t); Err bitreich.org 70 i extern ssize_t xwrite(int, void *, size_t); Err bitreich.org 70 i@@ -102,6 +103,7 @@ struct sctx { Err bitreich.org 70 i struct bhdr bhdr; Err bitreich.org 70 i int fd; Err bitreich.org 70 i int rdonly; /* when set to 1, the bssync() operation is a no-op */ Err bitreich.org 70 i+ int type; /* hash algorithm for new blocks */ Err bitreich.org 70 i }; Err bitreich.org 70 i Err bitreich.org 70 i static int Err bitreich.org 70 i@@ -120,7 +122,7 @@ 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+b2bhash(void *buf, size_t n, unsigned char *md) Err bitreich.org 70 i { Err bitreich.org 70 i blake2b_state ctx; Err bitreich.org 70 i Err bitreich.org 70 i@@ -131,6 +133,18 @@ bhash(void *buf, size_t n, unsigned char *md) Err bitreich.org 70 i return blake2b_final(&ctx, md, MDSIZE); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i+static int Err bitreich.org 70 i+b2shash(void *buf, size_t n, unsigned char *md) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ blake2s_state ctx; Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (blake2s_init(&ctx, MDSIZE) < 0) Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ if (blake2s_update(&ctx, buf, n) < 0) Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ return blake2s_final(&ctx, md, MDSIZE); Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i /* Read block header */ Err bitreich.org 70 i static int Err bitreich.org 70 i unpackbhdr(int fd, struct bhdr *bhdr) Err bitreich.org 70 i@@ -316,6 +330,8 @@ bscreat(struct bctx *bctx, char *path, int mode, struct bparam *bpar) Err bitreich.org 70 i /* Set hash type */ Err bitreich.org 70 i if (strcmp(bpar->halgo, "blake2b") == 0) { Err bitreich.org 70 i bhdr->flags |= HBLAKE2BTYPE << HALGOSHIFT; Err bitreich.org 70 i+ } else if (strcmp(bpar->halgo, "blake2s") == 0) { Err bitreich.org 70 i+ bhdr->flags |= HBLAKE2STYPE << HALGOSHIFT; Err bitreich.org 70 i } else { Err bitreich.org 70 i free(sctx); Err bitreich.org 70 i close(fd); Err bitreich.org 70 i@@ -323,6 +339,7 @@ bscreat(struct bctx *bctx, char *path, int mode, struct bparam *bpar) Err bitreich.org 70 i } Err bitreich.org 70 i bhdr->nbd = 0; Err bitreich.org 70 i sctx->fd = fd; Err bitreich.org 70 i+ sctx->type = (bhdr->flags >> HALGOSHIFT) & HALGOMASK; Err bitreich.org 70 i Err bitreich.org 70 i if (packbhdr(fd, bhdr) < 0) { Err bitreich.org 70 i free(sctx); Err bitreich.org 70 i@@ -406,6 +423,9 @@ bsopen(struct bctx *bctx, char *path, int flags, int mode, struct bparam *bpar) Err bitreich.org 70 i case HBLAKE2BTYPE: Err bitreich.org 70 i bpar->halgo = "blake2b"; Err bitreich.org 70 i break; Err bitreich.org 70 i+ case HBLAKE2STYPE: Err bitreich.org 70 i+ bpar->halgo = "blake2s"; Err bitreich.org 70 i+ break; Err bitreich.org 70 i default: Err bitreich.org 70 i free(sctx); Err bitreich.org 70 i close(fd); Err bitreich.org 70 i@@ -414,6 +434,7 @@ bsopen(struct bctx *bctx, char *path, int flags, int mode, struct bparam *bpar) Err bitreich.org 70 i Err bitreich.org 70 i sctx->fd = fd; Err bitreich.org 70 i sctx->rdonly = flags == O_RDONLY; Err bitreich.org 70 i+ sctx->type = halgo; Err bitreich.org 70 i Err bitreich.org 70 i if (initbdcache(sctx) < 0) { Err bitreich.org 70 i free(sctx); Err bitreich.org 70 i@@ -434,8 +455,18 @@ bsput(struct bctx *bctx, void *buf, size_t n, unsigned char *md) Err bitreich.org 70 i Err bitreich.org 70 i sctx = bctx->sctx; Err bitreich.org 70 i Err bitreich.org 70 i- if (bhash(buf, n, key.md) < 0) Err bitreich.org 70 i+ switch (sctx->type) { Err bitreich.org 70 i+ case HBLAKE2BTYPE: Err bitreich.org 70 i+ if (b2bhash(buf, n, key.md) < 0) Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case HBLAKE2STYPE: Err bitreich.org 70 i+ if (b2shash(buf, n, key.md) < 0) Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ default: Err bitreich.org 70 i return -1; Err bitreich.org 70 i+ } Err bitreich.org 70 i 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@@ -608,7 +639,20 @@ bscheck(struct bctx *bctx, 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, bd->size, key.md) < 0) { Err bitreich.org 70 i+ switch (sctx->type) { Err bitreich.org 70 i+ case HBLAKE2BTYPE: Err bitreich.org 70 i+ if (b2bhash(buf, bd->size, key.md) < 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+ break; Err bitreich.org 70 i+ case HBLAKE2STYPE: Err bitreich.org 70 i+ if (b2shash(buf, bd->size, key.md) < 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+ break; Err bitreich.org 70 i+ default: Err bitreich.org 70 i free(buf); Err bitreich.org 70 i return -1; Err bitreich.org 70 i } Err bitreich.org 70 1diff --git a/dotest b/dotest /scm/dedup/file/dotest.gph bitreich.org 70 i@@ -89,6 +89,23 @@ test5() Err bitreich.org 70 i rm -rf "$repo" "$data" Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i+test6() Err bitreich.org 70 i+{ Err bitreich.org 70 i+ repo=`mktemp -d` Err bitreich.org 70 i+ data=`mktemp` Err bitreich.org 70 i+ dd if=/dev/urandom of="$data" bs=1M count=64 Err bitreich.org 70 i+ ./dup-init -H blake2s "$repo" Err bitreich.org 70 i+ ./dup-pack -r "$repo" snap0 < "$data" Err bitreich.org 70 i+ ./dup-pack -r "$repo" snap1 < "$data" Err bitreich.org 70 i+ du -sh "$repo" Err bitreich.org 70 i+ sum0=`sha1sum "$data" | awk '{print $1}'` Err bitreich.org 70 i+ sum1=`./dup-unpack -r "$repo" snap0 | sha1sum | awk '{print $1}'` Err bitreich.org 70 i+ sum2=`./dup-unpack -r "$repo" snap1 | sha1sum | awk '{print $1}'` Err bitreich.org 70 i+ [ "$sum0" = "$sum1" ] Err bitreich.org 70 i+ [ "$sum0" = "$sum2" ] Err bitreich.org 70 i+ rm -rf "$repo" "$data" Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i make Err bitreich.org 70 i test0 Err bitreich.org 70 i test1 Err bitreich.org 70 i@@ -96,3 +113,4 @@ test2 Err bitreich.org 70 i test3 Err bitreich.org 70 i test4 Err bitreich.org 70 i test5 Err bitreich.org 70 i+test6 Err bitreich.org 70 1diff --git a/dup-init.1 b/dup-init.1 /scm/dedup/file/dup-init.1.gph bitreich.org 70 i@@ -1,4 +1,4 @@ Err bitreich.org 70 i-.Dd April 25, 2019 Err bitreich.org 70 i+.Dd May 1, 2019 Err bitreich.org 70 i .Dt DUP-INIT 1 Err bitreich.org 70 i .Os Err bitreich.org 70 i .Sh NAME Err bitreich.org 70 i@@ -21,8 +21,7 @@ is specified the current working directory is used. Err bitreich.org 70 i .It Fl H Ar hash Err bitreich.org 70 i The cryptographic hash function used to identify Err bitreich.org 70 i unique blocks in the store. Err bitreich.org 70 i-The supported hash functions are blake2b. Err bitreich.org 70 i-This flag only has an effect when initializing the repository. Err bitreich.org 70 i+The supported hash functions are blake2b and blake2s. Err bitreich.org 70 i By default blake2b is used. Err bitreich.org 70 i .It Fl Z Ar compressor Err bitreich.org 70 i The compressor function used to compress the blocks Err bitreich.org 70 .