libmongocrypt-helper 1.13.2.0.1001 → 1.14.0.0.1001

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 (250) hide show
  1. checksums.yaml +4 -4
  2. data/ext/libmongocrypt/libmongocrypt/CHANGELOG.md +8 -0
  3. data/ext/libmongocrypt/libmongocrypt/CMakeLists.txt +5 -1
  4. data/ext/libmongocrypt/libmongocrypt/CODEOWNERS +4 -1
  5. data/ext/libmongocrypt/libmongocrypt/Earthfile +18 -17
  6. data/ext/libmongocrypt/libmongocrypt/README.md +8 -8
  7. data/ext/libmongocrypt/libmongocrypt/bindings/python/CHANGELOG.rst +7 -0
  8. data/ext/libmongocrypt/libmongocrypt/bindings/python/CONTRIBUTING.md +34 -0
  9. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/asynchronous/state_machine.py +6 -2
  10. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/binding.py +18 -2
  11. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/mongocrypt.py +9 -1
  12. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/options.py +14 -0
  13. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/synchronous/state_machine.py +6 -2
  14. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/version.py +1 -1
  15. data/ext/libmongocrypt/libmongocrypt/bindings/python/sbom.json +8 -8
  16. data/ext/libmongocrypt/libmongocrypt/bindings/python/scripts/libmongocrypt-version.txt +1 -0
  17. data/ext/libmongocrypt/libmongocrypt/bindings/python/{release.sh → scripts/release.sh} +9 -3
  18. data/ext/libmongocrypt/libmongocrypt/bindings/python/{synchro.py → scripts/synchro.py} +16 -9
  19. data/ext/libmongocrypt/libmongocrypt/bindings/python/scripts/synchro.sh +8 -0
  20. data/ext/libmongocrypt/libmongocrypt/bindings/python/scripts/update-version.sh +27 -0
  21. data/ext/libmongocrypt/libmongocrypt/bindings/python/scripts/update_binding.py +78 -0
  22. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/test_mongocrypt.py +15 -0
  23. data/ext/libmongocrypt/libmongocrypt/doc/releasing.md +25 -18
  24. data/ext/libmongocrypt/libmongocrypt/etc/calc_release_version.py +39 -13
  25. data/ext/libmongocrypt/libmongocrypt/etc/calc_release_version_selftest.sh +1 -1
  26. data/ext/libmongocrypt/libmongocrypt/etc/cyclonedx.sbom.json +2 -2
  27. data/ext/libmongocrypt/libmongocrypt/kms-message/CMakeLists.txt +1 -1
  28. data/ext/libmongocrypt/libmongocrypt/kms-message/src/hexlify.c +5 -0
  29. data/ext/libmongocrypt/libmongocrypt/kms-message/src/hexlify.h +1 -1
  30. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_azure_request.c +1 -1
  31. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_gcp_request.c +1 -1
  32. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_kmip_reader_writer.c +4 -2
  33. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_kmip_request.c +1 -2
  34. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_message_private.h +5 -1
  35. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_request.c +1 -1
  36. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_request_opt.c +1 -1
  37. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_request_str.c +2 -8
  38. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_request_str.h +9 -0
  39. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_response_parser.c +0 -1
  40. data/ext/libmongocrypt/libmongocrypt/kms-message/src/sort.c +7 -3
  41. data/ext/libmongocrypt/libmongocrypt/kms-message/src/sort.h +2 -0
  42. data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kmip_reader_writer.c +8 -1
  43. data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_assert.h +5 -4
  44. data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_azure_online.c +1 -1
  45. data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_gcp_online.c +1 -1
  46. data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_kmip_request.c +4 -0
  47. data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_kmip_response.c +3 -0
  48. data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_kmip_response_parser.c +4 -0
  49. data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_online_util.c +1 -1
  50. data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_online_util.h +1 -1
  51. data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_request.c +39 -39
  52. data/ext/libmongocrypt/libmongocrypt/src/crypto/libcrypto.c +235 -65
  53. data/ext/libmongocrypt/libmongocrypt/src/crypto/none.c +1 -1
  54. data/ext/libmongocrypt/libmongocrypt/src/csfle-markup.cpp +4 -2
  55. data/ext/libmongocrypt/libmongocrypt/src/mc-dec128.h +2 -2
  56. data/ext/libmongocrypt/libmongocrypt/src/mc-dec128.test.cpp +2 -2
  57. data/ext/libmongocrypt/libmongocrypt/src/mc-efc-private.h +1 -4
  58. data/ext/libmongocrypt/libmongocrypt/src/mc-efc.c +9 -11
  59. data/ext/libmongocrypt/libmongocrypt/src/mc-fle-blob-subtype-private.h +1 -0
  60. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-encryption-placeholder-private.h +10 -8
  61. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-encryption-placeholder.c +167 -176
  62. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-equality-payload-v2.c +6 -17
  63. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-equality-payload.c +6 -17
  64. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-range-payload-private-v2.h +1 -1
  65. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-range-payload-v2.c +25 -26
  66. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-range-payload.c +2 -1
  67. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-text-payload-private.h +122 -0
  68. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-text-payload.c +477 -0
  69. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-insert-update-payload-private-v2.h +1 -3
  70. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-insert-update-payload-v2.c +28 -43
  71. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-insert-update-payload.c +6 -17
  72. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-iev-v2.c +6 -5
  73. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-iev.c +13 -10
  74. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-uev-common.c +3 -2
  75. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-rfds.c +7 -6
  76. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-tag-and-encrypted-metadata-block.c +4 -3
  77. data/ext/libmongocrypt/libmongocrypt/src/mc-optional-private.h +1 -1
  78. data/ext/libmongocrypt/libmongocrypt/src/mc-parse-utils-private.h +27 -0
  79. data/ext/libmongocrypt/libmongocrypt/src/mc-parse-utils.c +48 -0
  80. data/ext/libmongocrypt/libmongocrypt/src/mc-range-edge-generation-private.h +5 -5
  81. data/ext/libmongocrypt/libmongocrypt/src/mc-range-edge-generation.c +15 -20
  82. data/ext/libmongocrypt/libmongocrypt/src/mc-range-encoding-private.h +4 -6
  83. data/ext/libmongocrypt/libmongocrypt/src/mc-range-encoding.c +9 -18
  84. data/ext/libmongocrypt/libmongocrypt/src/mc-range-mincover-generator.template.h +4 -5
  85. data/ext/libmongocrypt/libmongocrypt/src/mc-range-mincover-private.h +5 -9
  86. data/ext/libmongocrypt/libmongocrypt/src/mc-range-mincover.c +14 -19
  87. data/ext/libmongocrypt/libmongocrypt/src/mc-rangeopts-private.h +2 -4
  88. data/ext/libmongocrypt/libmongocrypt/src/mc-rangeopts.c +109 -119
  89. data/ext/libmongocrypt/libmongocrypt/src/mc-reader-private.h +2 -2
  90. data/ext/libmongocrypt/libmongocrypt/src/mc-reader.c +4 -2
  91. data/ext/libmongocrypt/libmongocrypt/src/mc-schema-broker-private.h +0 -3
  92. data/ext/libmongocrypt/libmongocrypt/src/mc-schema-broker.c +4 -14
  93. data/ext/libmongocrypt/libmongocrypt/src/mc-str-encode-string-sets-private.h +1 -1
  94. data/ext/libmongocrypt/libmongocrypt/src/mc-str-encode-string-sets.c +3 -3
  95. data/ext/libmongocrypt/libmongocrypt/src/mc-text-search-str-encode-private.h +8 -1
  96. data/ext/libmongocrypt/libmongocrypt/src/mc-text-search-str-encode.c +78 -2
  97. data/ext/libmongocrypt/libmongocrypt/src/mc-tokens-private.h +34 -16
  98. data/ext/libmongocrypt/libmongocrypt/src/mc-tokens.c +66 -74
  99. data/ext/libmongocrypt/libmongocrypt/src/mc-writer-private.h +1 -1
  100. data/ext/libmongocrypt/libmongocrypt/src/mc-writer.c +4 -2
  101. data/ext/libmongocrypt/libmongocrypt/src/mlib/error.h +1 -1
  102. data/ext/libmongocrypt/libmongocrypt/src/mlib/int128.h +12 -1
  103. data/ext/libmongocrypt/libmongocrypt/src/mlib/int128.test.cpp +5 -0
  104. data/ext/libmongocrypt/libmongocrypt/src/mlib/path.h +5 -5
  105. data/ext/libmongocrypt/libmongocrypt/src/mlib/path.test.c +2 -5
  106. data/ext/libmongocrypt/libmongocrypt/src/mlib/str.h +65 -58
  107. data/ext/libmongocrypt/libmongocrypt/src/mlib/str.test.c +3 -3
  108. data/ext/libmongocrypt/libmongocrypt/src/mlib/thread.h +1 -1
  109. data/ext/libmongocrypt/libmongocrypt/src/mlib/user-check.h +1 -1
  110. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-cache-collinfo-private.h +1 -1
  111. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-cache-collinfo.c +4 -0
  112. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ciphertext-private.h +1 -1
  113. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-crypto-private.h +4 -4
  114. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-crypto.c +29 -25
  115. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-datakey.c +3 -2
  116. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-decrypt.c +6 -3
  117. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-encrypt.c +48 -58
  118. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-rewrap-many-datakey.c +12 -0
  119. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx.c +5 -13
  120. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-dll-private.h +19 -2
  121. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-key-broker.c +9 -9
  122. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-marking-private.h +3 -4
  123. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-marking.c +285 -89
  124. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-opts-private.h +0 -2
  125. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-opts.c +0 -1
  126. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-private.h +1 -1
  127. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-util.c +4 -1
  128. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt.c +47 -31
  129. data/ext/libmongocrypt/libmongocrypt/src/os_posix/os_dll.c +2 -0
  130. data/ext/libmongocrypt/libmongocrypt/src/os_posix/os_mutex.c +1 -1
  131. data/ext/libmongocrypt/libmongocrypt/src/os_win/os_dll.c +3 -1
  132. data/ext/libmongocrypt/libmongocrypt/src/os_win/os_mutex.c +1 -1
  133. data/ext/libmongocrypt/libmongocrypt/src/unicode/case-fold-map.c +1 -1
  134. data/ext/libmongocrypt/libmongocrypt/src/unicode/diacritic-fold-map.c +1 -1
  135. data/ext/libmongocrypt/libmongocrypt/src/unicode/fold.c +1 -1
  136. data/ext/libmongocrypt/libmongocrypt/test/crypt_shared-stub.cpp +0 -14
  137. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/encrypted-field-config-map.json +6 -1
  138. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2InsertUpdatePayloadV2-RangeV2.json +8 -0
  139. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/date-v2/encrypted-field-map.json +1 -1
  140. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/date-v2/encrypted-payload.json +6 -4
  141. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/date-v2/mongocryptd-reply.json +1 -1
  142. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-precision-v2/encrypted-field-map.json +1 -1
  143. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-precision-v2/encrypted-payload.json +6 -4
  144. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-precision-v2/mongocryptd-reply.json +2 -2
  145. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-v2/encrypted-field-map.json +1 -1
  146. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-v2/encrypted-payload.json +6 -4
  147. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-v2/mongocryptd-reply.json +1 -1
  148. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double-precision-v2/encrypted-payload.json +14 -6
  149. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double-v2/encrypted-field-map.json +1 -1
  150. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double-v2/encrypted-payload.json +6 -4
  151. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double-v2/mongocryptd-reply.json +1 -1
  152. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int32-v2/encrypted-field-map.json +1 -1
  153. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int32-v2/encrypted-payload.json +6 -4
  154. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int32-v2/mongocryptd-reply.json +1 -1
  155. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int64-v2/encrypted-field-map.json +1 -1
  156. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int64-v2/encrypted-payload.json +6 -4
  157. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int64-v2/mongocryptd-reply.json +1 -1
  158. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range-explicit/double/encrypted-payload-v2.json +1 -1
  159. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range-explicit/double-precision/encrypted-payload-v2.json +1 -1
  160. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range-explicit/int32/encrypted-payload-v2.json +1 -1
  161. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range-explicit/int32-openinterval/encrypted-payload-v2.json +1 -1
  162. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/date-v2/encrypted-field-map.json +1 -1
  163. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/date-v2/encrypted-payload.json +6 -4
  164. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/date-v2/mongocryptd-reply.json +1 -1
  165. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-precision-v2/encrypted-field-map.json +1 -1
  166. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-precision-v2/encrypted-payload.json +6 -4
  167. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-precision-v2/mongocryptd-reply.json +1 -1
  168. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-v2/encrypted-field-map.json +1 -1
  169. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-v2/encrypted-payload.json +6 -4
  170. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-v2/mongocryptd-reply.json +1 -1
  171. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double-precision-v2/encrypted-payload.json +14 -6
  172. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double-v2/encrypted-field-map.json +1 -1
  173. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double-v2/encrypted-payload.json +6 -4
  174. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double-v2/mongocryptd-reply.json +1 -1
  175. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int32-v2/encrypted-field-map.json +1 -1
  176. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int32-v2/encrypted-payload.json +3 -3
  177. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int32-v2/mongocryptd-reply.json +1 -1
  178. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int64-v2/encrypted-field-map.json +1 -1
  179. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int64-v2/encrypted-payload.json +6 -4
  180. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int64-v2/mongocryptd-reply.json +1 -1
  181. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/double/encrypted-payload-v2.json +1 -1
  182. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/double-precision/encrypted-payload-v2.json +1 -1
  183. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/int32/encrypted-payload-v2.json +1 -1
  184. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/sparsity-2/encrypted-payload-v2.json +1 -1
  185. data/ext/libmongocrypt/libmongocrypt/test/data/tokens/mc.json +8 -0
  186. data/ext/libmongocrypt/libmongocrypt/test/data/tokens/server.json +8 -0
  187. data/ext/libmongocrypt/libmongocrypt/test/example-state-machine.c +5 -5
  188. data/ext/libmongocrypt/libmongocrypt/test/test-dll.cpp +11 -5
  189. data/ext/libmongocrypt/libmongocrypt/test/test-gcp-auth.c +2 -2
  190. data/ext/libmongocrypt/libmongocrypt/test/test-mc-efc.c +9 -11
  191. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-encryption-placeholder.c +18 -29
  192. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-find-equality-payload-v2.c +1 -1
  193. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-find-range-payload-v2.c +2 -18
  194. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-find-text-payload.c +320 -0
  195. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-payload-iup-v2.c +2 -17
  196. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-payload-iup.c +1 -1
  197. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-rfds.c +8 -5
  198. data/ext/libmongocrypt/libmongocrypt/test/test-mc-range-edge-generation.c +6 -10
  199. data/ext/libmongocrypt/libmongocrypt/test/test-mc-range-encoding.c +29 -33
  200. data/ext/libmongocrypt/libmongocrypt/test/test-mc-range-mincover.c +12 -20
  201. data/ext/libmongocrypt/libmongocrypt/test/test-mc-rangeopts.c +5 -20
  202. data/ext/libmongocrypt/libmongocrypt/test/test-mc-reader.c +5 -5
  203. data/ext/libmongocrypt/libmongocrypt/test/test-mc-text-search-str-encode.c +147 -18
  204. data/ext/libmongocrypt/libmongocrypt/test/test-mc-tokens.c +35 -14
  205. data/ext/libmongocrypt/libmongocrypt/test/test-mc-writer.c +10 -10
  206. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-assert-match-bson.c +3 -7
  207. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-assert.h +36 -24
  208. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-buffer.c +4 -4
  209. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-cache.c +2 -2
  210. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ciphertext.c +13 -13
  211. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-cleanup.c +49 -55
  212. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-compact.c +64 -67
  213. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-crypto-hooks.c +18 -18
  214. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-crypto-std-hooks.c +4 -0
  215. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-crypto.c +4 -3
  216. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-csfle-lib.c +13 -3
  217. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-decrypt.c +31 -13
  218. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-encrypt.c +35 -52
  219. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-rewrap-many-datakey.c +28 -1
  220. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-setopt.c +50 -91
  221. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-datakey.c +1 -1
  222. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-dll.c +7 -4
  223. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-endpoint.c +1 -1
  224. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-kek.c +1 -1
  225. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-key-cache.c +3 -5
  226. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-kms-ctx.c +2 -2
  227. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-local-kms.c +1 -1
  228. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-log.c +2 -2
  229. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-marking.c +527 -225
  230. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-status.c +1 -1
  231. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt.c +45 -56
  232. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt.h +12 -3
  233. data/ext/libmongocrypt/libmongocrypt/test/test-named-kms-providers.c +11 -11
  234. data/ext/libmongocrypt/libmongocrypt/test/test-unicode-fold.c +6 -2
  235. data/ext/libmongocrypt/libmongocrypt/test/util/HELP.autogen +1 -1
  236. data/ext/libmongocrypt/libmongocrypt/test/util/csfle.c +1 -1
  237. data/ext/libmongocrypt/libmongocrypt/test/util/util.c +5 -5
  238. data/ext/libmongocrypt/libmongocrypt/test/util/util.h +7 -6
  239. data/lib/libmongocrypt_helper/version.rb +2 -2
  240. metadata +17 -13
  241. data/ext/libmongocrypt/libmongocrypt/bindings/python/libmongocrypt-version.txt +0 -1
  242. data/ext/libmongocrypt/libmongocrypt/bindings/python/strip_header.py +0 -50
  243. data/ext/libmongocrypt/libmongocrypt/bindings/python/update-sbom.sh +0 -14
  244. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/success/encrypted-payload.json +0 -29
  245. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/encrypted-payload.json +0 -29
  246. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2EqualityIndexedValueV2.json +0 -8
  247. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2RangeIndexedValueV2.json +0 -8
  248. /data/ext/libmongocrypt/libmongocrypt/bindings/python/{build-manylinux-wheel.sh → scripts/build-manylinux-wheel.sh} +0 -0
  249. /data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/{FLE2InsertUpdatePayload-with-edges.json → FLE2InsertUpdatePayload-RangeV1.json} +0 -0
  250. /data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/{FLE2InsertUpdatePayload-with-edges-V2.json → FLE2InsertUpdatePayloadV2-RangeV1.json} +0 -0
@@ -118,8 +118,6 @@ typedef struct {
118
118
  bool use_need_mongo_collinfo_with_db_state;
119
119
  bool bypass_query_analysis;
120
120
 
121
- // Use the Queryable Encryption Range V2 protocol.
122
- bool use_range_v2;
123
121
  } _mongocrypt_opts_t;
124
122
 
125
123
  void _mongocrypt_opts_kms_providers_cleanup(_mongocrypt_opts_kms_providers_t *kms_providers);
@@ -35,7 +35,6 @@ void _mongocrypt_opts_kms_providers_init(_mongocrypt_opts_kms_providers_t *kms_p
35
35
  void _mongocrypt_opts_init(_mongocrypt_opts_t *opts) {
36
36
  BSON_ASSERT_PARAM(opts);
37
37
  memset(opts, 0, sizeof(*opts));
38
- opts->use_range_v2 = true;
39
38
  _mongocrypt_opts_kms_providers_init(&opts->kms_providers);
40
39
  }
41
40
 
@@ -39,7 +39,7 @@
39
39
 
40
40
  #define CLIENT_ERR_W_CODE(code, ...) _mongocrypt_set_error(status, MONGOCRYPT_STATUS_ERROR_CLIENT, code, __VA_ARGS__)
41
41
 
42
- #define CLIENT_ERR(fmt, ...) CLIENT_ERR_W_CODE(MONGOCRYPT_GENERIC_ERROR_CODE, fmt, ##__VA_ARGS__)
42
+ #define CLIENT_ERR(...) CLIENT_ERR_W_CODE(MONGOCRYPT_GENERIC_ERROR_CODE, __VA_ARGS__)
43
43
 
44
44
  #define KMS_ERR_W_CODE(code, ...) _mongocrypt_set_error(status, MONGOCRYPT_STATUS_ERROR_KMS, code, __VA_ARGS__)
45
45
 
@@ -33,6 +33,7 @@
33
33
  #endif
34
34
 
35
35
  #include "mc-check-conversions-private.h"
36
+ #include "mongocrypt-dll-private.h"
36
37
  #include "mongocrypt-private.h" // CLIENT_ERR
37
38
  #include "mongocrypt-util-private.h"
38
39
 
@@ -62,7 +63,7 @@ current_module_result current_module_path(void) {
62
63
  int ret_error = 0;
63
64
  #ifdef _WIN32
64
65
  DWORD acc_size = 512;
65
- while (!ret_str.data && !ret_error) {
66
+ while (!ret_str.raw.data && !ret_error) {
66
67
  // Loop until we allocate a large enough buffer or get an error
67
68
  wchar_t *path = calloc(acc_size + 1, sizeof(wchar_t));
68
69
  SetLastError(0);
@@ -84,7 +85,9 @@ current_module_result current_module_path(void) {
84
85
  // Darwin/BSD/glibc define extensions for finding dynamic library info from
85
86
  // the address of a symbol.
86
87
  Dl_info info = {0};
88
+ MC_BEGIN_CAST_FUNCTION_TYPE_STRICT_IGNORE
87
89
  int rc = dladdr((const void *)current_module_path, &info);
90
+ MC_END_CAST_FUNCTION_TYPE_STRICT_IGNORE
88
91
  if (rc == 0) {
89
92
  // Failed to resolve the symbol
90
93
  ret_error = ENOENT;
@@ -28,6 +28,7 @@
28
28
  #include "mongocrypt-cache-private.h"
29
29
  #include "mongocrypt-config.h"
30
30
  #include "mongocrypt-crypto-private.h"
31
+ #include "mongocrypt-dll-private.h"
31
32
  #include "mongocrypt-log-private.h"
32
33
  #include "mongocrypt-mutex-private.h"
33
34
  #include "mongocrypt-opts-private.h"
@@ -136,7 +137,7 @@ mongocrypt_t *mongocrypt_new(void) {
136
137
  }
137
138
 
138
139
  #define ASSERT_MONGOCRYPT_PARAM_UNINIT(crypt) \
139
- { \
140
+ if (1) { \
140
141
  const mongocrypt_t *_crypt = (crypt); \
141
142
  BSON_ASSERT_PARAM(_crypt); \
142
143
  if (_crypt->initialized) { \
@@ -144,7 +145,8 @@ mongocrypt_t *mongocrypt_new(void) {
144
145
  CLIENT_ERR("options cannot be set after initialization"); \
145
146
  return false; \
146
147
  } \
147
- }
148
+ } else \
149
+ ((void)0)
148
150
 
149
151
  bool mongocrypt_setopt_use_range_v2(mongocrypt_t *crypt) {
150
152
  ASSERT_MONGOCRYPT_PARAM_UNINIT(crypt);
@@ -391,14 +393,16 @@ static _loaded_csfle _try_load_csfle(const char *filepath, mongocrypt_status_t *
391
393
  // Try to open the dynamic lib
392
394
  mcr_dll lib = mcr_dll_open(filepath);
393
395
  // Check for errors, which are represented by strings
394
- if (lib.error_string.data) {
396
+ if (lib.error_string.raw.data) {
395
397
  // Error opening candidate
396
398
  _mongocrypt_log(log,
397
399
  MONGOCRYPT_LOG_LEVEL_WARNING,
398
- "Error while opening candidate for CSFLE dynamic library [%s]: %s",
400
+ "Error while opening candidate for crypt_shared dynamic library [%s]: %s",
399
401
  filepath,
400
- lib.error_string.data);
401
- CLIENT_ERR("Error while opening candidate for CSFLE dynamic library [%s]: %s", filepath, lib.error_string.data);
402
+ lib.error_string.raw.data);
403
+ CLIENT_ERR("Error while opening candidate for crypt_shared dynamic library [%s]: %s",
404
+ filepath,
405
+ lib.error_string.raw.data);
402
406
  // Free resources, which will include the error string
403
407
  mcr_dll_close(lib);
404
408
  // Bad:
@@ -406,7 +410,7 @@ static _loaded_csfle _try_load_csfle(const char *filepath, mongocrypt_status_t *
406
410
  }
407
411
 
408
412
  // Successfully opened DLL
409
- _mongocrypt_log(log, MONGOCRYPT_LOG_LEVEL_TRACE, "Loading CSFLE dynamic library [%s]", filepath);
413
+ _mongocrypt_log(log, MONGOCRYPT_LOG_LEVEL_TRACE, "Loading crypt_shared dynamic library [%s]", filepath);
410
414
 
411
415
  // Construct the library vtable
412
416
  _mongo_crypt_v1_vtable vtable = {.okay = true};
@@ -414,12 +418,14 @@ static _loaded_csfle _try_load_csfle(const char *filepath, mongocrypt_status_t *
414
418
  { \
415
419
  /* Symbol names are qualified by the lib name and version: */ \
416
420
  const char *symname = "mongo_crypt_v1_" #Name; \
417
- vtable.Name = mcr_dll_sym(lib, symname); \
421
+ MC_BEGIN_CAST_FUNCTION_TYPE_STRICT_IGNORE \
422
+ vtable.Name = (RetType(*)(__VA_ARGS__))mcr_dll_sym(lib, symname); \
423
+ MC_END_CAST_FUNCTION_TYPE_STRICT_IGNORE \
418
424
  if (vtable.Name == NULL) { \
419
425
  /* The requested symbol is not present */ \
420
426
  _mongocrypt_log(log, \
421
427
  MONGOCRYPT_LOG_LEVEL_ERROR, \
422
- "Missing required symbol '%s' from CSFLE dynamic library [%s]", \
428
+ "Missing required symbol '%s' from crypt_shared dynamic library [%s]", \
423
429
  symname, \
424
430
  filepath); \
425
431
  /* Mark the vtable as broken, but keep trying to load more symbols to \
@@ -431,17 +437,27 @@ static _loaded_csfle _try_load_csfle(const char *filepath, mongocrypt_status_t *
431
437
  #undef X_FUNC
432
438
 
433
439
  if (!vtable.okay) {
440
+ // A common mistake is to pass the path to libmongocrypt instead of than crypt_shared.
441
+ // Check if the library has a libmongocrypt symbol.
442
+ if (mcr_dll_sym(lib, "mongocrypt_version")) {
443
+ CLIENT_ERR("Tried to load crypt_shared dynamic library at path [%s] but detected libmongocrypt", filepath);
444
+ mcr_dll_close(lib);
445
+ return (_loaded_csfle){.okay = false};
446
+ }
434
447
  mcr_dll_close(lib);
435
448
  _mongocrypt_log(log,
436
449
  MONGOCRYPT_LOG_LEVEL_ERROR,
437
- "One or more required symbols are missing from CSFLE dynamic library "
450
+ "One or more required symbols are missing from crypt_shared dynamic library "
438
451
  "[%s], so this dynamic library will not be used.",
439
452
  filepath);
453
+ CLIENT_ERR("One or more required symbols are missing from crypt_shared dynamic library "
454
+ "[%s], so this dynamic library will not be used.",
455
+ filepath);
440
456
  return (_loaded_csfle){.okay = false};
441
457
  }
442
458
 
443
459
  // Success!
444
- _mongocrypt_log(log, MONGOCRYPT_LOG_LEVEL_INFO, "Opened CSFLE dynamic library [%s]", filepath);
460
+ _mongocrypt_log(log, MONGOCRYPT_LOG_LEVEL_INFO, "Opened crypt_shared dynamic library [%s]", filepath);
445
461
  return (_loaded_csfle){.okay = true, .lib = lib, .vtable = vtable};
446
462
  }
447
463
 
@@ -462,7 +478,7 @@ static bool _try_replace_dollar_origin(mstr *filepath, _mongocrypt_log_t *log) {
462
478
  return true;
463
479
  }
464
480
  // Check that the next char is a path separator or end-of-string:
465
- char peek = filepath->data[dollar_origin.len];
481
+ char peek = filepath->raw.data[dollar_origin.len];
466
482
  if (peek != 0 && !mpath_is_sep(peek, MPATH_NATIVE)) {
467
483
  // Not a single path element
468
484
  return true;
@@ -475,9 +491,9 @@ static bool _try_replace_dollar_origin(mstr *filepath, _mongocrypt_log_t *log) {
475
491
  _mongocrypt_log(log,
476
492
  MONGOCRYPT_LOG_LEVEL_WARNING,
477
493
  "Error while loading the executable module path for "
478
- "substitution of $ORIGIN in CSFLE search path [%s]: %s",
479
- filepath->data,
480
- error.data);
494
+ "substitution of $ORIGIN in crypt_shared search path [%s]: %s",
495
+ filepath->raw.data,
496
+ error.raw.data);
481
497
  mstr_free(error);
482
498
  return false;
483
499
  }
@@ -493,7 +509,7 @@ static _loaded_csfle _try_find_csfle(mongocrypt_t *crypt) {
493
509
 
494
510
  BSON_ASSERT_PARAM(crypt);
495
511
 
496
- if (crypt->opts.crypt_shared_lib_override_path.data) {
512
+ if (crypt->opts.crypt_shared_lib_override_path.raw.data) {
497
513
  // If an override path was specified, skip the library searching behavior
498
514
  csfle_cand_filepath = mstr_copy(crypt->opts.crypt_shared_lib_override_path.view);
499
515
  if (_try_replace_dollar_origin(&csfle_cand_filepath, &crypt->log)) {
@@ -501,7 +517,7 @@ static _loaded_csfle _try_find_csfle(mongocrypt_t *crypt) {
501
517
  // Do not allow a plain filename to go through, as that will cause the
502
518
  // DLL load to search the system.
503
519
  mstr_assign(&csfle_cand_filepath, mpath_absolute(csfle_cand_filepath.view, MPATH_NATIVE));
504
- candidate_csfle = _try_load_csfle(csfle_cand_filepath.data, crypt->status, &crypt->log);
520
+ candidate_csfle = _try_load_csfle(csfle_cand_filepath.raw.data, crypt->status, &crypt->log);
505
521
  }
506
522
  } else {
507
523
  // No override path was specified, so try to find it on the provided
@@ -523,7 +539,7 @@ static _loaded_csfle _try_find_csfle(mongocrypt_t *crypt) {
523
539
  }
524
540
  }
525
541
  // Try to load the file:
526
- candidate_csfle = _try_load_csfle(csfle_cand_filepath.data, NULL /* status */, &crypt->log);
542
+ candidate_csfle = _try_load_csfle(csfle_cand_filepath.raw.data, NULL /* status */, &crypt->log);
527
543
  if (candidate_csfle.okay) {
528
544
  // Stop searching:
529
545
  break;
@@ -548,13 +564,13 @@ typedef struct csfle_global_lib_state {
548
564
  mongo_crypt_v1_lib *csfle_lib;
549
565
  } csfle_global_lib_state;
550
566
 
551
- csfle_global_lib_state g_csfle_state;
567
+ static csfle_global_lib_state g_csfle_state;
552
568
 
553
569
  static void init_csfle_state(void) {
554
570
  _mongocrypt_mutex_init(&g_csfle_state.mtx);
555
571
  }
556
572
 
557
- mlib_once_flag g_csfle_init_flag = MLIB_ONCE_INITIALIZER;
573
+ static mlib_once_flag g_csfle_init_flag = MLIB_ONCE_INITIALIZER;
558
574
 
559
575
  /**
560
576
  * @brief Verify that `found` refers to the same library that is globally loaded
@@ -586,12 +602,12 @@ static bool _validate_csfle_singleton(mongocrypt_t *crypt, _loaded_csfle found)
586
602
 
587
603
  // Path to the existing loaded csfle:
588
604
  mcr_dll_path_result existing_path_ = mcr_dll_path(g_csfle_state.dll);
589
- assert(existing_path_.path.data && "Failed to get path to already-loaded csfle library");
605
+ assert(existing_path_.path.raw.data && "Failed to get path to already-loaded csfle library");
590
606
  mstr_view existing_path = existing_path_.path.view;
591
607
  bool okay = true;
592
608
  if (!found.okay) {
593
609
  // There is one loaded, but we failed to find that same library. Error:
594
- CLIENT_ERR("An existing CSFLE library is loaded by the application at "
610
+ CLIENT_ERR("An existing crypt_shared library is loaded by the application at "
595
611
  "[%s], but the current call to mongocrypt_init() failed to "
596
612
  "find that same library.",
597
613
  existing_path.data);
@@ -599,17 +615,17 @@ static bool _validate_csfle_singleton(mongocrypt_t *crypt, _loaded_csfle found)
599
615
  } else {
600
616
  // Get the path to what we found:
601
617
  mcr_dll_path_result found_path = mcr_dll_path(found.lib);
602
- assert(found_path.path.data
618
+ assert(found_path.path.raw.data
603
619
  && "Failed to get the dynamic library filepath of the library that "
604
620
  "was loaded for csfle");
605
621
  if (!mstr_eq(found_path.path.view, existing_path)) {
606
622
  // Our find-result should only ever find the existing same library.
607
623
  // Error:
608
- CLIENT_ERR("An existing CSFLE library is loaded by the application at [%s], "
624
+ CLIENT_ERR("An existing crypt_shared library is loaded by the application at [%s], "
609
625
  "but the current call to mongocrypt_init() attempted to load a "
610
- "second CSFLE library from [%s]. This is not allowed.",
626
+ "second crypt_shared library from [%s]. This is not allowed.",
611
627
  existing_path.data,
612
- found_path.path.data);
628
+ found_path.path.raw.data);
613
629
  okay = false;
614
630
  }
615
631
  mstr_free(found_path.path);
@@ -784,7 +800,7 @@ static bool _csfle_replace_or_take_validate_singleton(mongocrypt_t *crypt, _load
784
800
  have_csfle = true;
785
801
  break;
786
802
  case LIB_CREATE_FAILED:
787
- if (!message.data) {
803
+ if (!message.raw.data) {
788
804
  // We failed to obtain a message about the failure
789
805
  _mongocrypt_set_error(crypt->status,
790
806
  MONGOCRYPT_STATUS_ERROR_CRYPT_SHARED,
@@ -796,7 +812,7 @@ static bool _csfle_replace_or_take_validate_singleton(mongocrypt_t *crypt, _load
796
812
  MONGOCRYPT_STATUS_ERROR_CRYPT_SHARED,
797
813
  MONGOCRYPT_GENERIC_ERROR_CODE,
798
814
  "csfle lib_create() failed: %s [Error %d, code %d]",
799
- message.data,
815
+ message.raw.data,
800
816
  err,
801
817
  code);
802
818
  }
@@ -823,7 +839,7 @@ static bool _wants_csfle(mongocrypt_t *c) {
823
839
  if (c->opts.bypass_query_analysis) {
824
840
  return false;
825
841
  }
826
- return c->opts.n_crypt_shared_lib_search_paths != 0 || c->opts.crypt_shared_lib_override_path.data != NULL;
842
+ return c->opts.n_crypt_shared_lib_search_paths != 0 || c->opts.crypt_shared_lib_override_path.raw.data != NULL;
827
843
  }
828
844
 
829
845
  /**
@@ -849,11 +865,11 @@ static bool _try_enable_csfle(mongocrypt_t *crypt) {
849
865
 
850
866
  // If a crypt_shared override path was specified, but we did not succeed in
851
867
  // loading crypt_shared, that is a hard-error.
852
- if (crypt->opts.crypt_shared_lib_override_path.data && !found.okay) {
868
+ if (crypt->opts.crypt_shared_lib_override_path.raw.data && !found.okay) {
853
869
  // Wrap error with additional information.
854
870
  CLIENT_ERR("A crypt_shared override path was specified [%s], but we failed to open a dynamic "
855
871
  "library at that location. Load error: [%s]",
856
- crypt->opts.crypt_shared_lib_override_path.data,
872
+ crypt->opts.crypt_shared_lib_override_path.raw.data,
857
873
  mongocrypt_status_message(crypt->status, NULL /* len */));
858
874
  return false;
859
875
  }
@@ -43,6 +43,8 @@ mcr_dll mcr_dll_open(const char *filepath) {
43
43
  }
44
44
  }
45
45
 
46
+ void mcr_dll_close_handle(mcr_dll); // -Wmissing-prototypes: not for external use despite external linkage.
47
+
46
48
  void mcr_dll_close_handle(mcr_dll dll) {
47
49
  if (dll._native_handle) {
48
50
  dlclose(dll._native_handle);
@@ -46,4 +46,4 @@ void _mongocrypt_mutex_unlock(mongocrypt_mutex_t *mutex) {
46
46
  }
47
47
  }
48
48
 
49
- #endif /* _WIN32 */
49
+ #endif /* _WIN32 */
@@ -36,6 +36,8 @@ mcr_dll mcr_dll_open(const char *filepath_) {
36
36
  return (mcr_dll){.error_string = NULL, ._native_handle = lib};
37
37
  }
38
38
 
39
+ void mcr_dll_close_handle(mcr_dll); // -Wmissing-prototypes: not for external use despite external linkage.
40
+
39
41
  void mcr_dll_close_handle(mcr_dll dll) {
40
42
  if (dll._native_handle) {
41
43
  FreeLibrary(dll._native_handle);
@@ -50,7 +52,7 @@ mcr_dll_path_result mcr_dll_path(mcr_dll dll) {
50
52
  mstr ret_str = MSTR_NULL;
51
53
  int ret_error = 0;
52
54
  DWORD acc_size = 512;
53
- while (!ret_str.data && !ret_error) {
55
+ while (!ret_str.raw.data && !ret_error) {
54
56
  // Loop until we allocate a large enough buffer or get an error
55
57
  wchar_t *path = calloc((size_t)acc_size + 1u, sizeof(wchar_t));
56
58
  SetLastError(0);
@@ -34,4 +34,4 @@ void _mongocrypt_mutex_unlock(mongocrypt_mutex_t *mutex) {
34
34
  LeaveCriticalSection(mutex);
35
35
  }
36
36
 
37
- #endif /* _WIN32 */
37
+ #endif /* _WIN32 */
@@ -1431,4 +1431,4 @@ bson_unichar_t unicode_codepoint_to_lower(bson_unichar_t codepoint) {
1431
1431
  case 0x1e921: return 0x1e943;
1432
1432
  default: return codepoint;
1433
1433
  }
1434
- }
1434
+ }
@@ -2881,4 +2881,4 @@ bson_unichar_t unicode_codepoint_remove_diacritics(bson_unichar_t codepoint) {
2881
2881
  case 0x2fa1d: return 0x2a600;
2882
2882
  default: return codepoint;
2883
2883
  }
2884
- }
2884
+ }
@@ -136,4 +136,4 @@ bool unicode_fold(const char *str,
136
136
  *output_it = '\0';
137
137
  *out_len = (size_t)(output_it - *out_str);
138
138
  return true;
139
- }
139
+ }
@@ -7,12 +7,6 @@
7
7
  * libmongocrypt.
8
8
  */
9
9
 
10
- #ifdef _WIN32
11
- #define EXPORT_API __declspec(dllexport)
12
- #else
13
- #define EXPORT_API __attribute__((visibility("default")))
14
- #endif
15
-
16
10
  #define MONGO_CRYPT_SUPPORT_COMPILING
17
11
 
18
12
  #include <mongo_crypt-v1.h>
@@ -22,14 +16,6 @@
22
16
  #include <cinttypes>
23
17
  #include <cstring>
24
18
 
25
- #ifdef _WIN32
26
- #define MONGO_API_CALL __cdecl
27
- #define MONGO_API_EXPORT __declspec(dllexport)
28
- #else
29
- #define MONGO_API_CALL [[]]
30
- #define MONGO_API_EXPORT __attribute__((used, visibility("default")))
31
- #endif
32
-
33
19
  struct mongo_crypt_v1_status {};
34
20
 
35
21
  typedef mongo_crypt_v1_status status_t;
@@ -49,7 +49,12 @@
49
49
  }
50
50
  },
51
51
  "path": "rangeField",
52
- "bsonType": "int"
52
+ "bsonType": "int",
53
+ "queries": {
54
+ "queryType": "range",
55
+ "contention": 0,
56
+ "sparsity": 1
57
+ }
53
58
  }
54
59
  ]
55
60
  }
@@ -0,0 +1,8 @@
1
+ {
2
+ "v": {
3
+ "$binary": {
4
+ "base64": "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",
5
+ "subType": "06"
6
+ }
7
+ }
8
+ }
@@ -13,7 +13,7 @@
13
13
  "path": "encrypted",
14
14
  "bsonType": "date",
15
15
  "queries": {
16
- "queryType": "rangePreview",
16
+ "queryType": "range",
17
17
  "contention": {
18
18
  "$numberInt": "0"
19
19
  },
@@ -3,13 +3,15 @@
3
3
  "filter": {
4
4
  "encrypted": {
5
5
  "$binary": {
6
- "base64": "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",
7
- "subType": "6"
6
+ "base64": "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",
7
+ "subType": "06"
8
8
  }
9
9
  }
10
10
  },
11
11
  "encryptionInformation": {
12
- "type": 1,
12
+ "type": {
13
+ "$numberInt": "1"
14
+ },
13
15
  "schema": {
14
16
  "db.test": {
15
17
  "escCollection": "fle2.test.esc",
@@ -25,7 +27,7 @@
25
27
  "path": "encrypted",
26
28
  "bsonType": "date",
27
29
  "queries": {
28
- "queryType": "rangePreview",
30
+ "queryType": "range",
29
31
  "contention": {
30
32
  "$numberInt": "0"
31
33
  },
@@ -31,7 +31,7 @@
31
31
  "path": "encrypted",
32
32
  "bsonType": "date",
33
33
  "queries": {
34
- "queryType": "rangePreview",
34
+ "queryType": "range",
35
35
  "contention": {
36
36
  "$numberInt": "0"
37
37
  },
@@ -13,7 +13,7 @@
13
13
  "path": "encrypted",
14
14
  "bsonType": "decimal",
15
15
  "queries": {
16
- "queryType": "rangePreview",
16
+ "queryType": "range",
17
17
  "contention": {
18
18
  "$numberInt": "0"
19
19
  },
@@ -3,13 +3,15 @@
3
3
  "filter": {
4
4
  "encrypted": {
5
5
  "$binary": {
6
- "base64": "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",
7
- "subType": "6"
6
+ "base64": "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",
7
+ "subType": "06"
8
8
  }
9
9
  }
10
10
  },
11
11
  "encryptionInformation": {
12
- "type": 1,
12
+ "type": {
13
+ "$numberInt": "1"
14
+ },
13
15
  "schema": {
14
16
  "db.test": {
15
17
  "escCollection": "fle2.test.esc",
@@ -25,7 +27,7 @@
25
27
  "path": "encrypted",
26
28
  "bsonType": "decimal",
27
29
  "queries": {
28
- "queryType": "rangePreview",
30
+ "queryType": "range",
29
31
  "contention": {
30
32
  "$numberInt": "0"
31
33
  },
@@ -31,7 +31,7 @@
31
31
  "path": "encrypted",
32
32
  "bsonType": "decimal",
33
33
  "queries": {
34
- "queryType": "rangePreview",
34
+ "queryType": "range",
35
35
  "contention": {
36
36
  "$numberInt": "0"
37
37
  },
@@ -55,4 +55,4 @@
55
55
  }
56
56
  },
57
57
  "hasEncryptedPlaceholders": true
58
- }
58
+ }
@@ -13,7 +13,7 @@
13
13
  "path": "encrypted",
14
14
  "bsonType": "decimal",
15
15
  "queries": {
16
- "queryType": "rangePreview",
16
+ "queryType": "range",
17
17
  "contention": {
18
18
  "$numberInt": "0"
19
19
  },