summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuentin Carbonneaux2022-04-07 12:12:25 +0200
committerQuentin Carbonneaux2022-04-07 12:13:03 +0200
commit6ccde878522a8ef6ffccb2d57c736202f185196a (patch)
treea54fb44d88530db7eaa98fa126f2136efe915c73
parentfd0859f12150ec535224bffccadc808b3e3b9b7c (diff)
move all enc/dec functions to util.c
-rw-r--r--sdar/all.h10
-rw-r--r--sdar/arch.c31
-rw-r--r--sdar/stash.c3
-rw-r--r--sdar/util.c81
-rw-r--r--sdar/write.c46
5 files changed, 91 insertions, 80 deletions
diff --git a/sdar/all.h b/sdar/all.h
index 47972a0..0524489 100644
--- a/sdar/all.h
+++ b/sdar/all.h
@@ -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)
{