summaryrefslogtreecommitdiff
path: root/libs/libmdbx/src/test/keygen.cc
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2020-06-14 13:55:06 +0300
committerGeorge Hazan <ghazan@miranda.im>2020-06-14 13:55:06 +0300
commit52e4ddcd83b3b64bcf97fdfcfa1120c87b7b3eb4 (patch)
tree991ccd18cf211ae6e956d9d06002e351cd7a174d /libs/libmdbx/src/test/keygen.cc
parent8862cf78b01bb4b9ae0da13b8e6acbf94f7c1cbe (diff)
fixes #2450 (Update libmdbx to 0.8.1)
Diffstat (limited to 'libs/libmdbx/src/test/keygen.cc')
-rw-r--r--libs/libmdbx/src/test/keygen.cc32
1 files changed, 26 insertions, 6 deletions
diff --git a/libs/libmdbx/src/test/keygen.cc b/libs/libmdbx/src/test/keygen.cc
index 374537dd6e..05070afe02 100644
--- a/libs/libmdbx/src/test/keygen.cc
+++ b/libs/libmdbx/src/test/keygen.cc
@@ -78,9 +78,11 @@ void __hot maker::pair(serial_t serial, const buffer &key, buffer &value,
assert(mapping.mesh <= mapping.width);
assert(mapping.rotate <= mapping.width);
assert(mapping.offset <= mask(mapping.width));
- assert(!(key_essentials.flags &
- ~(MDBX_INTEGERKEY | MDBX_REVERSEKEY | MDBX_DUPSORT)));
- assert(!(value_essentials.flags & ~(MDBX_INTEGERDUP | MDBX_REVERSEDUP)));
+ assert(
+ !(key_essentials.flags & ~(essentials::prng_fill_flag | MDBX_INTEGERKEY |
+ MDBX_REVERSEKEY | MDBX_DUPSORT)));
+ assert(!(value_essentials.flags &
+ ~(essentials::prng_fill_flag | MDBX_INTEGERDUP | MDBX_REVERSEDUP)));
log_trace("keygen-pair: serial %" PRIu64 ", data-age %" PRIu64, serial,
value_age);
@@ -213,6 +215,11 @@ void maker::setup(const config::actor_params_pod &actor, unsigned actor_id,
(uint32_t)actor.datalen_max,
(uint32_t)mdbx_limits_valsize_max(actor.pagesize, key_essentials.flags));
+ if (!actor.keygen.zero_fill) {
+ key_essentials.flags |= essentials::prng_fill_flag;
+ value_essentials.flags |= essentials::prng_fill_flag;
+ }
+
(void)thread_number;
mapping = actor.keygen;
salt = (actor.keygen.seed + actor_id) * UINT64_C(14653293970879851569);
@@ -298,6 +305,10 @@ void __hot maker::mk_begin(const serial_t serial, const essentials &params,
void __hot maker::mk_continue(const serial_t serial, const essentials &params,
result &out) {
+ static_assert((essentials::prng_fill_flag &
+ (MDBX_DUPSORT | MDBX_DUPFIXED | MDBX_INTEGERKEY |
+ MDBX_INTEGERDUP | MDBX_REVERSEKEY | MDBX_REVERSEDUP)) == 0,
+ "WTF?");
out.value.iov_base = out.bytes;
if (params.flags & (MDBX_INTEGERKEY | MDBX_INTEGERDUP)) {
assert(params.maxlen == params.minlen);
@@ -308,7 +319,11 @@ void __hot maker::mk_continue(const serial_t serial, const essentials &params,
out.u32 = (uint32_t)serial;
} else if (params.flags & (MDBX_REVERSEKEY | MDBX_REVERSEDUP)) {
if (out.value.iov_len > 8) {
- memset(out.bytes, '\0', out.value.iov_len - 8);
+ if (params.flags & essentials::prng_fill_flag) {
+ uint64_t state = serial ^ UINT64_C(0x41803711c9b75f19);
+ prng_fill(state, out.bytes, out.value.iov_len - 8);
+ } else
+ memset(out.bytes, '\0', out.value.iov_len - 8);
unaligned::store(out.bytes + out.value.iov_len - 8, htobe64(serial));
} else {
out.u64 = htobe64(serial);
@@ -317,8 +332,13 @@ void __hot maker::mk_continue(const serial_t serial, const essentials &params,
}
} else {
out.u64 = htole64(serial);
- if (out.value.iov_len > 8)
- memset(out.bytes + 8, '\0', out.value.iov_len - 8);
+ if (out.value.iov_len > 8) {
+ if (params.flags & essentials::prng_fill_flag) {
+ uint64_t state = serial ^ UINT64_C(0x923ab47b7ee6f6e4);
+ prng_fill(state, out.bytes + 8, out.value.iov_len - 8);
+ } else
+ memset(out.bytes + 8, '\0', out.value.iov_len - 8);
+ }
}
assert(out.value.iov_len >= params.minlen);