diff options
| author | Quentin Carbonneaux | 2022-04-07 12:12:25 +0200 |
|---|---|---|
| committer | Quentin Carbonneaux | 2022-04-07 12:13:03 +0200 |
| commit | 6ccde878522a8ef6ffccb2d57c736202f185196a (patch) | |
| tree | a54fb44d88530db7eaa98fa126f2136efe915c73 | |
| parent | fd0859f12150ec535224bffccadc808b3e3b9b7c (diff) | |
move all enc/dec functions to util.c
| -rw-r--r-- | sdar/all.h | 10 | ||||
| -rw-r--r-- | sdar/arch.c | 31 | ||||
| -rw-r--r-- | sdar/stash.c | 3 | ||||
| -rw-r--r-- | sdar/util.c | 81 | ||||
| -rw-r--r-- | sdar/write.c | 46 |
5 files changed, 91 insertions, 80 deletions
@@ -174,6 +174,13 @@ void enc64be(uchar *, uvlong); uvlong dec32be(uchar *); uvlong dec32le(uchar *); uvlong dec64be(uchar *); +void encmeta(Slice *, Segmeta *); +void decmeta(Slice, Segmeta *); +void encitem(uchar *, hmac_t, int, long); +void decitem(uchar *, Block *); +void addentry(Ilevel *, hmac_t, vlong); +void enclevel(Slice *, Ilevel *); +int declevel(Slice, Ilevel *); /* slice.c */ Slice mksl(uchar *, long); @@ -217,8 +224,6 @@ int readerstart(Reader *, Addr *, vlong); void readerdone(Reader *); int readerseek(Reader *, vlong); int reader(Reader *, Slice *); -void encmeta(Slice *, Segmeta *); -void decitem(uchar *, Block *); int walkblocks(FILE *, blockcb, void *); /* stash.c */ @@ -233,7 +238,6 @@ int stashcommit(Arch *, char *, uchar[Segidsz]); void writerinit(Writer *, flushcb *, void *); int writer(Writer *, uchar *, vlong); int writerdone(Writer *, Addr *); -int declevel(Ilevel *, Slice); /* lib/crypto */ void scrypt_smix(uint8_t *, size_t, uint64_t, void *, void *); diff --git a/sdar/arch.c b/sdar/arch.c index 5f1b067..f82b27c 100644 --- a/sdar/arch.c +++ b/sdar/arch.c @@ -64,33 +64,6 @@ walkseg(Arch *a, walkcb fn, void *arg) return err; } -void -encmeta(Slice *s, Segmeta *meta) -{ - enc64be(s->buf, meta->nitem); - enc64be(s->buf + 8, meta->dlen); - enc64be(s->buf + 16, meta->date); - memcpy(s->buf + 24, meta->msg, sizeof meta->msg); - s->len = Segmetasz; -} - -static void -decmeta(uchar *buf, Segmeta *meta) -{ - meta->nitem = dec64be(buf); - meta->dlen = dec64be(buf + 8); - meta->date = dec64be(buf + 16); - memcpy(meta->msg, buf + 24, sizeof meta->msg); -} - -void -decitem(uchar *p, Block *b) -{ - b->len = dec32be(p + Hmacsz); - b->lz4 = b->len & 1; - b->len >>= 1; -} - static int prepseg(FILE *f, uchar prep[Prepsz]) { @@ -126,7 +99,7 @@ walkblocks(FILE *f, blockcb fn, void *arg) logs("E cannot read metadata"); goto out; } - decmeta(s.buf, &m); + decmeta(s, &m); if (fseek(f, m.dlen, SEEK_CUR) == -1) goto out; @@ -408,7 +381,7 @@ readlevel(Reader *rd, hmac_t hmac, Ilevel *l) s = newsl(); err = readblock(rd, hmac, &b, &s); - if (!err && (err = declevel(l, s))) + if (!err && (err = declevel(s, l))) logs("E invalid level %s", hmacs(hmac)); freesl(s); return err; diff --git a/sdar/stash.c b/sdar/stash.c index 56284d2..540a826 100644 --- a/sdar/stash.c +++ b/sdar/stash.c @@ -106,8 +106,7 @@ flushraw(Arch *a, hmac_t hmac, int lz4, Slice s) if (slwrite(sc, a->data)) goto ioerror; - hmaccpy(item, hmac); - enc32be(item + Hmacsz, lz4 | s.len << 1); + encitem(item, hmac, lz4, s.len); if (fwrite(item, Segitemsz, 1, a->log) != 1) goto ioerror; diff --git a/sdar/util.c b/sdar/util.c index 81b956c..add43fc 100644 --- a/sdar/util.c +++ b/sdar/util.c @@ -184,3 +184,84 @@ dec64be(uchar *p) ((uvlong)p[6] << 8) + ((uvlong)p[7] ); } + +void +encmeta(Slice *s, Segmeta *meta) +{ + enc64be(s->buf, meta->nitem); + enc64be(s->buf + 8, meta->dlen); + enc64be(s->buf + 16, meta->date); + memcpy(s->buf + 24, meta->msg, sizeof meta->msg); + s->len = Segmetasz; +} + +void +decmeta(Slice s, Segmeta *meta) +{ + meta->nitem = dec64be(s.buf); + meta->dlen = dec64be(s.buf + 8); + meta->date = dec64be(s.buf + 16); + memcpy(meta->msg, s.buf + 24, sizeof meta->msg); +} + +void +encitem(uchar *p, hmac_t hmac, int lz4, long len) +{ + hmaccpy(p, hmac); + enc32be(p + Hmacsz, lz4 | len << 1); +} + +void +decitem(uchar *p, Block *b) +{ + b->len = dec32be(p + Hmacsz); + b->lz4 = b->len & 1; + b->len >>= 1; +} + +void +addentry(Ilevel *l, hmac_t hmac, vlong len) +{ + Ientry *e; + + e = &l->ent[l->nent++]; + hmaccpy(e->hmac, hmac); + e->len = len; +} + +void +enclevel(Slice *s, Ilevel *l) +{ + Ientry *e; + uchar *p; + int i; + + p = s->buf; + for (i = 0; i < l->nent; i++) { + e = &l->ent[i]; + hmaccpy(p, e->hmac); + enc64be(p + Hmacsz, e->len); + p += Entrysz; + } + s->len = p - s->buf; +} + +int +declevel(Slice s, Ilevel *l) +{ + uchar *p; + vlong n, len; + + p = s.buf; + n = s.len; + if (n % Entrysz != 0 || n / Entrysz > Indexsz) + return 1; + l->nent = 0; + for (; n > 0; n -= Entrysz) { + len = dec64be(p + Hmacsz); + addentry(l, p, len); + p += Entrysz; + } + return 0; +} + diff --git a/sdar/write.c b/sdar/write.c index 501194d..e09eea6 100644 --- a/sdar/write.c +++ b/sdar/write.c @@ -29,52 +29,6 @@ flush(Writer *w, Slice s, hmac_t hmac) return w->flush(w->arg, hmac, s); } -static void -enclevel(Slice *s, Ilevel *l) -{ - Ientry *e; - uchar *p; - int i; - - p = s->buf; - for (i = 0; i < l->nent; i++) { - e = &l->ent[i]; - hmaccpy(p, e->hmac); - enc64be(p + Hmacsz, e->len); - p += Entrysz; - } - s->len = p - s->buf; -} - -static void -addentry(Ilevel *l, hmac_t hmac, vlong len) -{ - Ientry *e; - - e = &l->ent[l->nent++]; - hmaccpy(e->hmac, hmac); - e->len = len; -} - -int -declevel(Ilevel *l, Slice s) -{ - uchar *p; - vlong n, len; - - p = s.buf; - n = s.len; - if (n % Entrysz != 0 || n / Entrysz > Indexsz) - return 1; - l->nent = 0; - for (; n > 0; n -= Entrysz) { - len = dec64be(p + Hmacsz); - addentry(l, p, len); - p += Entrysz; - } - return 0; -} - static int flushlevel(Writer *w, Ilevel *l, hmac_t hmac) { |
