commit ba06cd1fc2b7c9c50147f5af8898e524cfb741b6
parent 17e33eb2f548925c5a1fead6c2bfe65f6f16cade
Author: sin <sin@2f30.org>
Date: Fri, 17 May 2019 14:28:53 +0300
Use a type field in snap.c
Similar to how it is done for the compression/encryption modules.
Diffstat:
M | snap.c | | | 36 | ++++++++++++++++++++---------------- |
1 file changed, 20 insertions(+), 16 deletions(-)
diff --git a/snap.c b/snap.c
@@ -21,6 +21,10 @@
#include "snap.h"
#include "state.h"
+/* snapshot encryption algorithms */
+#define SNONETYPE 0x400
+#define SCHACHATYPE 0x401
+
/* snapshot header constants */
#define SHDRMAGIC "SNAPSNAPPYSNOOP"
#define NSHDRMAGIC sizeof(SHDRMAGIC)
@@ -55,7 +59,7 @@ struct mdnode {
struct sctx {
TAILQ_HEAD(mdhead, mdnode) mdhead; /* list of hashes contained in snapshot */
struct mdnode *mdnext; /* next hash to be returned via sget() */
- int crypto; /* when set, snapshots are encrypted */
+ int type; /* encryption algorithm */
int fd; /* underlying snapshot file descriptor */
int rdonly; /* when set, ssync() is a no-op */
struct shdr shdr; /* snapshot header */
@@ -114,7 +118,7 @@ loadmdnone(struct sctx *sctx, int first)
}
static int
-loadmdcrypto(struct sctx *sctx, int first)
+loadmdchacha(struct sctx *sctx, int first)
{
unsigned char buf[MDSIZE + crypto_secretstream_xchacha20poly1305_ABYTES];
unsigned char hdr[SHDRSIZE];
@@ -161,10 +165,10 @@ initmdhead(struct sctx *sctx)
int (*loadmd)(struct sctx *, int);
uint64_t i;
- if (!sctx->crypto)
+ if (sctx->type == SNONETYPE)
loadmd = loadmdnone;
else
- loadmd = loadmdcrypto;
+ loadmd = loadmdchacha;
shdr = &sctx->shdr;
for (i = 0; i < shdr->nbd; i++) {
@@ -188,7 +192,7 @@ screat(char *path, int mode, struct sctx **sctx)
{
unsigned char buf[SHDRSIZE];
struct shdr *shdr;
- int crypto;
+ int type;
int fd;
if (path == NULL || sctx == NULL) {
@@ -198,16 +202,16 @@ screat(char *path, int mode, struct sctx **sctx)
/* Determine algorithm type */
if (strcasecmp(param.ealgo, "none") == 0) {
- crypto = 0;
+ type = SNONETYPE;
} else if (strcasecmp(param.ealgo, "XChaCha20-Poly1305") == 0) {
- crypto = 1;
+ type = SCHACHATYPE;
} else {
seterr("invalid encryption type: %s", param.ealgo);
return -1;
}
/* Ensure a key has been provided if caller requested encryption */
- if (crypto && !param.keyloaded) {
+ if (type != SNONETYPE && !param.keyloaded) {
seterr("expected encryption key");
return -1;
}
@@ -232,7 +236,7 @@ screat(char *path, int mode, struct sctx **sctx)
TAILQ_INIT(&(*sctx)->mdhead);
(*sctx)->mdnext = NULL;
- (*sctx)->crypto = crypto;
+ (*sctx)->type = type;
(*sctx)->fd = fd;
shdr = &(*sctx)->shdr;
@@ -255,7 +259,7 @@ sopen(char *path, int flags, int mode, struct sctx **sctx)
{
unsigned char buf[SHDRSIZE];
struct shdr *shdr;
- int crypto;
+ int type;
int fd;
if (path == NULL || sctx == NULL) {
@@ -271,9 +275,9 @@ sopen(char *path, int flags, int mode, struct sctx **sctx)
/* Determine algorithm type */
if (strcasecmp(param.ealgo, "none") == 0) {
- crypto = 0;
+ type = SNONETYPE;
} else if (strcasecmp(param.ealgo, "XChaCha20-Poly1305") == 0) {
- crypto = 1;
+ type = SCHACHATYPE;
} else {
seterr("invalid encryption type: %s", param.ealgo);
return -1;
@@ -299,7 +303,7 @@ sopen(char *path, int flags, int mode, struct sctx **sctx)
TAILQ_INIT(&(*sctx)->mdhead);
(*sctx)->mdnext = NULL;
- (*sctx)->crypto = crypto;
+ (*sctx)->type = type;
(*sctx)->fd = fd;
(*sctx)->rdonly = 1;
@@ -418,7 +422,7 @@ syncnone(struct sctx *sctx)
}
static int
-synccrypto(struct sctx *sctx)
+syncchacha(struct sctx *sctx)
{
unsigned char hdr[SHDRSIZE];
crypto_secretstream_xchacha20poly1305_state state;
@@ -474,10 +478,10 @@ ssync(struct sctx *sctx)
return -1;
}
- if (!sctx->crypto)
+ if (sctx->type == SNONETYPE)
syncnone(sctx);
else
- synccrypto(sctx);
+ syncchacha(sctx);
fsync(sctx->fd);
return 0;