@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.
Files changed (124) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +72 -28
  3. package/SECURITY.md +12 -12
  4. package/bin/download-prebuilds.js +15 -0
  5. package/binding.gyp +115 -111
  6. package/build/Release/lmdb.node +0 -0
  7. package/caching.js +212 -156
  8. package/dependencies/lmdb/libraries/liblmdb/COPYRIGHT +20 -20
  9. package/dependencies/lmdb/libraries/liblmdb/Doxyfile +1631 -1631
  10. package/dependencies/lmdb/libraries/liblmdb/LICENSE +47 -47
  11. package/dependencies/lmdb/libraries/liblmdb/Makefile +136 -136
  12. package/dependencies/lmdb/libraries/liblmdb/chacha8.c +183 -183
  13. package/dependencies/lmdb/libraries/liblmdb/chacha8.h +14 -14
  14. package/dependencies/lmdb/libraries/liblmdb/crypto.c +121 -121
  15. package/dependencies/lmdb/libraries/liblmdb/intro.doc +192 -192
  16. package/dependencies/lmdb/libraries/liblmdb/lmdb.h +28 -3
  17. package/dependencies/lmdb/libraries/liblmdb/mdb.c +157 -31
  18. package/dependencies/lmdb/libraries/liblmdb/mdb_copy.1 +74 -74
  19. package/dependencies/lmdb/libraries/liblmdb/mdb_copy.c +106 -106
  20. package/dependencies/lmdb/libraries/liblmdb/mdb_drop.1 +53 -53
  21. package/dependencies/lmdb/libraries/liblmdb/mdb_drop.c +154 -154
  22. package/dependencies/lmdb/libraries/liblmdb/mdb_dump.1 +94 -94
  23. package/dependencies/lmdb/libraries/liblmdb/mdb_dump.c +333 -333
  24. package/dependencies/lmdb/libraries/liblmdb/mdb_load.1 +97 -97
  25. package/dependencies/lmdb/libraries/liblmdb/mdb_load.c +530 -530
  26. package/dependencies/lmdb/libraries/liblmdb/mdb_stat.1 +83 -83
  27. package/dependencies/lmdb/libraries/liblmdb/mdb_stat.c +276 -276
  28. package/dependencies/lmdb/libraries/liblmdb/midl-sparse.c +452 -0
  29. package/dependencies/lmdb/libraries/liblmdb/midl.c +452 -452
  30. package/dependencies/lmdb/libraries/liblmdb/midl.h +208 -208
  31. package/dependencies/lmdb/libraries/liblmdb/module.c +101 -101
  32. package/dependencies/lmdb/libraries/liblmdb/module.h +16 -16
  33. package/dependencies/lmdb/libraries/liblmdb/mtest.c +178 -178
  34. package/dependencies/lmdb/libraries/liblmdb/mtest2.c +124 -124
  35. package/dependencies/lmdb/libraries/liblmdb/mtest3.c +133 -133
  36. package/dependencies/lmdb/libraries/liblmdb/mtest4.c +168 -168
  37. package/dependencies/lmdb/libraries/liblmdb/mtest5.c +135 -135
  38. package/dependencies/lmdb/libraries/liblmdb/mtest6.c +141 -141
  39. package/dependencies/lmdb/libraries/liblmdb/mtest_enc.c +190 -190
  40. package/dependencies/lmdb/libraries/liblmdb/mtest_enc2.c +189 -189
  41. package/dependencies/lmdb/libraries/liblmdb/mtest_remap.c +177 -177
  42. package/dependencies/lmdb/libraries/liblmdb/sample-bdb.txt +73 -73
  43. package/dependencies/lmdb/libraries/liblmdb/sample-mdb.txt +62 -62
  44. package/dependencies/lmdb/libraries/liblmdb/tooltag +27 -27
  45. package/dependencies/lmdb-data-v1/libraries/liblmdb/CHANGES +266 -0
  46. package/dependencies/lmdb-data-v1/libraries/liblmdb/COPYRIGHT +20 -20
  47. package/dependencies/lmdb-data-v1/libraries/liblmdb/Doxyfile +1631 -1631
  48. package/dependencies/lmdb-data-v1/libraries/liblmdb/LICENSE +47 -47
  49. package/dependencies/lmdb-data-v1/libraries/liblmdb/intro.doc +192 -192
  50. package/dependencies/lmdb-data-v1/libraries/liblmdb/lmdb.h +1608 -1653
  51. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb.c +10320 -11359
  52. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_copy.1 +55 -61
  53. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_copy.c +82 -84
  54. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_dump.1 +75 -81
  55. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_dump.c +319 -319
  56. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_load.1 +84 -84
  57. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_load.c +496 -492
  58. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_stat.1 +64 -70
  59. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_stat.c +263 -264
  60. package/dependencies/lmdb-data-v1/libraries/liblmdb/midl.c +359 -421
  61. package/dependencies/lmdb-data-v1/libraries/liblmdb/midl.h +186 -200
  62. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest.c +177 -177
  63. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest2.c +124 -124
  64. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest3.c +133 -133
  65. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest4.c +168 -168
  66. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest5.c +135 -135
  67. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest6.c +141 -141
  68. package/dependencies/lmdb-data-v1/libraries/liblmdb/sample-bdb.txt +73 -73
  69. package/dependencies/lmdb-data-v1/libraries/liblmdb/sample-mdb.txt +62 -62
  70. package/dependencies/lmdb-data-v1/libraries/liblmdb/tooltag +22 -27
  71. package/dependencies/lz4/LICENSE +11 -11
  72. package/dependencies/lz4/lib/LICENSE +24 -24
  73. package/dependencies/lz4/lib/Makefile +225 -0
  74. package/dependencies/lz4/lib/README.md +169 -137
  75. package/dependencies/lz4/lib/dll/example/Makefile +63 -0
  76. package/dependencies/lz4/lib/dll/example/README.md +69 -69
  77. package/dependencies/lz4/lib/dll/liblz4.def +62 -62
  78. package/dependencies/lz4/lib/liblz4-dll.rc.in +35 -35
  79. package/dependencies/lz4/lib/liblz4.pc.in +14 -14
  80. package/dependencies/lz4/lib/lz4.c +2722 -2495
  81. package/dependencies/lz4/lib/lz4.h +842 -774
  82. package/dependencies/lz4/lib/lz4file.c +311 -0
  83. package/dependencies/lz4/lib/lz4file.h +93 -0
  84. package/dependencies/lz4/lib/lz4frame.c +2078 -1899
  85. package/dependencies/lz4/lib/lz4frame.h +692 -623
  86. package/dependencies/lz4/lib/lz4frame_static.h +47 -47
  87. package/dependencies/lz4/lib/lz4hc.c +1631 -1615
  88. package/dependencies/lz4/lib/lz4hc.h +413 -413
  89. package/dependencies/lz4/lib/xxhash.c +1030 -1030
  90. package/dependencies/lz4/lib/xxhash.h +328 -328
  91. package/dependencies/v8/v8-fast-api-calls-v16.h +790 -790
  92. package/dependencies/v8/v8-fast-api-calls.h +784 -888
  93. package/dist/index.cjs +1050 -584
  94. package/dist/index.cjs.map +1 -1
  95. package/index.d.cts +420 -0
  96. package/index.d.ts +450 -385
  97. package/index.js +38 -37
  98. package/keys.js +116 -102
  99. package/level.js +26 -26
  100. package/native.js +8 -5
  101. package/node-index.js +21 -17
  102. package/open.js +51 -17
  103. package/package.json +63 -21
  104. package/read.js +338 -95
  105. package/src/compression.cpp +12 -9
  106. package/src/cursor.cpp +82 -31
  107. package/src/dbi.cpp +78 -40
  108. package/src/env.cpp +336 -68
  109. package/src/lmdb-js.cpp +64 -64
  110. package/src/lmdb-js.h +83 -49
  111. package/src/misc.cpp +297 -28
  112. package/src/ordered-binary.cpp +46 -46
  113. package/src/txn.cpp +210 -257
  114. package/src/v8-functions.cpp +170 -166
  115. package/src/windows.c +34 -34
  116. package/src/writer.cpp +169 -84
  117. package/util/RangeIterable.js +112 -17
  118. package/util/set-optional-deps.cjs +14 -10
  119. package/util/when.js +8 -8
  120. package/write.js +145 -121
  121. package/dependencies/lmdb-data-v1/libraries/liblmdb/Makefile +0 -118
  122. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_drop.1 +0 -40
  123. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_drop.c +0 -135
  124. 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
+ }