libmongocrypt-helper 1.8.0.0.1001 → 1.11.0.0.1001

Sign up to get free protection for your applications and to get access to all the features.
Files changed (385) hide show
  1. checksums.yaml +4 -4
  2. data/ext/libmongocrypt/libmongocrypt/CHANGELOG.md +33 -0
  3. data/ext/libmongocrypt/libmongocrypt/CMakeLists.txt +12 -1
  4. data/ext/libmongocrypt/libmongocrypt/CODEOWNERS +1 -4
  5. data/ext/libmongocrypt/libmongocrypt/Earthfile +151 -3
  6. data/ext/libmongocrypt/libmongocrypt/README.md +36 -40
  7. data/ext/libmongocrypt/libmongocrypt/bindings/cs/CMakeLists.txt +1 -0
  8. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Driver.snk +0 -0
  9. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/AssemblyInfo.cs +2 -2
  10. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/Binary.cs +16 -2
  11. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/CryptClientFactory.cs +8 -4
  12. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/Library.cs +10 -0
  13. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/LibraryLoader.cs +81 -44
  14. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/MongoDB.Libmongocrypt.csproj +2 -1
  15. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test/MongoDB.Libmongocrypt.Test.csproj +2 -0
  16. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test32/MongoDB.Libmongocrypt.Test32.csproj +2 -0
  17. data/ext/libmongocrypt/libmongocrypt/bindings/cs/README.md +3 -0
  18. data/ext/libmongocrypt/libmongocrypt/bindings/cs/Scripts/build.cake +21 -26
  19. data/ext/libmongocrypt/libmongocrypt/bindings/cs/Scripts/build.config +3 -0
  20. data/ext/libmongocrypt/libmongocrypt/bindings/cs/Scripts/build.sh +0 -0
  21. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/benchmarks/build.gradle.kts +28 -0
  22. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/benchmarks/src/main/java/com/mongodb/crypt/benchmark/BenchmarkRunner.java +217 -0
  23. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/benchmarks/src/main/resources/keyDocument.json +24 -0
  24. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/build.gradle.kts +21 -6
  25. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/gradle/wrapper/gradle-wrapper.jar +0 -0
  26. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/gradle/wrapper/gradle-wrapper.properties +1 -1
  27. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/gradlew +154 -108
  28. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/gradlew.bat +7 -18
  29. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/settings.gradle.kts +1 -0
  30. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/CAPI.java +41 -6
  31. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/CAPIHelper.java +5 -5
  32. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/CipherCallback.java +27 -1
  33. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoCryptImpl.java +34 -19
  34. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoExplicitEncryptOptions.java +6 -4
  35. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/resources/META-INF/native-image/jni-config.json +180 -0
  36. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/resources/META-INF/native-image/reflect-config.json +134 -0
  37. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/java/com/mongodb/crypt/capi/MongoCryptTest.java +44 -2
  38. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/fle2-find-range-explicit-v2/int32/encrypted-payload.json +1 -1
  39. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/fle2-find-range-explicit-v2/int32/rangeopts.json +3 -0
  40. data/ext/libmongocrypt/libmongocrypt/bindings/node/README.md +4 -900
  41. data/ext/libmongocrypt/libmongocrypt/bindings/python/CHANGELOG.rst +60 -0
  42. data/ext/libmongocrypt/libmongocrypt/bindings/python/README.rst +41 -20
  43. data/ext/libmongocrypt/libmongocrypt/bindings/python/RELEASE.rst +6 -24
  44. data/ext/libmongocrypt/libmongocrypt/bindings/python/build-manylinux-wheel.sh +4 -13
  45. data/ext/libmongocrypt/libmongocrypt/bindings/python/hatch_build.py +36 -0
  46. data/ext/libmongocrypt/libmongocrypt/bindings/python/libmongocrypt-version.txt +1 -0
  47. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/__init__.py +2 -2
  48. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/asynchronous/auto_encrypter.py +61 -0
  49. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/asynchronous/credentials.py +156 -0
  50. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/asynchronous/explicit_encrypter.py +156 -0
  51. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/asynchronous/state_machine.py +149 -0
  52. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/auto_encrypter.py +2 -46
  53. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/binary.py +14 -17
  54. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/binding.py +107 -61
  55. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/compat.py +6 -4
  56. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/credentials.py +2 -121
  57. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/crypto.py +31 -20
  58. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/errors.py +2 -2
  59. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/explicit_encrypter.py +2 -233
  60. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/mongocrypt.py +168 -238
  61. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/options.py +265 -0
  62. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/state_machine.py +2 -141
  63. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/synchronous/auto_encrypter.py +61 -0
  64. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/synchronous/credentials.py +156 -0
  65. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/synchronous/explicit_encrypter.py +156 -0
  66. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/synchronous/state_machine.py +149 -0
  67. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/version.py +2 -2
  68. data/ext/libmongocrypt/libmongocrypt/bindings/python/pyproject.toml +118 -0
  69. data/ext/libmongocrypt/libmongocrypt/bindings/python/release.sh +97 -61
  70. data/ext/libmongocrypt/libmongocrypt/bindings/python/{test-requirements.txt → requirements-test.txt} +4 -1
  71. data/ext/libmongocrypt/libmongocrypt/bindings/python/requirements.txt +4 -0
  72. data/ext/libmongocrypt/libmongocrypt/bindings/python/sbom.json +76 -0
  73. data/ext/libmongocrypt/libmongocrypt/bindings/python/strip_header.py +6 -7
  74. data/ext/libmongocrypt/libmongocrypt/bindings/python/synchro.py +64 -0
  75. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/__init__.py +1 -0
  76. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/collection-info.json +1 -1
  77. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/command.json +1 -1
  78. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/compact/success/encrypted-payload.json +21 -21
  79. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/encrypted-command-reply.json +1 -1
  80. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/encrypted-field-config-map.json +1 -1
  81. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/fle2-find-range-explicit-v2/int32/encrypted-payload.json +1 -1
  82. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/fle2-find-range-explicit-v2/int32/rangeopts.json +3 -0
  83. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/fle2-find-rangePreview-explicit/int32/rangeopts.json +11 -0
  84. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/fle2-find-rangePreview-explicit/int32/value-to-encrypt.json +20 -0
  85. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/key-document-azure.json +1 -1
  86. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/key-document-gcp.json +1 -1
  87. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/key-document.json +1 -1
  88. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/key-filter.json +1 -1
  89. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/list-collections-filter.json +1 -1
  90. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/mongocryptd-command.json +1 -1
  91. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/mongocryptd-reply.json +1 -1
  92. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/schema-map.json +1 -1
  93. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/performance/keyDocument.json +24 -0
  94. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/performance/perf_test.py +165 -0
  95. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/test_binding.py +8 -12
  96. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/test_crypto.py +9 -11
  97. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/test_mongocrypt.py +988 -340
  98. data/ext/libmongocrypt/libmongocrypt/bindings/python/update-sbom.sh +14 -0
  99. data/ext/libmongocrypt/libmongocrypt/cmake/FetchMongoC.cmake +19 -1
  100. data/ext/libmongocrypt/libmongocrypt/cmake/ImportBSON.cmake +23 -0
  101. data/ext/libmongocrypt/libmongocrypt/cmake/IntelDFP.cmake +19 -227
  102. data/ext/libmongocrypt/libmongocrypt/cmake/Patch.cmake +54 -0
  103. data/ext/libmongocrypt/libmongocrypt/doc/img/cli-icon.png +0 -0
  104. data/ext/libmongocrypt/libmongocrypt/doc/img/reference-targets.png +0 -0
  105. data/ext/libmongocrypt/libmongocrypt/doc/releasing.md +153 -0
  106. data/ext/libmongocrypt/libmongocrypt/etc/calc_release_version.py +61 -28
  107. data/ext/libmongocrypt/libmongocrypt/etc/calc_release_version_selftest.sh +73 -0
  108. data/ext/libmongocrypt/libmongocrypt/etc/cyclonedx.sbom.json +108 -0
  109. data/ext/libmongocrypt/libmongocrypt/etc/format.sh +1 -1
  110. data/ext/libmongocrypt/libmongocrypt/etc/libbson-remove-GCC-diagnostic-pragma.patch +27 -0
  111. data/ext/libmongocrypt/libmongocrypt/etc/mongo-inteldfp-alpine-arm-fix.patch +17 -0
  112. data/ext/libmongocrypt/libmongocrypt/etc/packager.py +120 -91
  113. data/ext/libmongocrypt/libmongocrypt/etc/purls.txt +14 -0
  114. data/ext/libmongocrypt/libmongocrypt/etc/repo_config.yaml +56 -0
  115. data/ext/libmongocrypt/libmongocrypt/etc/silk-create-asset-group.sh +70 -0
  116. data/ext/libmongocrypt/libmongocrypt/etc/ssdlc_compliance_report.md +37 -0
  117. data/ext/libmongocrypt/libmongocrypt/etc/third_party_vulnerabilities.md +42 -0
  118. data/ext/libmongocrypt/libmongocrypt/integrating.md +18 -1
  119. data/ext/libmongocrypt/libmongocrypt/kms-message/CMakeLists.txt +11 -3
  120. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_gcp_request.c +1 -1
  121. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_kmip_reader_writer.c +17 -0
  122. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_kmip_reader_writer_private.h +6 -0
  123. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_kmip_request.c +211 -1
  124. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_kmip_response.c +163 -0
  125. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_kmip_tag_type_private.h +2 -1
  126. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_message/kms_kmip_request.h +17 -0
  127. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_message/kms_kmip_response.h +6 -0
  128. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_port.c +3 -2
  129. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_request.c +4 -2
  130. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_request_str.c +2 -2
  131. data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kmip_reader_writer.c +23 -2
  132. data/ext/libmongocrypt/libmongocrypt/src/crypto/libcrypto.c +13 -10
  133. data/ext/libmongocrypt/libmongocrypt/src/mc-dec128.h +1 -1
  134. data/ext/libmongocrypt/libmongocrypt/src/mc-efc-private.h +16 -2
  135. data/ext/libmongocrypt/libmongocrypt/src/mc-efc.c +94 -6
  136. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-encryption-placeholder-private.h +15 -5
  137. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-encryption-placeholder.c +114 -53
  138. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-equality-payload-private-v2.h +1 -1
  139. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-equality-payload-private.h +1 -1
  140. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-equality-payload-v2.c +2 -2
  141. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-equality-payload.c +2 -2
  142. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-range-payload-private-v2.h +21 -6
  143. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-range-payload-private.h +5 -5
  144. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-range-payload-v2.c +38 -2
  145. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-range-payload.c +1 -1
  146. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-insert-update-payload-private-v2.h +20 -7
  147. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-insert-update-payload-private.h +8 -8
  148. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-insert-update-payload-v2.c +89 -1
  149. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-iev-v2.c +3 -3
  150. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-iev.c +1 -23
  151. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-rfds-private.h +4 -3
  152. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-rfds.c +15 -12
  153. data/ext/libmongocrypt/libmongocrypt/src/mc-optional-private.h +11 -0
  154. data/ext/libmongocrypt/libmongocrypt/src/mc-range-edge-generation-private.h +16 -6
  155. data/ext/libmongocrypt/libmongocrypt/src/mc-range-edge-generation.c +64 -22
  156. data/ext/libmongocrypt/libmongocrypt/src/mc-range-encoding-private.h +23 -4
  157. data/ext/libmongocrypt/libmongocrypt/src/mc-range-encoding.c +359 -65
  158. data/ext/libmongocrypt/libmongocrypt/src/mc-range-mincover-generator.template.h +26 -14
  159. data/ext/libmongocrypt/libmongocrypt/src/mc-range-mincover-private.h +17 -6
  160. data/ext/libmongocrypt/libmongocrypt/src/mc-range-mincover.c +31 -13
  161. data/ext/libmongocrypt/libmongocrypt/src/mc-rangeopts-private.h +16 -3
  162. data/ext/libmongocrypt/libmongocrypt/src/mc-rangeopts.c +259 -63
  163. data/ext/libmongocrypt/libmongocrypt/src/mc-tokens-private.h +40 -24
  164. data/ext/libmongocrypt/libmongocrypt/src/mc-tokens.c +57 -13
  165. data/ext/libmongocrypt/libmongocrypt/src/mlib/int128.h +17 -0
  166. data/ext/libmongocrypt/libmongocrypt/src/mlib/int128.test.cpp +5 -0
  167. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-binary-private.h +0 -5
  168. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-buffer.c +5 -7
  169. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-cache-key.c +1 -0
  170. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-cache-oauth-private.h +16 -18
  171. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-cache-oauth.c +105 -76
  172. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-crypto.c +9 -3
  173. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-datakey.c +170 -89
  174. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-decrypt.c +5 -5
  175. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-encrypt.c +505 -124
  176. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-private.h +31 -6
  177. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx.c +81 -13
  178. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-dll-private.h +7 -0
  179. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-kek-private.h +5 -1
  180. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-kek.c +161 -103
  181. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-key-broker-private.h +2 -7
  182. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-key-broker.c +191 -69
  183. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-key.c +1 -1
  184. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-kms-ctx-private.h +50 -15
  185. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-kms-ctx.c +365 -69
  186. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-marking-private.h +2 -1
  187. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-marking.c +200 -107
  188. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-opts-private.h +50 -5
  189. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-opts.c +591 -15
  190. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-private.h +6 -13
  191. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-util.c +3 -2
  192. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt.c +47 -234
  193. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt.h +75 -24
  194. data/ext/libmongocrypt/libmongocrypt/src/os_posix/os_dll.c +18 -2
  195. data/ext/libmongocrypt/libmongocrypt/src/os_win/os_dll.c +4 -0
  196. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/bypassQueryAnalysis/payload.json +53 -0
  197. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/jsonSchema/cmd-to-mongocryptd.json +23 -0
  198. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/jsonSchema/cmd.json +20 -0
  199. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/simple/cmd-to-mongocryptd.json +50 -0
  200. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/simple/cmd.json +20 -0
  201. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/simple/collinfo.json +44 -0
  202. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/simple/encrypted-field-map.json +24 -0
  203. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/simple/encrypted-payload-pattern.json +53 -0
  204. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/simple/mongocryptd-reply.json +62 -0
  205. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/unencrypted/cmd-to-mongocryptd.json +30 -0
  206. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/unencrypted/cmd.json +17 -0
  207. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/unencrypted/mongocryptd-reply.json +39 -0
  208. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/unencrypted/payload.json +21 -0
  209. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/missing-key-id/collinfo.json +20 -0
  210. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/no-fields/collinfo.json +9 -0
  211. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/no-fields/encrypted-payload.json +4 -0
  212. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/success/cmd.json +1 -0
  213. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/success/collinfo.json +63 -0
  214. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/success/encrypted-field-config-map.json +61 -0
  215. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/success/encrypted-payload-range-v2.json +37 -0
  216. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/success/encrypted-payload.json +29 -0
  217. data/ext/libmongocrypt/libmongocrypt/test/data/compact/anchor-pad/cmd.json +1 -0
  218. data/ext/libmongocrypt/libmongocrypt/test/data/compact/anchor-pad/collinfo.json +64 -0
  219. data/ext/libmongocrypt/libmongocrypt/test/data/compact/anchor-pad/encrypted-payload-range-v2.json +105 -0
  220. data/ext/libmongocrypt/libmongocrypt/test/data/compact/anchor-pad/encrypted-payload.json +30 -0
  221. data/ext/libmongocrypt/libmongocrypt/test/data/compact/no-range/cmd.json +1 -0
  222. data/ext/libmongocrypt/libmongocrypt/test/data/compact/no-range/collinfo.json +49 -0
  223. data/ext/libmongocrypt/libmongocrypt/test/data/compact/no-range/encrypted-field-config-map.json +47 -0
  224. data/ext/libmongocrypt/libmongocrypt/test/data/compact/no-range/encrypted-payload.json +23 -0
  225. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/collinfo.json +15 -0
  226. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/encrypted-field-config-map.json +10 -0
  227. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/encrypted-payload-range-v2.json +104 -0
  228. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/encrypted-payload.json +6 -0
  229. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explain/with-csfle/collinfo.json +4 -4
  230. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explain/with-csfle/encrypted-payload.json +3 -3
  231. data/ext/libmongocrypt/libmongocrypt/test/data/kms-azure/decrypt-response.txt +16 -0
  232. data/ext/libmongocrypt/libmongocrypt/test/data/kms-azure/encrypt-response.txt +16 -0
  233. data/ext/libmongocrypt/libmongocrypt/test/data/kms-azure/oauth-response.txt +19 -0
  234. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/find/cmd.json +9 -0
  235. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/find/encrypted-field-map.json +19 -0
  236. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/find/encrypted-payload.json +62 -0
  237. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/find/mongocryptd-reply.json +69 -0
  238. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/insert/cmd.json +11 -0
  239. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/insert/encrypted-field-map.json +19 -0
  240. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/insert/encrypted-payload.json +40 -0
  241. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/insert/mongocryptd-reply.json +47 -0
  242. data/ext/libmongocrypt/libmongocrypt/test/data/range-edge-generation/edges_decimal128.cstruct +1 -1
  243. data/ext/libmongocrypt/libmongocrypt/test/data/range-edge-generation/edges_double.cstruct +8637 -7958
  244. data/ext/libmongocrypt/libmongocrypt/test/data/range-edge-generation/edges_int32.cstruct +5522 -1382
  245. data/ext/libmongocrypt/libmongocrypt/test/data/range-edge-generation/edges_int64.cstruct +5042 -1262
  246. data/ext/libmongocrypt/libmongocrypt/test/data/range-min-cover/mincover_decimal128.cstruct +1 -1
  247. data/ext/libmongocrypt/libmongocrypt/test/data/range-min-cover/mincover_decimal128_precision.cstruct +1 -1
  248. data/ext/libmongocrypt/libmongocrypt/test/data/range-min-cover/mincover_double.cstruct +1 -1
  249. data/ext/libmongocrypt/libmongocrypt/test/data/range-min-cover/mincover_double_precision.cstruct +2 -2
  250. data/ext/libmongocrypt/libmongocrypt/test/data/range-min-cover/mincover_int32.cstruct +1 -1
  251. data/ext/libmongocrypt/libmongocrypt/test/data/range-min-cover/mincover_int64.cstruct +1 -1
  252. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-find-int32/cmd.json +8 -0
  253. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-find-int32/encrypted-field-map.json +19 -0
  254. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-find-int32/encrypted-payload.json +53 -0
  255. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-find-int32/mongocryptd-reply.json +58 -0
  256. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-insert-int32/cmd.json +11 -0
  257. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-insert-int32/encrypted-field-map.json +19 -0
  258. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-insert-int32/encrypted-payload.json +40 -0
  259. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-insert-int32/mongocryptd-reply.json +45 -0
  260. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-find-int32/expected.json +26 -0
  261. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-find-int32/to-encrypt.json +20 -0
  262. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-find-int32-defaults/expected.json +26 -0
  263. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-find-int32-defaults/to-encrypt.json +20 -0
  264. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-insert-double/expected.json +8 -0
  265. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-insert-int32/expected.json +8 -0
  266. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-insert-int32-defaults/expected.json +8 -0
  267. data/ext/libmongocrypt/libmongocrypt/test/data/tokens/README.md +7 -4
  268. data/ext/libmongocrypt/libmongocrypt/test/data/tokens/mc.json +9 -5
  269. data/ext/libmongocrypt/libmongocrypt/test/data/tokens/server.json +9 -5
  270. data/ext/libmongocrypt/libmongocrypt/test/example-state-machine.c +1 -0
  271. data/ext/libmongocrypt/libmongocrypt/test/test-gcp-auth.c +8 -8
  272. data/ext/libmongocrypt/libmongocrypt/test/test-mc-efc.c +6 -4
  273. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-find-range-payload-v2.c +43 -3
  274. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-payload-iup-v2.c +76 -0
  275. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-rfds.c +5 -5
  276. data/ext/libmongocrypt/libmongocrypt/test/test-mc-range-edge-generation.c +89 -14
  277. data/ext/libmongocrypt/libmongocrypt/test/test-mc-range-encoding.c +342 -76
  278. data/ext/libmongocrypt/libmongocrypt/test/test-mc-range-mincover.c +94 -12
  279. data/ext/libmongocrypt/libmongocrypt/test/test-mc-rangeopts.c +205 -7
  280. data/ext/libmongocrypt/libmongocrypt/test/test-mc-tokens.c +49 -23
  281. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-assert-match-bson.c +16 -19
  282. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-assert-match-bson.h +22 -1
  283. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-cache-oauth.c +94 -11
  284. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-cleanup.c +374 -0
  285. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-compact.c +121 -42
  286. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-crypto-hooks.c +134 -4
  287. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-crypto-std-hooks.c +40 -0
  288. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-crypto-std-hooks.h +16 -0
  289. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-csfle-lib.c +11 -11
  290. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-decrypt.c +8 -5
  291. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-encrypt.c +922 -92
  292. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-rewrap-many-datakey.c +2 -2
  293. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-setopt.c +114 -12
  294. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-datakey.c +14 -9
  295. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-kms-ctx.c +424 -3
  296. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-log.c +1 -1
  297. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-marking.c +447 -28
  298. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-opts.c +42 -0
  299. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-traverse-util.c +30 -26
  300. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-util.c +7 -0
  301. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-util.h +3 -0
  302. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt.c +66 -14
  303. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt.h +11 -0
  304. data/ext/libmongocrypt/libmongocrypt/test/test-named-kms-providers.c +2381 -0
  305. data/ext/libmongocrypt/libmongocrypt/test/util/HELP.autogen +3 -1
  306. data/ext/libmongocrypt/libmongocrypt/test/util/README.md +1 -0
  307. data/ext/libmongocrypt/libmongocrypt/test/util/csfle.c +4 -0
  308. data/ext/libmongocrypt/libmongocrypt/test/util/make_includes.py +1 -1
  309. data/ext/libmongocrypt/libmongocrypt/test/util/util.c +38 -3
  310. data/lib/libmongocrypt_helper/version.rb +2 -2
  311. metadata +112 -106
  312. checksums.yaml.gz.sig +0 -0
  313. data/ext/libmongocrypt/libmongocrypt/VERSION_CURRENT +0 -1
  314. data/ext/libmongocrypt/libmongocrypt/bindings/cs/cs.sln +0 -79
  315. data/ext/libmongocrypt/libmongocrypt/bindings/node/CHANGELOG.md +0 -105
  316. data/ext/libmongocrypt/libmongocrypt/bindings/node/LICENSE +0 -201
  317. data/ext/libmongocrypt/libmongocrypt/bindings/node/binding.gyp +0 -79
  318. data/ext/libmongocrypt/libmongocrypt/bindings/node/etc/README.hbs +0 -44
  319. data/ext/libmongocrypt/libmongocrypt/bindings/node/etc/build-static.sh +0 -36
  320. data/ext/libmongocrypt/libmongocrypt/bindings/node/index.d.ts +0 -641
  321. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/autoEncrypter.js +0 -420
  322. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/buffer_pool.js +0 -123
  323. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/clientEncryption.js +0 -821
  324. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/common.js +0 -98
  325. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/cryptoCallbacks.js +0 -87
  326. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/errors.js +0 -75
  327. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/index.js +0 -73
  328. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/mongocryptdManager.js +0 -66
  329. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/providers/aws.js +0 -26
  330. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/providers/azure.js +0 -178
  331. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/providers/gcp.js +0 -24
  332. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/providers/index.js +0 -54
  333. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/providers/utils.js +0 -39
  334. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/stateMachine.js +0 -492
  335. data/ext/libmongocrypt/libmongocrypt/bindings/node/package-lock.json +0 -15302
  336. data/ext/libmongocrypt/libmongocrypt/bindings/node/package.json +0 -100
  337. data/ext/libmongocrypt/libmongocrypt/bindings/node/src/mongocrypt.cc +0 -956
  338. data/ext/libmongocrypt/libmongocrypt/bindings/node/src/mongocrypt.h +0 -114
  339. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/autoEncrypter.test.js +0 -950
  340. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/buffer_pool.test.js +0 -91
  341. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/clientEncryption.test.js +0 -1093
  342. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/common.test.js +0 -94
  343. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/cryptoCallbacks.test.js +0 -240
  344. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/README.md +0 -5
  345. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/cmd.json +0 -6
  346. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/collection-info.json +0 -37
  347. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/encrypted-document-nested.json +0 -8
  348. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/encrypted-document.json +0 -11
  349. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/encryptedFields.json +0 -30
  350. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/key-document.json +0 -32
  351. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/key1-document.json +0 -30
  352. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/mongocryptd-reply.json +0 -18
  353. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/index.test.js +0 -45
  354. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/mongocryptdManager.test.js +0 -48
  355. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/providers/credentialsProvider.test.js +0 -551
  356. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/release.test.js +0 -66
  357. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/requirements.helper.js +0 -51
  358. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/stateMachine.test.js +0 -331
  359. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/tools/chai-addons.js +0 -8
  360. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/tools/mongodb_reporter.js +0 -325
  361. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/types/index.test-d.ts +0 -63
  362. data/ext/libmongocrypt/libmongocrypt/bindings/python/setup.py +0 -89
  363. data/ext/libmongocrypt/libmongocrypt/debian/build_snapshot.sh +0 -79
  364. data/ext/libmongocrypt/libmongocrypt/debian/changelog +0 -105
  365. data/ext/libmongocrypt/libmongocrypt/debian/compat +0 -1
  366. data/ext/libmongocrypt/libmongocrypt/debian/control +0 -41
  367. data/ext/libmongocrypt/libmongocrypt/debian/copyright +0 -129
  368. data/ext/libmongocrypt/libmongocrypt/debian/gbp.conf +0 -23
  369. data/ext/libmongocrypt/libmongocrypt/debian/libmongocrypt-dev.dirs +0 -2
  370. data/ext/libmongocrypt/libmongocrypt/debian/libmongocrypt-dev.install +0 -5
  371. data/ext/libmongocrypt/libmongocrypt/debian/libmongocrypt0.dirs +0 -1
  372. data/ext/libmongocrypt/libmongocrypt/debian/libmongocrypt0.install +0 -1
  373. data/ext/libmongocrypt/libmongocrypt/debian/rules +0 -46
  374. data/ext/libmongocrypt/libmongocrypt/debian/source/format +0 -1
  375. data/ext/libmongocrypt/libmongocrypt/debian/source/lintian-overrides +0 -3
  376. data/ext/libmongocrypt/libmongocrypt/debian/source/options +0 -1
  377. data/ext/libmongocrypt/libmongocrypt/debian/watch +0 -3
  378. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/mongocryptd-reply.json +0 -72
  379. data.tar.gz.sig +0 -1
  380. metadata.gz.sig +0 -0
  381. /data/ext/libmongocrypt/libmongocrypt/{bindings/node/test/data/kms-decrypt-reply.txt → test/data/kms-aws/decrypt-response.txt} +0 -0
  382. /data/ext/libmongocrypt/libmongocrypt/{bindings/node/test/data/kms-encrypt-reply.txt → test/data/kms-aws/encrypt-response.txt} +0 -0
  383. /data/ext/libmongocrypt/libmongocrypt/test/data/{gcp-auth → kms-gcp}/decrypt-response.txt +0 -0
  384. /data/ext/libmongocrypt/libmongocrypt/test/data/{gcp-auth → kms-gcp}/encrypt-response.txt +0 -0
  385. /data/ext/libmongocrypt/libmongocrypt/test/data/{gcp-auth → kms-gcp}/oauth-response.txt +0 -0
@@ -20,6 +20,7 @@
20
20
  #include <bson/bson.h>
21
21
 
22
22
  #include "mc-array-private.h"
23
+ #include "mc-optional-private.h"
23
24
  #include "mongocrypt-buffer-private.h"
24
25
  #include "mongocrypt-private.h"
25
26
  #include "mongocrypt.h"
@@ -36,8 +37,8 @@
36
37
  * } FLE2InsertUpdatePayloadV2;
37
38
  *
38
39
  * bson is a BSON document of this form:
39
- * d: <binary> // EDCDerivedFromDataTokenAndCounter
40
- * s: <binary> // ESCDerivedFromDataTokenAndCounter
40
+ * d: <binary> // EDCDerivedFromDataTokenAndContentionFactor
41
+ * s: <binary> // ESCDerivedFromDataTokenAndContentionFactor
41
42
  * p: <binary> // Encrypted Tokens
42
43
  * u: <UUID> // Index KeyId
43
44
  * t: <int32> // Encrypted type
@@ -45,13 +46,18 @@
45
46
  * e: <binary> // ServerDataEncryptionLevel1Token
46
47
  * l: <binary> // ServerDerivedFromDataToken
47
48
  * k: <int64> // Randomly sampled contention factor value
48
- * g: array<EdgeTokenSetV2> // Array of Edges
49
+ * g: array<EdgeTokenSetV2> // Array of Edges. Only included for range payloads.
50
+ * sp: optional<int64> // Sparsity. Only included for range payloads.
51
+ * pn: optional<int32> // Precision. Only included for range payloads.
52
+ * tf: optional<int32> // Trim Factor. Only included for range payloads.
53
+ * mn: optional<any> // Index Min. Only included for range payloads.
54
+ * mx: optional<any> // Index Max. Only included for range payloads.
49
55
  *
50
56
  * p is the result of:
51
57
  * Encrypt(
52
58
  * key=ECOCToken,
53
59
  * plaintext=(
54
- * ESCDerivedFromDataTokenAndCounter)
60
+ * ESCDerivedFromDataTokenAndContentionFactor)
55
61
  * )
56
62
  *
57
63
  * v is the result of:
@@ -72,14 +78,19 @@ typedef struct {
72
78
  _mongocrypt_buffer_t serverDerivedFromDataToken; // l
73
79
  int64_t contentionFactor; // k
74
80
  mc_array_t edgeTokenSetArray; // g
81
+ mc_optional_int64_t sparsity; // sp
82
+ mc_optional_int32_t precision; // pn
83
+ mc_optional_int32_t trimFactor; // tf
84
+ bson_value_t indexMin; // mn
85
+ bson_value_t indexMax; // mx
75
86
  _mongocrypt_buffer_t plaintext;
76
87
  _mongocrypt_buffer_t userKeyId;
77
88
  } mc_FLE2InsertUpdatePayloadV2_t;
78
89
 
79
90
  /**
80
91
  * EdgeTokenSetV2 is the following BSON document:
81
- * d: <binary> // EDCDerivedFromDataTokenAndCounter
82
- * s: <binary> // ESCDerivedFromDataTokenAndCounter
92
+ * d: <binary> // EDCDerivedFromDataTokenAndContentionFactor
93
+ * s: <binary> // ESCDerivedFromDataTokenAndContentionFactor
83
94
  * l: <binary> // ServerDerivedFromDataToken
84
95
  * p: <binary> // Encrypted Tokens
85
96
  *
@@ -110,7 +121,9 @@ const _mongocrypt_buffer_t *mc_FLE2InsertUpdatePayloadV2_decrypt(_mongocrypt_cry
110
121
 
111
122
  bool mc_FLE2InsertUpdatePayloadV2_serialize(const mc_FLE2InsertUpdatePayloadV2_t *payload, bson_t *out);
112
123
 
113
- bool mc_FLE2InsertUpdatePayloadV2_serializeForRange(const mc_FLE2InsertUpdatePayloadV2_t *payload, bson_t *out);
124
+ bool mc_FLE2InsertUpdatePayloadV2_serializeForRange(const mc_FLE2InsertUpdatePayloadV2_t *payload,
125
+ bson_t *out,
126
+ bool use_range_v2);
114
127
 
115
128
  void mc_FLE2InsertUpdatePayloadV2_cleanup(mc_FLE2InsertUpdatePayloadV2_t *payload);
116
129
 
@@ -36,9 +36,9 @@
36
36
  * } FLE2InsertUpdatePayload;
37
37
  *
38
38
  * bson is a BSON document of this form:
39
- * d: <binary> // EDCDerivedFromDataTokenAndCounter
40
- * s: <binary> // ESCDerivedFromDataTokenAndCounter
41
- * c: <binary> // ECCDerivedFromDataTokenAndCounter
39
+ * d: <binary> // EDCDerivedFromDataTokenAndContentionFactor
40
+ * s: <binary> // ESCDerivedFromDataTokenAndContentionFactor
41
+ * c: <binary> // ECCDerivedFromDataTokenAndContentionFactor
42
42
  * p: <binary> // Encrypted Tokens
43
43
  * u: <UUID> // Index KeyId
44
44
  * t: <int32> // Encrypted type
@@ -50,8 +50,8 @@
50
50
  * Encrypt(
51
51
  * key=ECOCToken,
52
52
  * plaintext=(
53
- * ESCDerivedFromDataTokenAndCounter ||
54
- * ECCDerivedFromDataTokenAndCounter)
53
+ * ESCDerivedFromDataTokenAndContentionFactor ||
54
+ * ECCDerivedFromDataTokenAndContentionFactor)
55
55
  * )
56
56
  *
57
57
  * v is the result of:
@@ -77,9 +77,9 @@ typedef struct {
77
77
 
78
78
  /**
79
79
  * EdgeTokenSet is the following BSON document:
80
- * d: <binary> // EDCDerivedFromDataTokenAndCounter
81
- * s: <binary> // ESCDerivedFromDataTokenAndCounter
82
- * c: <binary> // ECCDerivedFromDataTokenAndCounter
80
+ * d: <binary> // EDCDerivedFromDataTokenAndContentionFactor
81
+ * s: <binary> // ESCDerivedFromDataTokenAndContentionFactor
82
+ * c: <binary> // ECCDerivedFromDataTokenAndContentionFactor
83
83
  * p: <binary> // Encrypted Tokens
84
84
  *
85
85
  * Instances of mc_EdgeTokenSet_t are expected to be owned by
@@ -18,6 +18,7 @@
18
18
 
19
19
  #include "mc-fle2-insert-update-payload-private-v2.h"
20
20
  #include "mongocrypt-buffer-private.h"
21
+ #include "mongocrypt-util-private.h" // mc_bson_type_to_string
21
22
  #include "mongocrypt.h"
22
23
 
23
24
  void mc_FLE2InsertUpdatePayloadV2_init(mc_FLE2InsertUpdatePayloadV2_t *payload) {
@@ -53,6 +54,8 @@ void mc_FLE2InsertUpdatePayloadV2_cleanup(mc_FLE2InsertUpdatePayloadV2_t *payloa
53
54
  mc_EdgeTokenSetV2_cleanup(&entry);
54
55
  }
55
56
  _mc_array_destroy(&payload->edgeTokenSetArray);
57
+ bson_value_destroy(&payload->indexMin);
58
+ bson_value_destroy(&payload->indexMax);
56
59
  }
57
60
 
58
61
  #define IF_FIELD(Name) \
@@ -104,6 +107,7 @@ bool mc_FLE2InsertUpdatePayloadV2_parse(mc_FLE2InsertUpdatePayloadV2_t *out,
104
107
  bool has_d = false, has_s = false, has_p = false;
105
108
  bool has_u = false, has_t = false, has_v = false;
106
109
  bool has_e = false, has_l = false, has_k = false;
110
+ bool has_sp = false, has_pn = false, has_tf = false, has_mn = false, has_mx = false;
107
111
  bson_t in_bson;
108
112
 
109
113
  BSON_ASSERT_PARAM(out);
@@ -163,6 +167,57 @@ bool mc_FLE2InsertUpdatePayloadV2_parse(mc_FLE2InsertUpdatePayloadV2_t *out,
163
167
  PARSE_BINARY(v, value)
164
168
  PARSE_BINARY(e, serverEncryptionToken)
165
169
  PARSE_BINARY(l, serverDerivedFromDataToken)
170
+
171
+ IF_FIELD(sp) {
172
+ if (!BSON_ITER_HOLDS_INT64(&iter)) {
173
+ CLIENT_ERR("Field 'sp' expected to hold an int64, got: %s",
174
+ mc_bson_type_to_string(bson_iter_type(&iter)));
175
+ goto fail;
176
+ }
177
+ int64_t sparsity = bson_iter_int64(&iter);
178
+ out->sparsity = OPT_I64(sparsity);
179
+ }
180
+ END_IF_FIELD
181
+
182
+ IF_FIELD(pn) {
183
+ if (!BSON_ITER_HOLDS_INT32(&iter)) {
184
+ CLIENT_ERR("Field 'pn' expected to hold an int32, got: %s",
185
+ mc_bson_type_to_string(bson_iter_type(&iter)));
186
+ goto fail;
187
+ }
188
+ int32_t precision = bson_iter_int32(&iter);
189
+ if (precision < 0) {
190
+ CLIENT_ERR("Field 'pn' must be non-negative, got: %" PRId32, precision);
191
+ goto fail;
192
+ }
193
+ out->precision = OPT_I32(precision);
194
+ }
195
+ END_IF_FIELD
196
+
197
+ IF_FIELD(tf) {
198
+ if (!BSON_ITER_HOLDS_INT32(&iter)) {
199
+ CLIENT_ERR("Field 'tf' expected to hold an int32, got: %s",
200
+ mc_bson_type_to_string(bson_iter_type(&iter)));
201
+ goto fail;
202
+ }
203
+ int32_t trimFactor = bson_iter_int32(&iter);
204
+ if (trimFactor < 0) {
205
+ CLIENT_ERR("Field 'tf' must be non-negative, got: %" PRId32, trimFactor);
206
+ goto fail;
207
+ }
208
+ out->trimFactor = OPT_I32(trimFactor);
209
+ }
210
+ END_IF_FIELD
211
+
212
+ IF_FIELD(mn) {
213
+ bson_value_copy(bson_iter_value(&iter), &out->indexMin);
214
+ }
215
+ END_IF_FIELD
216
+
217
+ IF_FIELD(mx) {
218
+ bson_value_copy(bson_iter_value(&iter), &out->indexMax);
219
+ }
220
+ END_IF_FIELD
166
221
  }
167
222
 
168
223
  CHECK_HAS(d);
@@ -174,6 +229,7 @@ bool mc_FLE2InsertUpdatePayloadV2_parse(mc_FLE2InsertUpdatePayloadV2_t *out,
174
229
  CHECK_HAS(e);
175
230
  CHECK_HAS(l);
176
231
  CHECK_HAS(k);
232
+ // The fields `sp`, `pn`, `tf`, `mn`, and `mx` are only set for "range" payloads.
177
233
 
178
234
  if (!_mongocrypt_buffer_from_subrange(&out->userKeyId, &out->value, 0, UUID_LEN)) {
179
235
  CLIENT_ERR("failed to create userKeyId buffer");
@@ -213,7 +269,9 @@ bool mc_FLE2InsertUpdatePayloadV2_serialize(const mc_FLE2InsertUpdatePayloadV2_t
213
269
  return true;
214
270
  }
215
271
 
216
- bool mc_FLE2InsertUpdatePayloadV2_serializeForRange(const mc_FLE2InsertUpdatePayloadV2_t *payload, bson_t *out) {
272
+ bool mc_FLE2InsertUpdatePayloadV2_serializeForRange(const mc_FLE2InsertUpdatePayloadV2_t *payload,
273
+ bson_t *out,
274
+ bool use_range_v2) {
217
275
  BSON_ASSERT_PARAM(out);
218
276
  BSON_ASSERT_PARAM(payload);
219
277
 
@@ -257,6 +315,36 @@ bool mc_FLE2InsertUpdatePayloadV2_serializeForRange(const mc_FLE2InsertUpdatePay
257
315
  return false;
258
316
  }
259
317
 
318
+ if (use_range_v2) {
319
+ // Encode parameters that were used to generate the payload.
320
+ BSON_ASSERT(payload->sparsity.set);
321
+ if (!BSON_APPEND_INT64(out, "sp", payload->sparsity.value)) {
322
+ return false;
323
+ }
324
+
325
+ // Precision may be unset.
326
+ if (payload->precision.set) {
327
+ if (!BSON_APPEND_INT32(out, "pn", payload->precision.value)) {
328
+ return false;
329
+ }
330
+ }
331
+
332
+ BSON_ASSERT(payload->trimFactor.set);
333
+ if (!BSON_APPEND_INT32(out, "tf", payload->trimFactor.value)) {
334
+ return false;
335
+ }
336
+
337
+ BSON_ASSERT(payload->indexMin.value_type != BSON_TYPE_EOD);
338
+ if (!BSON_APPEND_VALUE(out, "mn", &payload->indexMin)) {
339
+ return false;
340
+ }
341
+
342
+ BSON_ASSERT(payload->indexMax.value_type != BSON_TYPE_EOD);
343
+ if (!BSON_APPEND_VALUE(out, "mx", &payload->indexMax)) {
344
+ return false;
345
+ }
346
+ }
347
+
260
348
  return true;
261
349
  }
262
350
 
@@ -180,7 +180,7 @@ bool mc_FLE2IndexedEncryptedValueV2_add_S_Key(_mongocrypt_crypto_t *crypto,
180
180
  CLIENT_ERR("Invalid ServerEncryptedValue length, got %" PRIu32 ", expected more than %d",
181
181
  DecryptedServerEncryptedValueLen,
182
182
  UUID_LEN);
183
- return false;
183
+ goto fail;
184
184
  }
185
185
  _mongocrypt_buffer_resize(&iev->DecryptedServerEncryptedValue, DecryptedServerEncryptedValueLen);
186
186
  uint32_t bytes_written = 0;
@@ -196,7 +196,7 @@ bool mc_FLE2IndexedEncryptedValueV2_add_S_Key(_mongocrypt_crypto_t *crypto,
196
196
  BSON_ASSERT(bytes_written == DecryptedServerEncryptedValueLen);
197
197
  if (!_mongocrypt_buffer_from_subrange(&iev->K_KeyId, &iev->DecryptedServerEncryptedValue, 0, UUID_LEN)) {
198
198
  CLIENT_ERR("Error creating K_KeyId subrange from DecryptedServerEncryptedValue");
199
- return false;
199
+ goto fail;
200
200
  }
201
201
  iev->K_KeyId.subtype = BSON_SUBTYPE_UUID;
202
202
 
@@ -207,7 +207,7 @@ bool mc_FLE2IndexedEncryptedValueV2_add_S_Key(_mongocrypt_crypto_t *crypto,
207
207
  iev->DecryptedServerEncryptedValue.len - UUID_LEN)) {
208
208
  CLIENT_ERR("Error creating ClientEncryptedValue subrange from "
209
209
  "DecryptedServerEncryptedValue");
210
- return false;
210
+ goto fail;
211
211
  }
212
212
 
213
213
  iev->ClientEncryptedValueDecoded = true;
@@ -100,7 +100,6 @@ bool mc_FLE2IndexedEncryptedValue_write(_mongocrypt_crypto_t *crypto,
100
100
  goto cleanup; \
101
101
  }
102
102
 
103
- const _mongocrypt_value_encryption_algorithm_t *fle2alg = _mcFLE2Algorithm();
104
103
  bool ok = false;
105
104
 
106
105
  BSON_ASSERT_PARAM(crypto);
@@ -130,27 +129,6 @@ bool mc_FLE2IndexedEncryptedValue_write(_mongocrypt_crypto_t *crypto,
130
129
  index_tokens,
131
130
  &encryption_out,
132
131
  status));
133
- uint32_t expected_plaintext_size = 0;
134
- CHECK_AND_GOTO(safe_uint32_t_sum(ClientEncryptedValue->len,
135
- (uint32_t)(sizeof(uint64_t) * 2 + sizeof(uint32_t) * 3),
136
- &expected_plaintext_size,
137
- status));
138
-
139
- uint32_t expected_cipher_size = fle2alg->get_ciphertext_len(expected_plaintext_size, status);
140
-
141
- if (expected_cipher_size == 0) {
142
- CHECK_AND_GOTO(false);
143
- }
144
-
145
- uint32_t expected_buf_size = 0;
146
- CHECK_AND_RETURN(
147
- safe_uint32_t_sum(expected_cipher_size, (uint32_t)(1 + sizeof(S_KeyId)), &expected_buf_size, status));
148
-
149
- if (buf->len < expected_buf_size) {
150
- CLIENT_ERR("mc_FLE2IndexedEncryptedValue_write buf is not large enough for iev");
151
- CHECK_AND_GOTO(false);
152
- }
153
-
154
132
  mc_writer_t writer;
155
133
  mc_writer_init_from_buffer(&writer, buf, __FUNCTION__);
156
134
 
@@ -207,7 +185,7 @@ static bool mc_fle2IndexedEncryptedValue_encrypt(_mongocrypt_crypto_t *crypto,
207
185
  uint32_t ciphertext_len = fle2alg->get_ciphertext_len(expected_buf_size, status);
208
186
 
209
187
  if (ciphertext_len == 0) {
210
- return false;
188
+ goto cleanup;
211
189
  }
212
190
 
213
191
  _mongocrypt_buffer_resize(out, ciphertext_len);
@@ -52,7 +52,7 @@ bool mc_FLE2RangeFindDriverSpec_parse(mc_FLE2RangeFindDriverSpec_t *spec,
52
52
  // `out` must be initialized by caller.
53
53
  bool mc_FLE2RangeFindDriverSpec_to_placeholders(mc_FLE2RangeFindDriverSpec_t *spec,
54
54
  const mc_RangeOpts_t *range_opts,
55
- int64_t maxContentionCounter,
55
+ int64_t maxContentionFactor,
56
56
  const _mongocrypt_buffer_t *user_key_id,
57
57
  const _mongocrypt_buffer_t *index_key_id,
58
58
  int32_t payloadId,
@@ -73,9 +73,10 @@ typedef struct {
73
73
  mc_FLE2RangeOperator_t secondOp;
74
74
  bson_iter_t indexMin;
75
75
  bson_iter_t indexMax;
76
- int64_t maxContentionCounter;
76
+ int64_t maxContentionFactor;
77
77
  int64_t sparsity;
78
- mc_optional_uint32_t precision;
78
+ mc_optional_int32_t precision;
79
+ mc_optional_int32_t trimFactor;
79
80
  } mc_makeRangeFindPlaceholder_args_t;
80
81
 
81
82
  // mc_makeRangeFindPlaceholder creates a placeholder to be consumed by
@@ -70,7 +70,7 @@ static bool parse_and(const bson_t *in, bson_iter_t *out, mongocrypt_status_t *s
70
70
  BSON_ASSERT_PARAM(out);
71
71
  BSON_ASSERT(status || true);
72
72
 
73
- bson_iter_t and;
73
+ bson_iter_t and = {0};
74
74
  if (!bson_iter_init(&and, in) || !bson_iter_next(&and) || 0 != strcmp(bson_iter_key(&and), "$and")) {
75
75
  ERR_WITH_BSON(in, "%s", "error unable to find '$and'");
76
76
  return false;
@@ -105,7 +105,7 @@ parse_aggregate_expression(const bson_t *orig, bson_iter_t *in, operator_value_t
105
105
  BSON_ASSERT_PARAM(out);
106
106
  BSON_ASSERT(status || true);
107
107
 
108
- bson_iter_t array, value;
108
+ bson_iter_t array = {0}, value;
109
109
  const char *op_type_str = bson_iter_key(in);
110
110
  bool ok = false;
111
111
  const char *field;
@@ -162,7 +162,7 @@ parse_match_expression(const bson_t *orig, bson_iter_t *in, operator_value_t *ou
162
162
  BSON_ASSERT_PARAM(out);
163
163
  BSON_ASSERT(status || true);
164
164
 
165
- bson_iter_t document, value;
165
+ bson_iter_t document = {0}, value;
166
166
  const char *op_type_str;
167
167
  bool ok = false;
168
168
  const char *field = bson_iter_key(in);
@@ -217,7 +217,7 @@ bool mc_FLE2RangeFindDriverSpec_parse(mc_FLE2RangeFindDriverSpec_t *spec,
217
217
  // {$and: [{$gt: ["$age", 5]}, {$lt:["$age", 50]}]}
218
218
  // Or `in` may be a Match Expression with this form:
219
219
  // {$and: [{age: {$gt: 5}}, {age: {$lt: 50}} ]}
220
- bson_iter_t and, array;
220
+ bson_iter_t and = {0}, array = {0};
221
221
  bool ok = false;
222
222
 
223
223
  if (!parse_and(in, &and, status)) {
@@ -264,7 +264,7 @@ bool mc_FLE2RangeFindDriverSpec_parse(mc_FLE2RangeFindDriverSpec_t *spec,
264
264
  }
265
265
  }
266
266
 
267
- operator_value_t op;
267
+ operator_value_t op = {0};
268
268
  switch (arg_type) {
269
269
  case AGGREGATE_EXPRESSION:
270
270
  if (!parse_aggregate_expression(in, &doc, &op, status)) {
@@ -364,8 +364,10 @@ bool mc_makeRangeFindPlaceholder(mc_makeRangeFindPlaceholder_args_t *args,
364
364
  TRY(bson_append_iter(edgesInfo, "indexMin", -1, &args->indexMin));
365
365
  TRY(bson_append_iter(edgesInfo, "indexMax", -1, &args->indexMax));
366
366
  if (args->precision.set) {
367
- BSON_ASSERT(args->precision.value <= INT32_MAX);
368
- TRY(BSON_APPEND_INT32(edgesInfo, "precision", (int32_t)args->precision.value));
367
+ TRY(BSON_APPEND_INT32(edgesInfo, "precision", args->precision.value));
368
+ }
369
+ if (args->trimFactor.set) {
370
+ TRY(BSON_APPEND_INT32(edgesInfo, "trimFactor", args->trimFactor.value));
369
371
  }
370
372
  TRY(BSON_APPEND_DOCUMENT(v, "edgesInfo", edgesInfo));
371
373
  }
@@ -383,7 +385,7 @@ bool mc_makeRangeFindPlaceholder(mc_makeRangeFindPlaceholder_args_t *args,
383
385
  TRY(_mongocrypt_buffer_append(args->index_key_id, p, "ki", 2));
384
386
  TRY(_mongocrypt_buffer_append(args->user_key_id, p, "ku", 2));
385
387
  TRY(BSON_APPEND_DOCUMENT(p, "v", v));
386
- TRY(BSON_APPEND_INT64(p, "cm", args->maxContentionCounter));
388
+ TRY(BSON_APPEND_INT64(p, "cm", args->maxContentionFactor));
387
389
  TRY(BSON_APPEND_INT64(p, "s", args->sparsity));
388
390
  #undef TRY
389
391
 
@@ -403,7 +405,7 @@ fail:
403
405
 
404
406
  bool mc_FLE2RangeFindDriverSpec_to_placeholders(mc_FLE2RangeFindDriverSpec_t *spec,
405
407
  const mc_RangeOpts_t *range_opts,
406
- int64_t maxContentionCounter,
408
+ int64_t maxContentionFactor,
407
409
  const _mongocrypt_buffer_t *user_key_id,
408
410
  const _mongocrypt_buffer_t *index_key_id,
409
411
  int32_t payloadId,
@@ -469,8 +471,9 @@ bool mc_FLE2RangeFindDriverSpec_to_placeholders(mc_FLE2RangeFindDriverSpec_t *sp
469
471
  .indexMin = indexMin,
470
472
  .indexMax = indexMax,
471
473
  .precision = range_opts->precision,
472
- .maxContentionCounter = maxContentionCounter,
473
- .sparsity = range_opts->sparsity};
474
+ .maxContentionFactor = maxContentionFactor,
475
+ .sparsity = range_opts->sparsity,
476
+ .trimFactor = range_opts->trimFactor};
474
477
 
475
478
  // First operator is the non-stub.
476
479
  if (!mc_makeRangeFindPlaceholder(&args, &p1, status)) {
@@ -485,7 +488,7 @@ bool mc_FLE2RangeFindDriverSpec_to_placeholders(mc_FLE2RangeFindDriverSpec_t *sp
485
488
  .payloadId = payloadId,
486
489
  .firstOp = spec->firstOp,
487
490
  .secondOp = spec->secondOp,
488
- .maxContentionCounter = maxContentionCounter,
491
+ .maxContentionFactor = maxContentionFactor,
489
492
  .sparsity = range_opts->sparsity};
490
493
 
491
494
  // First operator is the non-stub.
@@ -23,6 +23,17 @@
23
23
  #include "./mc-dec128.h"
24
24
  #include "./mlib/int128.h"
25
25
 
26
+ typedef struct {
27
+ bool set;
28
+ bool value;
29
+ } mc_optional_bool_t;
30
+
31
+ #define OPT_BOOL(val) \
32
+ (mc_optional_bool_t) { .set = true, .value = val }
33
+
34
+ #define OPT_BOOL_C(val) \
35
+ { .set = true, .value = val }
36
+
26
37
  typedef struct {
27
38
  bool set;
28
39
  int32_t value;
@@ -37,49 +37,59 @@ size_t mc_edges_len(mc_edges_t *edges);
37
37
  // mc_edges_destroys frees `edges`.
38
38
  void mc_edges_destroy(mc_edges_t *edges);
39
39
 
40
+ // mc_edges_is_leaf returns whether the given edge is the leaf node of the edge set.
41
+ bool mc_edges_is_leaf(const mc_edges_t *edges, const char *edge);
42
+
43
+ // Return the trimFactor that was used to generate these edges.
44
+ int32_t mc_edges_get_used_trimFactor(const mc_edges_t *edges);
45
+
40
46
  typedef struct {
41
47
  int32_t value;
42
48
  mc_optional_int32_t min;
43
49
  mc_optional_int32_t max;
44
50
  size_t sparsity;
51
+ mc_optional_int32_t trimFactor;
45
52
  } mc_getEdgesInt32_args_t;
46
53
 
47
54
  // mc_getEdgesInt32 implements the Edge Generation algorithm described in
48
55
  // SERVER-67751 for int32_t.
49
- mc_edges_t *mc_getEdgesInt32(mc_getEdgesInt32_args_t args, mongocrypt_status_t *status);
56
+ mc_edges_t *mc_getEdgesInt32(mc_getEdgesInt32_args_t args, mongocrypt_status_t *status, bool use_range_v2);
50
57
 
51
58
  typedef struct {
52
59
  int64_t value;
53
60
  mc_optional_int64_t min;
54
61
  mc_optional_int64_t max;
55
62
  size_t sparsity;
63
+ mc_optional_int32_t trimFactor;
56
64
  } mc_getEdgesInt64_args_t;
57
65
 
58
66
  // mc_getEdgesInt64 implements the Edge Generation algorithm described in
59
67
  // SERVER-67751 for int64_t.
60
- mc_edges_t *mc_getEdgesInt64(mc_getEdgesInt64_args_t args, mongocrypt_status_t *status);
68
+ mc_edges_t *mc_getEdgesInt64(mc_getEdgesInt64_args_t args, mongocrypt_status_t *status, bool use_range_v2);
61
69
 
62
70
  typedef struct {
63
71
  double value;
64
72
  size_t sparsity;
65
73
  mc_optional_double_t min;
66
74
  mc_optional_double_t max;
67
- mc_optional_uint32_t precision;
75
+ mc_optional_int32_t precision;
76
+ mc_optional_int32_t trimFactor;
68
77
  } mc_getEdgesDouble_args_t;
69
78
 
70
79
  // mc_getEdgesDouble implements the Edge Generation algorithm described in
71
80
  // SERVER-67751 for double.
72
- mc_edges_t *mc_getEdgesDouble(mc_getEdgesDouble_args_t args, mongocrypt_status_t *status);
81
+ mc_edges_t *mc_getEdgesDouble(mc_getEdgesDouble_args_t args, mongocrypt_status_t *status, bool use_range_v2);
73
82
 
74
83
  #if MONGOCRYPT_HAVE_DECIMAL128_SUPPORT
75
84
  typedef struct {
76
85
  mc_dec128 value;
77
86
  size_t sparsity;
78
87
  mc_optional_dec128_t min, max;
79
- mc_optional_uint32_t precision;
88
+ mc_optional_int32_t precision;
89
+ mc_optional_int32_t trimFactor;
80
90
  } mc_getEdgesDecimal128_args_t;
81
91
 
82
- mc_edges_t *mc_getEdgesDecimal128(mc_getEdgesDecimal128_args_t args, mongocrypt_status_t *status);
92
+ mc_edges_t *mc_getEdgesDecimal128(mc_getEdgesDecimal128_args_t args, mongocrypt_status_t *status, bool use_range_v2);
83
93
  #endif // MONGOCRYPT_HAVE_DECIMAL128_SUPPORT
84
94
 
85
95
  BSON_STATIC_ASSERT2(ull_is_u64, sizeof(uint64_t) == sizeof(unsigned long long));