diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..5ca0973
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+.DS_Store
+
diff --git a/libraries/liblmdb/Makefile b/libraries/liblmdb/Makefile
index c252b50..4d46fe7 100644
--- a/libraries/liblmdb/Makefile
+++ b/libraries/liblmdb/Makefile
@@ -67,12 +67,12 @@ test: all
rm -rf testdb && mkdir testdb
./mtest && ./mdb_stat testdb
-liblmdb.a: mdb.o midl.o
- $(AR) rs $@ mdb.o midl.o
+liblmdb.a: mdb.o midl.o chacha8.o
+ $(AR) rs $@ mdb.o midl.o chacha8.o
-liblmdb$(SOEXT): mdb.lo midl.lo
+liblmdb$(SOEXT): mdb.lo midl.lo chacha8.o
# $(CC) $(LDFLAGS) -pthread -shared -Wl,-Bsymbolic -o $@ mdb.o midl.o $(SOLIBS)
- $(CC) $(LDFLAGS) -pthread -shared -o $@ mdb.lo midl.lo $(SOLIBS)
+ $(CC) $(LDFLAGS) -pthread -shared -o $@ mdb.lo midl.lo chacha8.o $(SOLIBS)
mdb_stat: mdb_stat.o module.o liblmdb.a
$(CC) $(LDFLAGS) -o $@ $^ $(LDL)
@@ -91,7 +91,7 @@ mtest4: mtest4.o liblmdb.a
mtest5: mtest5.o liblmdb.a
mtest6: mtest6.o liblmdb.a
mtest_remap: mtest_remap.o liblmdb.a
-mtest_enc: mtest_enc.o chacha8.o liblmdb.a
+mtest_enc: mtest_enc.o liblmdb.a
mtest_enc2: mtest_enc2.o module.o liblmdb.a crypto.lm
$(CC) $(LDFLAGS) -pthread -o $@ mtest_enc2.o module.o liblmdb.a $(LDL)
diff --git a/libraries/liblmdb/lmdb.h b/libraries/liblmdb/lmdb.h
index 9be6b5b..834c518 100644
--- a/libraries/liblmdb/lmdb.h
+++ b/libraries/liblmdb/lmdb.h
@@ -1409,6 +1409,8 @@ int mdb_set_relctx(MDB_txn *txn, MDB_dbi dbi, void *ctx);
*
EINVAL - an invalid parameter was specified.
*
*/
+int mdb_env_init_crypto(MDB_env *env, void *key);
+
int mdb_get(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data);
/** @brief Store items into a database.
diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c
index 8948397..22646cf 100644
--- a/libraries/liblmdb/mdb.c
+++ b/libraries/liblmdb/mdb.c
@@ -6298,7 +6298,7 @@ mdb_env_close(MDB_env *env)
mdb_env_close_active(env, 0);
#if MDB_RPAGE_CACHE
- free(env->me_enckey.mv_data);
+ //free(env->me_enckey.mv_data);
#endif
free(env);
}
@@ -10726,6 +10726,25 @@ done:
return rc;
}
+#include "chacha8.h"
+
+static int encfunc(const MDB_val *src, MDB_val *dst, const MDB_val *key, int encdec)
+{
+ chacha8(src->mv_data, src->mv_size, key[0].mv_data, key[1].mv_data, dst->mv_data);
+ return 0;
+}
+
+int
+mdb_env_init_crypto(MDB_env *env, void *key) {
+
+ MDB_val enckey;
+ enckey.mv_data = key;
+ enckey.mv_size = 32;
+ int ret = mdb_env_set_encrypt(env, encfunc, &enckey, 0);
+ //fprintf(stderr,"return of mdb_env_init_crypto %d\n",ret);
+ return ret;
+}
+
int
mdb_put(MDB_txn *txn, MDB_dbi dbi,
MDB_val *key, MDB_val *data, unsigned int flags)
@@ -11361,18 +11380,18 @@ mdb_env_set_assert(MDB_env *env, MDB_assert_func *func)
int ESECT
mdb_env_set_encrypt(MDB_env *env, MDB_enc_func *func, const MDB_val *key, unsigned int size)
{
- char *kdata;
+ //char *kdata;
if (!env || !func || !key)
return EINVAL;
if (env->me_flags & MDB_ENV_ACTIVE)
return EINVAL;
- if (! (kdata = malloc(key[0].mv_size)))
- return ENOMEM;
+ //if (! (kdata = malloc(key[0].mv_size)))
+ // return ENOMEM;
- memcpy(kdata, key->mv_data, key->mv_size);
+ //memcpy(kdata, key->mv_data, key->mv_size);
free(env->me_enckey.mv_data);
- env->me_enckey.mv_data = kdata;
+ env->me_enckey.mv_data = key->mv_data;//kdata;
env->me_enckey.mv_size = key->mv_size;
env->me_encfunc = func;
if (size)