@ohos-ports/lmdb 2.5.3 → 2.8.5-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -20
- package/README.md +72 -28
- package/SECURITY.md +12 -12
- package/bin/download-prebuilds.js +15 -0
- package/binding.gyp +115 -111
- package/build/Release/lmdb.node +0 -0
- package/caching.js +212 -156
- package/dependencies/lmdb/libraries/liblmdb/COPYRIGHT +20 -20
- package/dependencies/lmdb/libraries/liblmdb/Doxyfile +1631 -1631
- package/dependencies/lmdb/libraries/liblmdb/LICENSE +47 -47
- package/dependencies/lmdb/libraries/liblmdb/Makefile +136 -136
- package/dependencies/lmdb/libraries/liblmdb/chacha8.c +183 -183
- package/dependencies/lmdb/libraries/liblmdb/chacha8.h +14 -14
- package/dependencies/lmdb/libraries/liblmdb/crypto.c +121 -121
- package/dependencies/lmdb/libraries/liblmdb/intro.doc +192 -192
- package/dependencies/lmdb/libraries/liblmdb/lmdb.h +28 -3
- package/dependencies/lmdb/libraries/liblmdb/mdb.c +157 -31
- package/dependencies/lmdb/libraries/liblmdb/mdb_copy.1 +74 -74
- package/dependencies/lmdb/libraries/liblmdb/mdb_copy.c +106 -106
- package/dependencies/lmdb/libraries/liblmdb/mdb_drop.1 +53 -53
- package/dependencies/lmdb/libraries/liblmdb/mdb_drop.c +154 -154
- package/dependencies/lmdb/libraries/liblmdb/mdb_dump.1 +94 -94
- package/dependencies/lmdb/libraries/liblmdb/mdb_dump.c +333 -333
- package/dependencies/lmdb/libraries/liblmdb/mdb_load.1 +97 -97
- package/dependencies/lmdb/libraries/liblmdb/mdb_load.c +530 -530
- package/dependencies/lmdb/libraries/liblmdb/mdb_stat.1 +83 -83
- package/dependencies/lmdb/libraries/liblmdb/mdb_stat.c +276 -276
- package/dependencies/lmdb/libraries/liblmdb/midl-sparse.c +452 -0
- package/dependencies/lmdb/libraries/liblmdb/midl.c +452 -452
- package/dependencies/lmdb/libraries/liblmdb/midl.h +208 -208
- package/dependencies/lmdb/libraries/liblmdb/module.c +101 -101
- package/dependencies/lmdb/libraries/liblmdb/module.h +16 -16
- package/dependencies/lmdb/libraries/liblmdb/mtest.c +178 -178
- package/dependencies/lmdb/libraries/liblmdb/mtest2.c +124 -124
- package/dependencies/lmdb/libraries/liblmdb/mtest3.c +133 -133
- package/dependencies/lmdb/libraries/liblmdb/mtest4.c +168 -168
- package/dependencies/lmdb/libraries/liblmdb/mtest5.c +135 -135
- package/dependencies/lmdb/libraries/liblmdb/mtest6.c +141 -141
- package/dependencies/lmdb/libraries/liblmdb/mtest_enc.c +190 -190
- package/dependencies/lmdb/libraries/liblmdb/mtest_enc2.c +189 -189
- package/dependencies/lmdb/libraries/liblmdb/mtest_remap.c +177 -177
- package/dependencies/lmdb/libraries/liblmdb/sample-bdb.txt +73 -73
- package/dependencies/lmdb/libraries/liblmdb/sample-mdb.txt +62 -62
- package/dependencies/lmdb/libraries/liblmdb/tooltag +27 -27
- package/dependencies/lmdb-data-v1/libraries/liblmdb/CHANGES +266 -0
- package/dependencies/lmdb-data-v1/libraries/liblmdb/COPYRIGHT +20 -20
- package/dependencies/lmdb-data-v1/libraries/liblmdb/Doxyfile +1631 -1631
- package/dependencies/lmdb-data-v1/libraries/liblmdb/LICENSE +47 -47
- package/dependencies/lmdb-data-v1/libraries/liblmdb/intro.doc +192 -192
- package/dependencies/lmdb-data-v1/libraries/liblmdb/lmdb.h +1608 -1653
- package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb.c +10320 -11359
- package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_copy.1 +55 -61
- package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_copy.c +82 -84
- package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_dump.1 +75 -81
- package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_dump.c +319 -319
- package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_load.1 +84 -84
- package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_load.c +496 -492
- package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_stat.1 +64 -70
- package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_stat.c +263 -264
- package/dependencies/lmdb-data-v1/libraries/liblmdb/midl.c +359 -421
- package/dependencies/lmdb-data-v1/libraries/liblmdb/midl.h +186 -200
- package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest.c +177 -177
- package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest2.c +124 -124
- package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest3.c +133 -133
- package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest4.c +168 -168
- package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest5.c +135 -135
- package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest6.c +141 -141
- package/dependencies/lmdb-data-v1/libraries/liblmdb/sample-bdb.txt +73 -73
- package/dependencies/lmdb-data-v1/libraries/liblmdb/sample-mdb.txt +62 -62
- package/dependencies/lmdb-data-v1/libraries/liblmdb/tooltag +22 -27
- package/dependencies/lz4/LICENSE +11 -11
- package/dependencies/lz4/lib/LICENSE +24 -24
- package/dependencies/lz4/lib/Makefile +225 -0
- package/dependencies/lz4/lib/README.md +169 -137
- package/dependencies/lz4/lib/dll/example/Makefile +63 -0
- package/dependencies/lz4/lib/dll/example/README.md +69 -69
- package/dependencies/lz4/lib/dll/liblz4.def +62 -62
- package/dependencies/lz4/lib/liblz4-dll.rc.in +35 -35
- package/dependencies/lz4/lib/liblz4.pc.in +14 -14
- package/dependencies/lz4/lib/lz4.c +2722 -2495
- package/dependencies/lz4/lib/lz4.h +842 -774
- package/dependencies/lz4/lib/lz4file.c +311 -0
- package/dependencies/lz4/lib/lz4file.h +93 -0
- package/dependencies/lz4/lib/lz4frame.c +2078 -1899
- package/dependencies/lz4/lib/lz4frame.h +692 -623
- package/dependencies/lz4/lib/lz4frame_static.h +47 -47
- package/dependencies/lz4/lib/lz4hc.c +1631 -1615
- package/dependencies/lz4/lib/lz4hc.h +413 -413
- package/dependencies/lz4/lib/xxhash.c +1030 -1030
- package/dependencies/lz4/lib/xxhash.h +328 -328
- package/dependencies/v8/v8-fast-api-calls-v16.h +790 -790
- package/dependencies/v8/v8-fast-api-calls.h +784 -888
- package/dist/index.cjs +1050 -584
- package/dist/index.cjs.map +1 -1
- package/index.d.cts +420 -0
- package/index.d.ts +450 -385
- package/index.js +38 -37
- package/keys.js +116 -102
- package/level.js +26 -26
- package/native.js +8 -5
- package/node-index.js +21 -17
- package/open.js +51 -17
- package/package.json +63 -21
- package/read.js +338 -95
- package/src/compression.cpp +12 -9
- package/src/cursor.cpp +82 -31
- package/src/dbi.cpp +78 -40
- package/src/env.cpp +336 -68
- package/src/lmdb-js.cpp +64 -64
- package/src/lmdb-js.h +83 -49
- package/src/misc.cpp +297 -28
- package/src/ordered-binary.cpp +46 -46
- package/src/txn.cpp +210 -257
- package/src/v8-functions.cpp +170 -166
- package/src/windows.c +34 -34
- package/src/writer.cpp +169 -84
- package/util/RangeIterable.js +112 -17
- package/util/set-optional-deps.cjs +14 -10
- package/util/when.js +8 -8
- package/write.js +145 -121
- package/dependencies/lmdb-data-v1/libraries/liblmdb/Makefile +0 -118
- package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_drop.1 +0 -40
- package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_drop.c +0 -135
- package/rollup.config.js +0 -12
|
@@ -1,183 +1,183 @@
|
|
|
1
|
-
/*
|
|
2
|
-
chacha-merged.c version 20080118
|
|
3
|
-
D. J. Bernstein
|
|
4
|
-
Public domain.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
#include <memory.h>
|
|
8
|
-
#include <stdio.h>
|
|
9
|
-
//#include <sys/param.h>
|
|
10
|
-
|
|
11
|
-
#include "chacha8.h"
|
|
12
|
-
#if 0
|
|
13
|
-
#include "common/int-util.h"
|
|
14
|
-
#include "warnings.h"
|
|
15
|
-
#endif
|
|
16
|
-
|
|
17
|
-
#if BYTE_ORDER == LITTLE_ENDIAN
|
|
18
|
-
#define SWAP32LE(x) (x)
|
|
19
|
-
#else
|
|
20
|
-
#define SWAP32LE(x) ((((uint32_t) (x) & 0x000000ff) << 24) | \
|
|
21
|
-
(((uint32_t) (x) & 0x0000ff00) << 8) | \
|
|
22
|
-
(((uint32_t) (x) & 0x00ff0000) >> 8) | \
|
|
23
|
-
(((uint32_t) (x) & 0xff000000) >> 24))
|
|
24
|
-
#endif
|
|
25
|
-
|
|
26
|
-
/*
|
|
27
|
-
* The following macros are used to obtain exact-width results.
|
|
28
|
-
*/
|
|
29
|
-
#define U8V(v) ((uint8_t)(v) & UINT8_C(0xFF))
|
|
30
|
-
#define U32V(v) ((uint32_t)(v) & UINT32_C(0xFFFFFFFF))
|
|
31
|
-
|
|
32
|
-
/*
|
|
33
|
-
* The following macros load words from an array of bytes with
|
|
34
|
-
* different types of endianness, and vice versa.
|
|
35
|
-
*/
|
|
36
|
-
#define U8TO32_LITTLE(p) SWAP32LE(((uint32_t*)(p))[0])
|
|
37
|
-
#define U32TO8_LITTLE(p, v) (((uint32_t*)(p))[0] = SWAP32LE(v))
|
|
38
|
-
|
|
39
|
-
#define ROTATE(v,c) (rol32(v,c))
|
|
40
|
-
#define XOR(v,w) ((v) ^ (w))
|
|
41
|
-
#define PLUS(v,w) (U32V((v) + (w)))
|
|
42
|
-
#define PLUSONE(v) (PLUS((v),1))
|
|
43
|
-
|
|
44
|
-
#define QUARTERROUND(a,b,c,d) \
|
|
45
|
-
a = PLUS(a,b); d = ROTATE(XOR(d,a),16); \
|
|
46
|
-
c = PLUS(c,d); b = ROTATE(XOR(b,c),12); \
|
|
47
|
-
a = PLUS(a,b); d = ROTATE(XOR(d,a), 8); \
|
|
48
|
-
c = PLUS(c,d); b = ROTATE(XOR(b,c), 7);
|
|
49
|
-
|
|
50
|
-
static const char sigma[] = "expand 32-byte k";
|
|
51
|
-
|
|
52
|
-
static uint32_t rol32(uint32_t x, int r) {
|
|
53
|
-
return (x << (r & 31)) | (x >> (-r & 31));
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
void chacha8(const void* data, size_t length, const uint8_t* key, const uint8_t* iv, char* cipher) {
|
|
57
|
-
uint32_t x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15;
|
|
58
|
-
uint32_t j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12, j13, j14, j15;
|
|
59
|
-
char* ctarget = 0;
|
|
60
|
-
char tmp[64];
|
|
61
|
-
int i;
|
|
62
|
-
|
|
63
|
-
if (!length) return;
|
|
64
|
-
|
|
65
|
-
j0 = U8TO32_LITTLE(sigma + 0);
|
|
66
|
-
j1 = U8TO32_LITTLE(sigma + 4);
|
|
67
|
-
j2 = U8TO32_LITTLE(sigma + 8);
|
|
68
|
-
j3 = U8TO32_LITTLE(sigma + 12);
|
|
69
|
-
j4 = U8TO32_LITTLE(key + 0);
|
|
70
|
-
j5 = U8TO32_LITTLE(key + 4);
|
|
71
|
-
j6 = U8TO32_LITTLE(key + 8);
|
|
72
|
-
j7 = U8TO32_LITTLE(key + 12);
|
|
73
|
-
j8 = U8TO32_LITTLE(key + 16);
|
|
74
|
-
j9 = U8TO32_LITTLE(key + 20);
|
|
75
|
-
j10 = U8TO32_LITTLE(key + 24);
|
|
76
|
-
j11 = U8TO32_LITTLE(key + 28);
|
|
77
|
-
j12 = 0;
|
|
78
|
-
j13 = 0;
|
|
79
|
-
j14 = U8TO32_LITTLE(iv + 0);
|
|
80
|
-
j15 = U8TO32_LITTLE(iv + 4);
|
|
81
|
-
|
|
82
|
-
for (;;) {
|
|
83
|
-
if (length < 64) {
|
|
84
|
-
memcpy(tmp, data, length);
|
|
85
|
-
data = tmp;
|
|
86
|
-
ctarget = cipher;
|
|
87
|
-
cipher = tmp;
|
|
88
|
-
}
|
|
89
|
-
x0 = j0;
|
|
90
|
-
x1 = j1;
|
|
91
|
-
x2 = j2;
|
|
92
|
-
x3 = j3;
|
|
93
|
-
x4 = j4;
|
|
94
|
-
x5 = j5;
|
|
95
|
-
x6 = j6;
|
|
96
|
-
x7 = j7;
|
|
97
|
-
x8 = j8;
|
|
98
|
-
x9 = j9;
|
|
99
|
-
x10 = j10;
|
|
100
|
-
x11 = j11;
|
|
101
|
-
x12 = j12;
|
|
102
|
-
x13 = j13;
|
|
103
|
-
x14 = j14;
|
|
104
|
-
x15 = j15;
|
|
105
|
-
for (i = 8;i > 0;i -= 2) {
|
|
106
|
-
QUARTERROUND( x0, x4, x8,x12)
|
|
107
|
-
QUARTERROUND( x1, x5, x9,x13)
|
|
108
|
-
QUARTERROUND( x2, x6,x10,x14)
|
|
109
|
-
QUARTERROUND( x3, x7,x11,x15)
|
|
110
|
-
QUARTERROUND( x0, x5,x10,x15)
|
|
111
|
-
QUARTERROUND( x1, x6,x11,x12)
|
|
112
|
-
QUARTERROUND( x2, x7, x8,x13)
|
|
113
|
-
QUARTERROUND( x3, x4, x9,x14)
|
|
114
|
-
}
|
|
115
|
-
x0 = PLUS( x0, j0);
|
|
116
|
-
x1 = PLUS( x1, j1);
|
|
117
|
-
x2 = PLUS( x2, j2);
|
|
118
|
-
x3 = PLUS( x3, j3);
|
|
119
|
-
x4 = PLUS( x4, j4);
|
|
120
|
-
x5 = PLUS( x5, j5);
|
|
121
|
-
x6 = PLUS( x6, j6);
|
|
122
|
-
x7 = PLUS( x7, j7);
|
|
123
|
-
x8 = PLUS( x8, j8);
|
|
124
|
-
x9 = PLUS( x9, j9);
|
|
125
|
-
x10 = PLUS(x10,j10);
|
|
126
|
-
x11 = PLUS(x11,j11);
|
|
127
|
-
x12 = PLUS(x12,j12);
|
|
128
|
-
x13 = PLUS(x13,j13);
|
|
129
|
-
x14 = PLUS(x14,j14);
|
|
130
|
-
x15 = PLUS(x15,j15);
|
|
131
|
-
|
|
132
|
-
x0 = XOR( x0,U8TO32_LITTLE((uint8_t*)data + 0));
|
|
133
|
-
x1 = XOR( x1,U8TO32_LITTLE((uint8_t*)data + 4));
|
|
134
|
-
x2 = XOR( x2,U8TO32_LITTLE((uint8_t*)data + 8));
|
|
135
|
-
x3 = XOR( x3,U8TO32_LITTLE((uint8_t*)data + 12));
|
|
136
|
-
x4 = XOR( x4,U8TO32_LITTLE((uint8_t*)data + 16));
|
|
137
|
-
x5 = XOR( x5,U8TO32_LITTLE((uint8_t*)data + 20));
|
|
138
|
-
x6 = XOR( x6,U8TO32_LITTLE((uint8_t*)data + 24));
|
|
139
|
-
x7 = XOR( x7,U8TO32_LITTLE((uint8_t*)data + 28));
|
|
140
|
-
x8 = XOR( x8,U8TO32_LITTLE((uint8_t*)data + 32));
|
|
141
|
-
x9 = XOR( x9,U8TO32_LITTLE((uint8_t*)data + 36));
|
|
142
|
-
x10 = XOR(x10,U8TO32_LITTLE((uint8_t*)data + 40));
|
|
143
|
-
x11 = XOR(x11,U8TO32_LITTLE((uint8_t*)data + 44));
|
|
144
|
-
x12 = XOR(x12,U8TO32_LITTLE((uint8_t*)data + 48));
|
|
145
|
-
x13 = XOR(x13,U8TO32_LITTLE((uint8_t*)data + 52));
|
|
146
|
-
x14 = XOR(x14,U8TO32_LITTLE((uint8_t*)data + 56));
|
|
147
|
-
x15 = XOR(x15,U8TO32_LITTLE((uint8_t*)data + 60));
|
|
148
|
-
|
|
149
|
-
j12 = PLUSONE(j12);
|
|
150
|
-
if (!j12)
|
|
151
|
-
{
|
|
152
|
-
j13 = PLUSONE(j13);
|
|
153
|
-
/* stopping at 2^70 bytes per iv is user's responsibility */
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
U32TO8_LITTLE(cipher + 0,x0);
|
|
157
|
-
U32TO8_LITTLE(cipher + 4,x1);
|
|
158
|
-
U32TO8_LITTLE(cipher + 8,x2);
|
|
159
|
-
U32TO8_LITTLE(cipher + 12,x3);
|
|
160
|
-
U32TO8_LITTLE(cipher + 16,x4);
|
|
161
|
-
U32TO8_LITTLE(cipher + 20,x5);
|
|
162
|
-
U32TO8_LITTLE(cipher + 24,x6);
|
|
163
|
-
U32TO8_LITTLE(cipher + 28,x7);
|
|
164
|
-
U32TO8_LITTLE(cipher + 32,x8);
|
|
165
|
-
U32TO8_LITTLE(cipher + 36,x9);
|
|
166
|
-
U32TO8_LITTLE(cipher + 40,x10);
|
|
167
|
-
U32TO8_LITTLE(cipher + 44,x11);
|
|
168
|
-
U32TO8_LITTLE(cipher + 48,x12);
|
|
169
|
-
U32TO8_LITTLE(cipher + 52,x13);
|
|
170
|
-
U32TO8_LITTLE(cipher + 56,x14);
|
|
171
|
-
U32TO8_LITTLE(cipher + 60,x15);
|
|
172
|
-
|
|
173
|
-
if (length <= 64) {
|
|
174
|
-
if (length < 64) {
|
|
175
|
-
memcpy(ctarget, cipher, length);
|
|
176
|
-
}
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
length -= 64;
|
|
180
|
-
cipher += 64;
|
|
181
|
-
data = (uint8_t*)data + 64;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
chacha-merged.c version 20080118
|
|
3
|
+
D. J. Bernstein
|
|
4
|
+
Public domain.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
#include <memory.h>
|
|
8
|
+
#include <stdio.h>
|
|
9
|
+
//#include <sys/param.h>
|
|
10
|
+
|
|
11
|
+
#include "chacha8.h"
|
|
12
|
+
#if 0
|
|
13
|
+
#include "common/int-util.h"
|
|
14
|
+
#include "warnings.h"
|
|
15
|
+
#endif
|
|
16
|
+
|
|
17
|
+
#if BYTE_ORDER == LITTLE_ENDIAN
|
|
18
|
+
#define SWAP32LE(x) (x)
|
|
19
|
+
#else
|
|
20
|
+
#define SWAP32LE(x) ((((uint32_t) (x) & 0x000000ff) << 24) | \
|
|
21
|
+
(((uint32_t) (x) & 0x0000ff00) << 8) | \
|
|
22
|
+
(((uint32_t) (x) & 0x00ff0000) >> 8) | \
|
|
23
|
+
(((uint32_t) (x) & 0xff000000) >> 24))
|
|
24
|
+
#endif
|
|
25
|
+
|
|
26
|
+
/*
|
|
27
|
+
* The following macros are used to obtain exact-width results.
|
|
28
|
+
*/
|
|
29
|
+
#define U8V(v) ((uint8_t)(v) & UINT8_C(0xFF))
|
|
30
|
+
#define U32V(v) ((uint32_t)(v) & UINT32_C(0xFFFFFFFF))
|
|
31
|
+
|
|
32
|
+
/*
|
|
33
|
+
* The following macros load words from an array of bytes with
|
|
34
|
+
* different types of endianness, and vice versa.
|
|
35
|
+
*/
|
|
36
|
+
#define U8TO32_LITTLE(p) SWAP32LE(((uint32_t*)(p))[0])
|
|
37
|
+
#define U32TO8_LITTLE(p, v) (((uint32_t*)(p))[0] = SWAP32LE(v))
|
|
38
|
+
|
|
39
|
+
#define ROTATE(v,c) (rol32(v,c))
|
|
40
|
+
#define XOR(v,w) ((v) ^ (w))
|
|
41
|
+
#define PLUS(v,w) (U32V((v) + (w)))
|
|
42
|
+
#define PLUSONE(v) (PLUS((v),1))
|
|
43
|
+
|
|
44
|
+
#define QUARTERROUND(a,b,c,d) \
|
|
45
|
+
a = PLUS(a,b); d = ROTATE(XOR(d,a),16); \
|
|
46
|
+
c = PLUS(c,d); b = ROTATE(XOR(b,c),12); \
|
|
47
|
+
a = PLUS(a,b); d = ROTATE(XOR(d,a), 8); \
|
|
48
|
+
c = PLUS(c,d); b = ROTATE(XOR(b,c), 7);
|
|
49
|
+
|
|
50
|
+
static const char sigma[] = "expand 32-byte k";
|
|
51
|
+
|
|
52
|
+
static uint32_t rol32(uint32_t x, int r) {
|
|
53
|
+
return (x << (r & 31)) | (x >> (-r & 31));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
void chacha8(const void* data, size_t length, const uint8_t* key, const uint8_t* iv, char* cipher) {
|
|
57
|
+
uint32_t x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15;
|
|
58
|
+
uint32_t j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12, j13, j14, j15;
|
|
59
|
+
char* ctarget = 0;
|
|
60
|
+
char tmp[64];
|
|
61
|
+
int i;
|
|
62
|
+
|
|
63
|
+
if (!length) return;
|
|
64
|
+
|
|
65
|
+
j0 = U8TO32_LITTLE(sigma + 0);
|
|
66
|
+
j1 = U8TO32_LITTLE(sigma + 4);
|
|
67
|
+
j2 = U8TO32_LITTLE(sigma + 8);
|
|
68
|
+
j3 = U8TO32_LITTLE(sigma + 12);
|
|
69
|
+
j4 = U8TO32_LITTLE(key + 0);
|
|
70
|
+
j5 = U8TO32_LITTLE(key + 4);
|
|
71
|
+
j6 = U8TO32_LITTLE(key + 8);
|
|
72
|
+
j7 = U8TO32_LITTLE(key + 12);
|
|
73
|
+
j8 = U8TO32_LITTLE(key + 16);
|
|
74
|
+
j9 = U8TO32_LITTLE(key + 20);
|
|
75
|
+
j10 = U8TO32_LITTLE(key + 24);
|
|
76
|
+
j11 = U8TO32_LITTLE(key + 28);
|
|
77
|
+
j12 = 0;
|
|
78
|
+
j13 = 0;
|
|
79
|
+
j14 = U8TO32_LITTLE(iv + 0);
|
|
80
|
+
j15 = U8TO32_LITTLE(iv + 4);
|
|
81
|
+
|
|
82
|
+
for (;;) {
|
|
83
|
+
if (length < 64) {
|
|
84
|
+
memcpy(tmp, data, length);
|
|
85
|
+
data = tmp;
|
|
86
|
+
ctarget = cipher;
|
|
87
|
+
cipher = tmp;
|
|
88
|
+
}
|
|
89
|
+
x0 = j0;
|
|
90
|
+
x1 = j1;
|
|
91
|
+
x2 = j2;
|
|
92
|
+
x3 = j3;
|
|
93
|
+
x4 = j4;
|
|
94
|
+
x5 = j5;
|
|
95
|
+
x6 = j6;
|
|
96
|
+
x7 = j7;
|
|
97
|
+
x8 = j8;
|
|
98
|
+
x9 = j9;
|
|
99
|
+
x10 = j10;
|
|
100
|
+
x11 = j11;
|
|
101
|
+
x12 = j12;
|
|
102
|
+
x13 = j13;
|
|
103
|
+
x14 = j14;
|
|
104
|
+
x15 = j15;
|
|
105
|
+
for (i = 8;i > 0;i -= 2) {
|
|
106
|
+
QUARTERROUND( x0, x4, x8,x12)
|
|
107
|
+
QUARTERROUND( x1, x5, x9,x13)
|
|
108
|
+
QUARTERROUND( x2, x6,x10,x14)
|
|
109
|
+
QUARTERROUND( x3, x7,x11,x15)
|
|
110
|
+
QUARTERROUND( x0, x5,x10,x15)
|
|
111
|
+
QUARTERROUND( x1, x6,x11,x12)
|
|
112
|
+
QUARTERROUND( x2, x7, x8,x13)
|
|
113
|
+
QUARTERROUND( x3, x4, x9,x14)
|
|
114
|
+
}
|
|
115
|
+
x0 = PLUS( x0, j0);
|
|
116
|
+
x1 = PLUS( x1, j1);
|
|
117
|
+
x2 = PLUS( x2, j2);
|
|
118
|
+
x3 = PLUS( x3, j3);
|
|
119
|
+
x4 = PLUS( x4, j4);
|
|
120
|
+
x5 = PLUS( x5, j5);
|
|
121
|
+
x6 = PLUS( x6, j6);
|
|
122
|
+
x7 = PLUS( x7, j7);
|
|
123
|
+
x8 = PLUS( x8, j8);
|
|
124
|
+
x9 = PLUS( x9, j9);
|
|
125
|
+
x10 = PLUS(x10,j10);
|
|
126
|
+
x11 = PLUS(x11,j11);
|
|
127
|
+
x12 = PLUS(x12,j12);
|
|
128
|
+
x13 = PLUS(x13,j13);
|
|
129
|
+
x14 = PLUS(x14,j14);
|
|
130
|
+
x15 = PLUS(x15,j15);
|
|
131
|
+
|
|
132
|
+
x0 = XOR( x0,U8TO32_LITTLE((uint8_t*)data + 0));
|
|
133
|
+
x1 = XOR( x1,U8TO32_LITTLE((uint8_t*)data + 4));
|
|
134
|
+
x2 = XOR( x2,U8TO32_LITTLE((uint8_t*)data + 8));
|
|
135
|
+
x3 = XOR( x3,U8TO32_LITTLE((uint8_t*)data + 12));
|
|
136
|
+
x4 = XOR( x4,U8TO32_LITTLE((uint8_t*)data + 16));
|
|
137
|
+
x5 = XOR( x5,U8TO32_LITTLE((uint8_t*)data + 20));
|
|
138
|
+
x6 = XOR( x6,U8TO32_LITTLE((uint8_t*)data + 24));
|
|
139
|
+
x7 = XOR( x7,U8TO32_LITTLE((uint8_t*)data + 28));
|
|
140
|
+
x8 = XOR( x8,U8TO32_LITTLE((uint8_t*)data + 32));
|
|
141
|
+
x9 = XOR( x9,U8TO32_LITTLE((uint8_t*)data + 36));
|
|
142
|
+
x10 = XOR(x10,U8TO32_LITTLE((uint8_t*)data + 40));
|
|
143
|
+
x11 = XOR(x11,U8TO32_LITTLE((uint8_t*)data + 44));
|
|
144
|
+
x12 = XOR(x12,U8TO32_LITTLE((uint8_t*)data + 48));
|
|
145
|
+
x13 = XOR(x13,U8TO32_LITTLE((uint8_t*)data + 52));
|
|
146
|
+
x14 = XOR(x14,U8TO32_LITTLE((uint8_t*)data + 56));
|
|
147
|
+
x15 = XOR(x15,U8TO32_LITTLE((uint8_t*)data + 60));
|
|
148
|
+
|
|
149
|
+
j12 = PLUSONE(j12);
|
|
150
|
+
if (!j12)
|
|
151
|
+
{
|
|
152
|
+
j13 = PLUSONE(j13);
|
|
153
|
+
/* stopping at 2^70 bytes per iv is user's responsibility */
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
U32TO8_LITTLE(cipher + 0,x0);
|
|
157
|
+
U32TO8_LITTLE(cipher + 4,x1);
|
|
158
|
+
U32TO8_LITTLE(cipher + 8,x2);
|
|
159
|
+
U32TO8_LITTLE(cipher + 12,x3);
|
|
160
|
+
U32TO8_LITTLE(cipher + 16,x4);
|
|
161
|
+
U32TO8_LITTLE(cipher + 20,x5);
|
|
162
|
+
U32TO8_LITTLE(cipher + 24,x6);
|
|
163
|
+
U32TO8_LITTLE(cipher + 28,x7);
|
|
164
|
+
U32TO8_LITTLE(cipher + 32,x8);
|
|
165
|
+
U32TO8_LITTLE(cipher + 36,x9);
|
|
166
|
+
U32TO8_LITTLE(cipher + 40,x10);
|
|
167
|
+
U32TO8_LITTLE(cipher + 44,x11);
|
|
168
|
+
U32TO8_LITTLE(cipher + 48,x12);
|
|
169
|
+
U32TO8_LITTLE(cipher + 52,x13);
|
|
170
|
+
U32TO8_LITTLE(cipher + 56,x14);
|
|
171
|
+
U32TO8_LITTLE(cipher + 60,x15);
|
|
172
|
+
|
|
173
|
+
if (length <= 64) {
|
|
174
|
+
if (length < 64) {
|
|
175
|
+
memcpy(ctarget, cipher, length);
|
|
176
|
+
}
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
length -= 64;
|
|
180
|
+
cipher += 64;
|
|
181
|
+
data = (uint8_t*)data + 64;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
#include <stdint.h>
|
|
2
|
-
#include <stddef.h>
|
|
3
|
-
#ifdef __cplusplus
|
|
4
|
-
extern "C" {
|
|
5
|
-
#endif
|
|
6
|
-
void chacha8(const void* data, size_t length, const uint8_t* key, const uint8_t* iv, char* cipher);
|
|
7
|
-
|
|
8
|
-
#define CHACHA8_KEY_SIZE 32
|
|
9
|
-
#define CHACHA8_IV_SIZE 8
|
|
10
|
-
|
|
11
|
-
#ifdef __cplusplus
|
|
12
|
-
}
|
|
13
|
-
#endif
|
|
14
|
-
|
|
1
|
+
#include <stdint.h>
|
|
2
|
+
#include <stddef.h>
|
|
3
|
+
#ifdef __cplusplus
|
|
4
|
+
extern "C" {
|
|
5
|
+
#endif
|
|
6
|
+
void chacha8(const void* data, size_t length, const uint8_t* key, const uint8_t* iv, char* cipher);
|
|
7
|
+
|
|
8
|
+
#define CHACHA8_KEY_SIZE 32
|
|
9
|
+
#define CHACHA8_IV_SIZE 8
|
|
10
|
+
|
|
11
|
+
#ifdef __cplusplus
|
|
12
|
+
}
|
|
13
|
+
#endif
|
|
14
|
+
|
|
@@ -1,121 +1,121 @@
|
|
|
1
|
-
/* crypto.c - LMDB encryption helper module */
|
|
2
|
-
/*
|
|
3
|
-
* Copyright 2020-2021 Howard Chu, Symas Corp.
|
|
4
|
-
* All rights reserved.
|
|
5
|
-
*
|
|
6
|
-
* Redistribution and use in source and binary forms, with or without
|
|
7
|
-
* modification, are permitted only as authorized by the Symas
|
|
8
|
-
* Dual-Use License.
|
|
9
|
-
*
|
|
10
|
-
* A copy of this license is available in the file LICENSE in the
|
|
11
|
-
* source distribution.
|
|
12
|
-
*/
|
|
13
|
-
#include <string.h>
|
|
14
|
-
|
|
15
|
-
#include <openssl/engine.h>
|
|
16
|
-
|
|
17
|
-
#include "lmdb.h"
|
|
18
|
-
|
|
19
|
-
MDB_crypto_hooks MDB_crypto;
|
|
20
|
-
|
|
21
|
-
static EVP_CIPHER *cipher;
|
|
22
|
-
|
|
23
|
-
static int mcf_str2key(const char *passwd, MDB_val *key)
|
|
24
|
-
{
|
|
25
|
-
unsigned int size;
|
|
26
|
-
EVP_MD_CTX *mdctx = EVP_MD_CTX_new();
|
|
27
|
-
EVP_DigestInit_ex(mdctx, EVP_sha256(), NULL);
|
|
28
|
-
EVP_DigestUpdate(mdctx, "Just a Constant", sizeof("Just a Constant"));
|
|
29
|
-
EVP_DigestUpdate(mdctx, passwd, strlen(passwd));
|
|
30
|
-
EVP_DigestFinal_ex(mdctx, key->mv_data, &size);
|
|
31
|
-
EVP_MD_CTX_free(mdctx);
|
|
32
|
-
return 0;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/* cheats - internal OpenSSL 1.1 structures */
|
|
36
|
-
typedef struct evp_cipher_ctx_st {
|
|
37
|
-
const EVP_CIPHER *cipher;
|
|
38
|
-
ENGINE *engine; /* functional reference if 'cipher' is
|
|
39
|
-
* ENGINE-provided */
|
|
40
|
-
int encrypt; /* encrypt or decrypt */
|
|
41
|
-
int buf_len; /* number we have left */
|
|
42
|
-
unsigned char oiv[EVP_MAX_IV_LENGTH]; /* original iv */
|
|
43
|
-
unsigned char iv[EVP_MAX_IV_LENGTH]; /* working iv */
|
|
44
|
-
unsigned char buf[EVP_MAX_BLOCK_LENGTH]; /* saved partial block */
|
|
45
|
-
int num; /* used by cfb/ofb/ctr mode */
|
|
46
|
-
/* FIXME: Should this even exist? It appears unused */
|
|
47
|
-
void *app_data; /* application stuff */
|
|
48
|
-
int key_len; /* May change for variable length cipher */
|
|
49
|
-
unsigned long flags; /* Various flags */
|
|
50
|
-
void *cipher_data; /* per EVP data */
|
|
51
|
-
int final_used;
|
|
52
|
-
int block_mask;
|
|
53
|
-
unsigned char final[EVP_MAX_BLOCK_LENGTH]; /* possible final block */
|
|
54
|
-
} EVP_CIPHER_CTX;
|
|
55
|
-
|
|
56
|
-
#define CHACHA_KEY_SIZE 32
|
|
57
|
-
#define CHACHA_CTR_SIZE 16
|
|
58
|
-
#define CHACHA_BLK_SIZE 64
|
|
59
|
-
#define POLY1305_BLOCK_SIZE 16
|
|
60
|
-
|
|
61
|
-
typedef struct {
|
|
62
|
-
union {
|
|
63
|
-
double align; /* this ensures even sizeof(EVP_CHACHA_KEY)%8==0 */
|
|
64
|
-
unsigned int d[CHACHA_KEY_SIZE / 4];
|
|
65
|
-
} key;
|
|
66
|
-
unsigned int counter[CHACHA_CTR_SIZE / 4];
|
|
67
|
-
unsigned char buf[CHACHA_BLK_SIZE];
|
|
68
|
-
unsigned int partial_len;
|
|
69
|
-
} EVP_CHACHA_KEY;
|
|
70
|
-
|
|
71
|
-
typedef struct {
|
|
72
|
-
EVP_CHACHA_KEY key;
|
|
73
|
-
unsigned int nonce[12/4];
|
|
74
|
-
unsigned char tag[POLY1305_BLOCK_SIZE];
|
|
75
|
-
unsigned char tls_aad[POLY1305_BLOCK_SIZE];
|
|
76
|
-
struct { uint64_t aad, text; } len;
|
|
77
|
-
int aad, mac_inited, tag_len, nonce_len;
|
|
78
|
-
size_t tls_payload_length;
|
|
79
|
-
} EVP_CHACHA_AEAD_CTX;
|
|
80
|
-
|
|
81
|
-
static int mcf_encfunc(const MDB_val *src, MDB_val *dst, const MDB_val *key, int encdec)
|
|
82
|
-
{
|
|
83
|
-
unsigned char iv[12];
|
|
84
|
-
int ivl, outl, rc;
|
|
85
|
-
mdb_size_t *ptr;
|
|
86
|
-
EVP_CIPHER_CTX ctx = {0};
|
|
87
|
-
EVP_CHACHA_AEAD_CTX cactx;
|
|
88
|
-
|
|
89
|
-
ctx.cipher_data = &cactx;
|
|
90
|
-
ptr = key[1].mv_data;
|
|
91
|
-
ivl = ptr[0] & 0xffffffff;
|
|
92
|
-
memcpy(iv, &ivl, 4);
|
|
93
|
-
memcpy(iv+4, ptr+1, sizeof(mdb_size_t));
|
|
94
|
-
EVP_CipherInit_ex(&ctx, cipher, NULL, key[0].mv_data, iv, encdec);
|
|
95
|
-
EVP_CIPHER_CTX_set_padding(&ctx, 0);
|
|
96
|
-
if (!encdec) {
|
|
97
|
-
EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_AEAD_SET_TAG, key[2].mv_size, key[2].mv_data);
|
|
98
|
-
}
|
|
99
|
-
rc = EVP_CipherUpdate(&ctx, dst->mv_data, &outl, src->mv_data, src->mv_size);
|
|
100
|
-
if (rc)
|
|
101
|
-
rc = EVP_CipherFinal_ex(&ctx, key[2].mv_data, &outl);
|
|
102
|
-
if (rc && encdec) {
|
|
103
|
-
EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_AEAD_GET_TAG, key[2].mv_size, key[2].mv_data);
|
|
104
|
-
}
|
|
105
|
-
return rc == 0;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
static const MDB_crypto_funcs mcf_table = {
|
|
109
|
-
mcf_str2key,
|
|
110
|
-
mcf_encfunc,
|
|
111
|
-
NULL,
|
|
112
|
-
CHACHA_KEY_SIZE,
|
|
113
|
-
POLY1305_BLOCK_SIZE,
|
|
114
|
-
0
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
MDB_crypto_funcs *MDB_crypto()
|
|
118
|
-
{
|
|
119
|
-
cipher = (EVP_CIPHER *)EVP_chacha20_poly1305();
|
|
120
|
-
return (MDB_crypto_funcs *)&mcf_table;
|
|
121
|
-
}
|
|
1
|
+
/* crypto.c - LMDB encryption helper module */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2020-2021 Howard Chu, Symas Corp.
|
|
4
|
+
* All rights reserved.
|
|
5
|
+
*
|
|
6
|
+
* Redistribution and use in source and binary forms, with or without
|
|
7
|
+
* modification, are permitted only as authorized by the Symas
|
|
8
|
+
* Dual-Use License.
|
|
9
|
+
*
|
|
10
|
+
* A copy of this license is available in the file LICENSE in the
|
|
11
|
+
* source distribution.
|
|
12
|
+
*/
|
|
13
|
+
#include <string.h>
|
|
14
|
+
|
|
15
|
+
#include <openssl/engine.h>
|
|
16
|
+
|
|
17
|
+
#include "lmdb.h"
|
|
18
|
+
|
|
19
|
+
MDB_crypto_hooks MDB_crypto;
|
|
20
|
+
|
|
21
|
+
static EVP_CIPHER *cipher;
|
|
22
|
+
|
|
23
|
+
static int mcf_str2key(const char *passwd, MDB_val *key)
|
|
24
|
+
{
|
|
25
|
+
unsigned int size;
|
|
26
|
+
EVP_MD_CTX *mdctx = EVP_MD_CTX_new();
|
|
27
|
+
EVP_DigestInit_ex(mdctx, EVP_sha256(), NULL);
|
|
28
|
+
EVP_DigestUpdate(mdctx, "Just a Constant", sizeof("Just a Constant"));
|
|
29
|
+
EVP_DigestUpdate(mdctx, passwd, strlen(passwd));
|
|
30
|
+
EVP_DigestFinal_ex(mdctx, key->mv_data, &size);
|
|
31
|
+
EVP_MD_CTX_free(mdctx);
|
|
32
|
+
return 0;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* cheats - internal OpenSSL 1.1 structures */
|
|
36
|
+
typedef struct evp_cipher_ctx_st {
|
|
37
|
+
const EVP_CIPHER *cipher;
|
|
38
|
+
ENGINE *engine; /* functional reference if 'cipher' is
|
|
39
|
+
* ENGINE-provided */
|
|
40
|
+
int encrypt; /* encrypt or decrypt */
|
|
41
|
+
int buf_len; /* number we have left */
|
|
42
|
+
unsigned char oiv[EVP_MAX_IV_LENGTH]; /* original iv */
|
|
43
|
+
unsigned char iv[EVP_MAX_IV_LENGTH]; /* working iv */
|
|
44
|
+
unsigned char buf[EVP_MAX_BLOCK_LENGTH]; /* saved partial block */
|
|
45
|
+
int num; /* used by cfb/ofb/ctr mode */
|
|
46
|
+
/* FIXME: Should this even exist? It appears unused */
|
|
47
|
+
void *app_data; /* application stuff */
|
|
48
|
+
int key_len; /* May change for variable length cipher */
|
|
49
|
+
unsigned long flags; /* Various flags */
|
|
50
|
+
void *cipher_data; /* per EVP data */
|
|
51
|
+
int final_used;
|
|
52
|
+
int block_mask;
|
|
53
|
+
unsigned char final[EVP_MAX_BLOCK_LENGTH]; /* possible final block */
|
|
54
|
+
} EVP_CIPHER_CTX;
|
|
55
|
+
|
|
56
|
+
#define CHACHA_KEY_SIZE 32
|
|
57
|
+
#define CHACHA_CTR_SIZE 16
|
|
58
|
+
#define CHACHA_BLK_SIZE 64
|
|
59
|
+
#define POLY1305_BLOCK_SIZE 16
|
|
60
|
+
|
|
61
|
+
typedef struct {
|
|
62
|
+
union {
|
|
63
|
+
double align; /* this ensures even sizeof(EVP_CHACHA_KEY)%8==0 */
|
|
64
|
+
unsigned int d[CHACHA_KEY_SIZE / 4];
|
|
65
|
+
} key;
|
|
66
|
+
unsigned int counter[CHACHA_CTR_SIZE / 4];
|
|
67
|
+
unsigned char buf[CHACHA_BLK_SIZE];
|
|
68
|
+
unsigned int partial_len;
|
|
69
|
+
} EVP_CHACHA_KEY;
|
|
70
|
+
|
|
71
|
+
typedef struct {
|
|
72
|
+
EVP_CHACHA_KEY key;
|
|
73
|
+
unsigned int nonce[12/4];
|
|
74
|
+
unsigned char tag[POLY1305_BLOCK_SIZE];
|
|
75
|
+
unsigned char tls_aad[POLY1305_BLOCK_SIZE];
|
|
76
|
+
struct { uint64_t aad, text; } len;
|
|
77
|
+
int aad, mac_inited, tag_len, nonce_len;
|
|
78
|
+
size_t tls_payload_length;
|
|
79
|
+
} EVP_CHACHA_AEAD_CTX;
|
|
80
|
+
|
|
81
|
+
static int mcf_encfunc(const MDB_val *src, MDB_val *dst, const MDB_val *key, int encdec)
|
|
82
|
+
{
|
|
83
|
+
unsigned char iv[12];
|
|
84
|
+
int ivl, outl, rc;
|
|
85
|
+
mdb_size_t *ptr;
|
|
86
|
+
EVP_CIPHER_CTX ctx = {0};
|
|
87
|
+
EVP_CHACHA_AEAD_CTX cactx;
|
|
88
|
+
|
|
89
|
+
ctx.cipher_data = &cactx;
|
|
90
|
+
ptr = key[1].mv_data;
|
|
91
|
+
ivl = ptr[0] & 0xffffffff;
|
|
92
|
+
memcpy(iv, &ivl, 4);
|
|
93
|
+
memcpy(iv+4, ptr+1, sizeof(mdb_size_t));
|
|
94
|
+
EVP_CipherInit_ex(&ctx, cipher, NULL, key[0].mv_data, iv, encdec);
|
|
95
|
+
EVP_CIPHER_CTX_set_padding(&ctx, 0);
|
|
96
|
+
if (!encdec) {
|
|
97
|
+
EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_AEAD_SET_TAG, key[2].mv_size, key[2].mv_data);
|
|
98
|
+
}
|
|
99
|
+
rc = EVP_CipherUpdate(&ctx, dst->mv_data, &outl, src->mv_data, src->mv_size);
|
|
100
|
+
if (rc)
|
|
101
|
+
rc = EVP_CipherFinal_ex(&ctx, key[2].mv_data, &outl);
|
|
102
|
+
if (rc && encdec) {
|
|
103
|
+
EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_AEAD_GET_TAG, key[2].mv_size, key[2].mv_data);
|
|
104
|
+
}
|
|
105
|
+
return rc == 0;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
static const MDB_crypto_funcs mcf_table = {
|
|
109
|
+
mcf_str2key,
|
|
110
|
+
mcf_encfunc,
|
|
111
|
+
NULL,
|
|
112
|
+
CHACHA_KEY_SIZE,
|
|
113
|
+
POLY1305_BLOCK_SIZE,
|
|
114
|
+
0
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
MDB_crypto_funcs *MDB_crypto()
|
|
118
|
+
{
|
|
119
|
+
cipher = (EVP_CIPHER *)EVP_chacha20_poly1305();
|
|
120
|
+
return (MDB_crypto_funcs *)&mcf_table;
|
|
121
|
+
}
|