|
|
thash.c - dedup - data deduplication program |
|
|
 |
git clone git://bitreich.org/dedup/ git://hg6vgqziawt5s4dj.onion/dedup/ (git://bitreich.org) |
|
|
 |
Log |
|
|
 |
Files |
|
|
 |
Refs |
|
|
 |
Tags |
|
|
 |
README |
|
|
 |
LICENSE |
|
|
|
--- |
|
|
|
thash.c (1587B) |
|
|
|
--- |
|
|
|
1 #include <sys/types.h> |
|
|
|
2 |
|
|
|
3 #include <stdint.h> |
|
|
|
4 #include <stdio.h> |
|
|
|
5 #include <stdlib.h> |
|
|
|
6 #include <string.h> |
|
|
|
7 #include <strings.h> |
|
|
|
8 |
|
|
|
9 #include "blake2.h" |
|
|
|
10 #include "dedup.h" |
|
|
|
11 |
|
|
|
12 static struct hash_ops { |
|
|
|
13 int (*init)(struct hash_ctx *ctx, size_t n); |
|
|
|
14 int (*update)(struct hash_ctx *ctx, const void *buf, size_t n); |
|
|
|
15 int (*final)(struct hash_ctx *ctx, void *buf, size_t n); |
|
|
|
16 } hashes[NR_HASHES] = { |
|
|
|
17 { |
|
|
|
18 .init = blake2bi, |
|
|
|
19 .update = blake2bu, |
|
|
|
20 .final = blake2bf, |
|
|
|
21 }, |
|
|
|
22 { |
|
|
|
23 .init = blake2bpi, |
|
|
|
24 .update = blake2bpu, |
|
|
|
25 .final = blake2bpf, |
|
|
|
26 }, |
|
|
|
27 { |
|
|
|
28 .init = blake2si, |
|
|
|
29 .update = blake2su, |
|
|
|
30 .final = blake2sf, |
|
|
|
31 }, |
|
|
|
32 { |
|
|
|
33 .init = blake2spi, |
|
|
|
34 .update = blake2spu, |
|
|
|
35 .final = blake2spf, |
|
|
|
36 }, |
|
|
|
37 }; |
|
|
|
38 |
|
|
|
39 static char *algomap[NR_HASHES] = { |
|
|
|
40 [HASH_BLAKE2B] = "blake2b", |
|
|
|
41 [HASH_BLAKE2BP] = "blake2bp", |
|
|
|
42 [HASH_BLAKE2S] = "blake2s", |
|
|
|
43 [HASH_BLAKE2SP] = "blake2sp", |
|
|
|
44 }; |
|
|
|
45 |
|
|
|
46 int |
|
|
|
47 hash_init(struct hash_ctx *ctx, int type, size_t n) |
|
|
|
48 { |
|
|
|
49 if (type < 0 || type >= NR_HASHES) |
|
|
|
50 return -1; |
|
|
|
51 |
|
|
|
52 ctx->ops = &hashes[type]; |
|
|
|
53 return (*ctx->ops->init)(ctx, n); |
|
|
|
54 } |
|
|
|
55 |
|
|
|
56 int |
|
|
|
57 hash_update(struct hash_ctx *ctx, const void *buf, size_t n) |
|
|
|
58 { |
|
|
|
59 return (*ctx->ops->update)(ctx, buf, n); |
|
|
|
60 } |
|
|
|
61 |
|
|
|
62 int |
|
|
|
63 hash_final(struct hash_ctx *ctx, void *buf, size_t n) |
|
|
|
64 { |
|
|
|
65 return (*ctx->ops->final)(ctx, buf, n); |
|
|
|
66 } |
|
|
|
67 |
|
|
|
68 int |
|
|
|
69 hash_name2type(char *name) |
|
|
|
70 { |
|
|
|
71 size_t i; |
|
|
|
72 |
|
|
|
73 for (i = 0; i < NR_HASHES; i++) |
|
|
|
74 if (strcasecmp(algomap[i], name) == 0) |
|
|
|
75 return i; |
|
|
|
76 return -1; |
|
|
|
77 } |
|
|
|
78 |
|
|
|
79 char * |
|
|
|
80 hash_type2name(int type) |
|
|
|
81 { |
|
|
|
82 if (type < 0 || type >= NR_HASHES) |
|
|
|
83 return NULL; |
|
|
|
84 return algomap[type]; |
|
|
|
85 } |
|
|
|
86 |
|
|
|
87 void |
|
|
|
88 hash_list(int fd) |
|
|
|
89 { |
|
|
|
90 size_t i; |
|
|
|
91 |
|
|
|
92 for (i = 0; i < NR_HASHES; i++) |
|
|
|
93 dprintf(fd, "%s\n", algomap[i]); |
|
|
|
94 } |
|