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
@@ -73,8 +73,7 @@ static void _test_FLE2FindRangePayloadV2_roundtrip(_mongocrypt_tester_t *tester)
73
73
  payload.secondOperator = expect_secondOperator;
74
74
 
75
75
  bson_init(&out_bson);
76
- const bool use_range_v2 = false;
77
- mc_FLE2FindRangePayloadV2_serialize(&payload, &out_bson, use_range_v2);
76
+ mc_FLE2FindRangePayloadV2_serialize(&payload, &out_bson);
78
77
 
79
78
  ASSERT_EQUAL_BSON(&in_bson, &out_bson);
80
79
 
@@ -100,26 +99,11 @@ static void _test_FLE2FindRangePayloadV2_includes_crypto_params(_mongocrypt_test
100
99
  // Test crypto params from SERVER-91889 are included in "range" payload.
101
100
  {
102
101
  bson_t got = BSON_INITIALIZER;
103
- const bool use_range_v2 = true;
104
- ASSERT(mc_FLE2FindRangePayloadV2_serialize(&payload, &got, use_range_v2));
102
+ ASSERT(mc_FLE2FindRangePayloadV2_serialize(&payload, &got));
105
103
  _assert_match_bson(&got, TMP_BSON(BSON_STR({"sp" : 1, "pn" : 2, "tf" : 3, "mn" : 4, "mx" : 5})));
106
104
  bson_destroy(&got);
107
105
  }
108
106
 
109
- // Test crypto params from SERVER-91889 are excluded in "rangePreview" payload.
110
- {
111
- bson_t got = BSON_INITIALIZER;
112
- const bool use_range_v2 = false;
113
- ASSERT(mc_FLE2FindRangePayloadV2_serialize(&payload, &got, use_range_v2));
114
- _assert_match_bson(&got, TMP_BSON(BSON_STR({
115
- "sp" : {"$exists" : false},
116
- "pn" : {"$exists" : false},
117
- "tf" : {"$exists" : false},
118
- "mn" : {"$exists" : false},
119
- "mx" : {"$exists" : false}
120
- })));
121
- bson_destroy(&got);
122
- }
123
107
  mc_FLE2FindRangePayloadV2_cleanup(&payload);
124
108
  }
125
109
 
@@ -0,0 +1,320 @@
1
+ /*
2
+ * Copyright 2025-present MongoDB, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ #include <bson/bson.h>
18
+
19
+ #include "mc-fle2-find-text-payload-private.h"
20
+ #include "test-mongocrypt-assert-match-bson.h"
21
+ #include "test-mongocrypt-assert.h"
22
+ #include "test-mongocrypt.h"
23
+
24
+ #define VALIDATE_TOKEN_SET(p, e) \
25
+ ASSERT_CMPBUF((p)->edcDerivedToken, (e)->edcDerivedToken); \
26
+ ASSERT_CMPBUF((p)->escDerivedToken, (e)->escDerivedToken); \
27
+ ASSERT_CMPBUF((p)->serverDerivedFromDataToken, (e)->serverDerivedFromDataToken)
28
+
29
+ static void _validate_parsed_payload(_mongocrypt_tester_t *tester,
30
+ mc_FLE2FindTextPayload_t *expected,
31
+ mc_FLE2FindTextPayload_t *parsed) {
32
+ ASSERT(parsed->tokenSets.exact.set == expected->tokenSets.exact.set);
33
+ ASSERT(parsed->tokenSets.substring.set == expected->tokenSets.substring.set);
34
+ ASSERT(parsed->tokenSets.suffix.set == expected->tokenSets.suffix.set);
35
+ ASSERT(parsed->tokenSets.prefix.set == expected->tokenSets.prefix.set);
36
+ ASSERT(parsed->caseFold == expected->caseFold);
37
+ ASSERT(parsed->diacriticFold == expected->diacriticFold);
38
+ ASSERT(parsed->substringSpec.set == expected->substringSpec.set);
39
+ ASSERT(parsed->suffixSpec.set == expected->suffixSpec.set);
40
+ ASSERT(parsed->prefixSpec.set == expected->prefixSpec.set);
41
+
42
+ if (parsed->tokenSets.exact.set) {
43
+ VALIDATE_TOKEN_SET(&parsed->tokenSets.exact.value, &expected->tokenSets.exact.value);
44
+ }
45
+ if (parsed->tokenSets.substring.set) {
46
+ VALIDATE_TOKEN_SET(&parsed->tokenSets.substring.value, &expected->tokenSets.substring.value);
47
+ }
48
+ if (parsed->tokenSets.suffix.set) {
49
+ VALIDATE_TOKEN_SET(&parsed->tokenSets.suffix.value, &expected->tokenSets.suffix.value);
50
+ }
51
+ if (parsed->tokenSets.prefix.set) {
52
+ VALIDATE_TOKEN_SET(&parsed->tokenSets.prefix.value, &expected->tokenSets.prefix.value);
53
+ }
54
+
55
+ if (parsed->substringSpec.set) {
56
+ ASSERT_CMPUINT32(parsed->substringSpec.value.lb, ==, expected->substringSpec.value.lb);
57
+ ASSERT_CMPUINT32(parsed->substringSpec.value.ub, ==, expected->substringSpec.value.ub);
58
+ ASSERT_CMPUINT32(parsed->substringSpec.value.mlen, ==, expected->substringSpec.value.mlen);
59
+ }
60
+ if (parsed->suffixSpec.set) {
61
+ ASSERT_CMPUINT32(parsed->suffixSpec.value.lb, ==, expected->suffixSpec.value.lb);
62
+ ASSERT_CMPUINT32(parsed->suffixSpec.value.ub, ==, expected->suffixSpec.value.ub);
63
+ }
64
+ if (parsed->prefixSpec.set) {
65
+ ASSERT_CMPUINT32(parsed->prefixSpec.value.lb, ==, expected->prefixSpec.value.lb);
66
+ ASSERT_CMPUINT32(parsed->prefixSpec.value.ub, ==, expected->prefixSpec.value.ub);
67
+ }
68
+ }
69
+
70
+ #undef VALIDATE_TOKEN_SET
71
+
72
+ static void
73
+ _do_roundtrip_test(_mongocrypt_tester_t *tester, mc_FLE2FindTextPayload_t *spec, const char *expectedFailMsg) {
74
+ mongocrypt_status_t *status = mongocrypt_status_new();
75
+
76
+ bson_t out_bson;
77
+ bson_init(&out_bson);
78
+ ASSERT(mc_FLE2FindTextPayload_serialize(spec, &out_bson));
79
+
80
+ mc_FLE2FindTextPayload_t parsed;
81
+ mc_FLE2FindTextPayload_init(&parsed);
82
+
83
+ bool ret = mc_FLE2FindTextPayload_parse(&parsed, &out_bson, status);
84
+ if (expectedFailMsg) {
85
+ ASSERT_FAILS_STATUS(ret, status, expectedFailMsg);
86
+ } else {
87
+ ASSERT_OK_STATUS(ret, status);
88
+ _validate_parsed_payload(tester, spec, &parsed);
89
+ }
90
+
91
+ mc_FLE2FindTextPayload_cleanup(&parsed);
92
+ bson_destroy(&out_bson);
93
+ mongocrypt_status_destroy(status);
94
+ }
95
+
96
+ static void _do_parse_error_test(_mongocrypt_tester_t *tester, bson_t *to_parse, const char *expectedFailMsg) {
97
+ mongocrypt_status_t *status = mongocrypt_status_new();
98
+ mc_FLE2FindTextPayload_t parsed;
99
+ mc_FLE2FindTextPayload_init(&parsed);
100
+ bool ret = mc_FLE2FindTextPayload_parse(&parsed, to_parse, status);
101
+ ASSERT_FAILS_STATUS(ret, status, expectedFailMsg);
102
+ mc_FLE2FindTextPayload_cleanup(&parsed);
103
+ mongocrypt_status_destroy(status);
104
+ }
105
+
106
+ static const char *k_edcToken = "280edab4190763d1f4183d383f8830773859c3a74a13161094e6fd44e7390fed";
107
+ static const char *k_escToken = "c3c8980ed11e63ec199104bc9a0889322c9eb80d00eee0b5148dc83f7e78adb7";
108
+ static const char *k_svrToken = "8773322a2b9e6c08886db6bc65b46ffdd64651e8a49400a9e55ff5bc550d45bf";
109
+
110
+ // Tests mc_FLE2FindTextPayload_serialize() works correctly, and non-error cases
111
+ // for mc_FLE2FindTextPayload_parse().
112
+ static void _test_FLE2FindTextPayload_roundtrip(_mongocrypt_tester_t *tester) {
113
+ // Test exact token set + prefix spec present
114
+ {
115
+ mc_FLE2FindTextPayload_t payload;
116
+ mc_FLE2FindTextPayload_init(&payload);
117
+ payload.tokenSets.exact.set = true;
118
+ _mongocrypt_buffer_copy_from_hex(&payload.tokenSets.exact.value.edcDerivedToken, k_edcToken);
119
+ _mongocrypt_buffer_copy_from_hex(&payload.tokenSets.exact.value.escDerivedToken, k_escToken);
120
+ _mongocrypt_buffer_copy_from_hex(&payload.tokenSets.exact.value.serverDerivedFromDataToken, k_svrToken);
121
+ payload.caseFold = true;
122
+ payload.diacriticFold = false;
123
+ payload.maxContentionFactor = 43;
124
+ payload.prefixSpec.set = true;
125
+ payload.prefixSpec.value.lb = 2;
126
+ payload.prefixSpec.value.ub = 20;
127
+ _do_roundtrip_test(tester, &payload, NULL);
128
+ mc_FLE2FindTextPayload_cleanup(&payload);
129
+ }
130
+
131
+ // Test substring token set + substring spec present
132
+ {
133
+ mc_FLE2FindTextPayload_t payload;
134
+ mc_FLE2FindTextPayload_init(&payload);
135
+ payload.tokenSets.substring.set = true;
136
+ _mongocrypt_buffer_copy_from_hex(&payload.tokenSets.substring.value.edcDerivedToken, k_edcToken);
137
+ _mongocrypt_buffer_copy_from_hex(&payload.tokenSets.substring.value.escDerivedToken, k_escToken);
138
+ _mongocrypt_buffer_copy_from_hex(&payload.tokenSets.substring.value.serverDerivedFromDataToken, k_svrToken);
139
+ payload.caseFold = false;
140
+ payload.diacriticFold = true;
141
+ payload.maxContentionFactor = 12;
142
+ payload.substringSpec.set = true;
143
+ payload.substringSpec.value.lb = 3;
144
+ payload.substringSpec.value.ub = 30;
145
+ payload.substringSpec.value.mlen = 300;
146
+ _do_roundtrip_test(tester, &payload, NULL);
147
+ mc_FLE2FindTextPayload_cleanup(&payload);
148
+ }
149
+
150
+ // Test suffix token set + suffix & prefix specs present
151
+ {
152
+ mc_FLE2FindTextPayload_t payload;
153
+ mc_FLE2FindTextPayload_init(&payload);
154
+ payload.tokenSets.suffix.set = true;
155
+ _mongocrypt_buffer_copy_from_hex(&payload.tokenSets.suffix.value.edcDerivedToken, k_edcToken);
156
+ _mongocrypt_buffer_copy_from_hex(&payload.tokenSets.suffix.value.escDerivedToken, k_escToken);
157
+ _mongocrypt_buffer_copy_from_hex(&payload.tokenSets.suffix.value.serverDerivedFromDataToken, k_svrToken);
158
+ payload.caseFold = true;
159
+ payload.diacriticFold = true;
160
+ payload.maxContentionFactor = 21;
161
+ payload.suffixSpec.set = true;
162
+ payload.suffixSpec.value.lb = 4;
163
+ payload.suffixSpec.value.ub = 40;
164
+ payload.prefixSpec.set = true;
165
+ payload.prefixSpec.value.lb = 5;
166
+ payload.prefixSpec.value.ub = 50;
167
+ _do_roundtrip_test(tester, &payload, NULL);
168
+ mc_FLE2FindTextPayload_cleanup(&payload);
169
+ }
170
+
171
+ // Test prefix token set + all specs present
172
+ {
173
+ mc_FLE2FindTextPayload_t payload;
174
+ mc_FLE2FindTextPayload_init(&payload);
175
+ payload.tokenSets.prefix.set = true;
176
+ _mongocrypt_buffer_copy_from_hex(&payload.tokenSets.prefix.value.edcDerivedToken, k_edcToken);
177
+ _mongocrypt_buffer_copy_from_hex(&payload.tokenSets.prefix.value.escDerivedToken, k_escToken);
178
+ _mongocrypt_buffer_copy_from_hex(&payload.tokenSets.prefix.value.serverDerivedFromDataToken, k_svrToken);
179
+ payload.caseFold = false;
180
+ payload.diacriticFold = false;
181
+ payload.maxContentionFactor = 55;
182
+ payload.substringSpec.set = true;
183
+ payload.substringSpec.value.lb = 3;
184
+ payload.substringSpec.value.ub = 30;
185
+ payload.substringSpec.value.mlen = 300;
186
+ payload.suffixSpec.set = true;
187
+ payload.suffixSpec.value.lb = 4;
188
+ payload.suffixSpec.value.ub = 40;
189
+ payload.prefixSpec.set = true;
190
+ payload.prefixSpec.value.lb = 5;
191
+ payload.prefixSpec.value.ub = 50;
192
+ _do_roundtrip_test(tester, &payload, NULL);
193
+ mc_FLE2FindTextPayload_cleanup(&payload);
194
+ }
195
+ }
196
+
197
+ #define INT64_JSON "{'$numberLong': '5'}"
198
+ #define TOKEN_JSON "{'$binary': 'abcd', '$type': '0'}"
199
+ #define BADTOKEN_JSON "{'$binary': 'abcd', '$type': '2'}"
200
+ #define D_JSON "'d': " TOKEN_JSON
201
+ #define S_JSON "'s': " TOKEN_JSON
202
+ #define L_JSON "'l': " TOKEN_JSON
203
+ #define TOKENSET_JSON "{" D_JSON ", " S_JSON ", " L_JSON "}"
204
+ #define TS_JSON "'ts':{'e':" TOKENSET_JSON "}"
205
+ #define CM_JSON "'cm':" INT64_JSON
206
+ #define CF_JSON "'cf':false"
207
+ #define DF_JSON "'df':true"
208
+
209
+ // Tests error cases for mc_FLE2FindTextPayload_parse().
210
+ static void _test_FLE2FindTextPayload_parse_errors(_mongocrypt_tester_t *tester) {
211
+ // Test multiple optional fields present under ts is disallowed when parsing
212
+ {
213
+ mc_FLE2FindTextPayload_t payload;
214
+ mc_FLE2FindTextPayload_init(&payload);
215
+ payload.tokenSets.exact.set = true;
216
+ _mongocrypt_buffer_copy_from_hex(&payload.tokenSets.exact.value.edcDerivedToken, k_edcToken);
217
+ _mongocrypt_buffer_copy_from_hex(&payload.tokenSets.exact.value.escDerivedToken, k_escToken);
218
+ _mongocrypt_buffer_copy_from_hex(&payload.tokenSets.exact.value.serverDerivedFromDataToken, k_svrToken);
219
+ payload.tokenSets.suffix.set = true;
220
+ _mongocrypt_buffer_copy_from_hex(&payload.tokenSets.suffix.value.edcDerivedToken, k_edcToken);
221
+ _mongocrypt_buffer_copy_from_hex(&payload.tokenSets.suffix.value.escDerivedToken, k_escToken);
222
+ _mongocrypt_buffer_copy_from_hex(&payload.tokenSets.suffix.value.serverDerivedFromDataToken, k_svrToken);
223
+ _do_roundtrip_test(tester,
224
+ &payload,
225
+ "Error parsing TextSearchFindTokenSets: cannot have multiple optional fields present");
226
+ mc_FLE2FindTextPayload_cleanup(&payload);
227
+ }
228
+ // Test empty ts object is disallowed when parsing
229
+ {
230
+ mc_FLE2FindTextPayload_t payload;
231
+ mc_FLE2FindTextPayload_init(&payload);
232
+ _do_roundtrip_test(tester,
233
+ &payload,
234
+ "Error parsing TextSearchFindTokenSets: exactly one optional field is required");
235
+ mc_FLE2FindTextPayload_cleanup(&payload);
236
+ }
237
+
238
+ // Test missing required fields in top-level object
239
+ {
240
+ bson_t *no_ts = TMP_BSON("{%s, %s, %s}", CM_JSON, CF_JSON, DF_JSON);
241
+ bson_t *no_cm = TMP_BSON("{%s, %s, %s}", TS_JSON, CF_JSON, DF_JSON);
242
+ bson_t *no_cf = TMP_BSON("{%s, %s, %s}", TS_JSON, CM_JSON, DF_JSON);
243
+ bson_t *no_df = TMP_BSON("{%s, %s, %s}", TS_JSON, CM_JSON, CF_JSON);
244
+ _do_parse_error_test(tester, no_ts, "Missing required field 'ts'");
245
+ _do_parse_error_test(tester, no_cm, "Missing required field 'cm'");
246
+ _do_parse_error_test(tester, no_cf, "Missing required field 'cf'");
247
+ _do_parse_error_test(tester, no_df, "Missing required field 'df'");
248
+ }
249
+
250
+ const char *all_required = TS_JSON ", " CM_JSON ", " CF_JSON ", " DF_JSON;
251
+ const char *required_no_ts = CM_JSON ", " CF_JSON ", " DF_JSON;
252
+
253
+ // Test missing required fields in token set
254
+ {
255
+ bson_t *no_e_d = TMP_BSON("{'ts': {'e': {%s, %s}}, %s}", S_JSON, L_JSON, required_no_ts);
256
+ bson_t *no_e_s = TMP_BSON("{'ts': {'e': {%s, %s}}, %s}", D_JSON, L_JSON, required_no_ts);
257
+ bson_t *no_e_l = TMP_BSON("{'ts': {'e': {%s, %s}}, %s}", S_JSON, D_JSON, required_no_ts);
258
+ _do_parse_error_test(tester, no_e_d, "Missing required field 'd'");
259
+ _do_parse_error_test(tester, no_e_s, "Missing required field 's'");
260
+ _do_parse_error_test(tester, no_e_l, "Missing required field 'l'");
261
+ }
262
+
263
+ // Test invalid types in top-level object
264
+ {
265
+ bson_t *bad_ts = TMP_BSON("{'ts': 23, %s}", required_no_ts);
266
+ bson_t *bad_cm = TMP_BSON("{'cm': 'foo', %s, %s, %s}", TS_JSON, CF_JSON, DF_JSON);
267
+ bson_t *bad_cf = TMP_BSON("{'cf': 'foo', %s, %s, %s}", TS_JSON, CM_JSON, DF_JSON);
268
+ bson_t *bad_df = TMP_BSON("{'df': 'foo', %s, %s, %s}", TS_JSON, CF_JSON, CM_JSON);
269
+ bson_t *bad_ss = TMP_BSON("{'ss': 'foo', %s}", required_no_ts);
270
+ bson_t *bad_fs = TMP_BSON("{'fs': 'foo', %s}", required_no_ts);
271
+ bson_t *bad_ps = TMP_BSON("{'ps': 'foo', %s}", required_no_ts);
272
+ _do_parse_error_test(tester, bad_ts, "expected to be a document");
273
+ _do_parse_error_test(tester, bad_cm, "expected to be int64");
274
+ _do_parse_error_test(tester, bad_cf, "expected to be boolean");
275
+ _do_parse_error_test(tester, bad_df, "expected to be boolean");
276
+ _do_parse_error_test(tester, bad_ss, "must be an iterator to a document");
277
+ _do_parse_error_test(tester, bad_fs, "must be an iterator to a document");
278
+ _do_parse_error_test(tester, bad_ps, "must be an iterator to a document");
279
+ }
280
+
281
+ // Test invalid types in ts object
282
+ {
283
+ bson_t *bad_e = TMP_BSON("{'ts': {'e': 23}, %s}", required_no_ts);
284
+ bson_t *bad_s = TMP_BSON("{'ts': {'s': 23}, %s}", required_no_ts);
285
+ bson_t *bad_u = TMP_BSON("{'ts': {'u': 23}, %s}", required_no_ts);
286
+ bson_t *bad_p = TMP_BSON("{'ts': {'p': 23}, %s}", required_no_ts);
287
+ _do_parse_error_test(tester, bad_e, "expected to be a document");
288
+ _do_parse_error_test(tester, bad_s, "expected to be a document");
289
+ _do_parse_error_test(tester, bad_u, "expected to be a document");
290
+ _do_parse_error_test(tester, bad_p, "expected to be a document");
291
+ }
292
+
293
+ // Test invalid types in token set
294
+ {
295
+ bson_t *bad_d = TMP_BSON("{'ts': {'e': {'d': 23, %s, %s}}, %s}", S_JSON, L_JSON, required_no_ts);
296
+ bson_t *bad_s = TMP_BSON("{'ts': {'e': {'s': 23, %s, %s}}, %s}", D_JSON, L_JSON, required_no_ts);
297
+ bson_t *bad_l = TMP_BSON("{'ts': {'e': {'l': 23, %s, %s}}, %s}", S_JSON, D_JSON, required_no_ts);
298
+ bson_t *bad_subtype =
299
+ TMP_BSON("{'ts': {'e': {'d': " BADTOKEN_JSON ", %s, %s}}, %s}", S_JSON, L_JSON, required_no_ts);
300
+ _do_parse_error_test(tester, bad_d, "expected to be bindata, got: INT32");
301
+ _do_parse_error_test(tester, bad_s, "expected to be bindata, got: INT32");
302
+ _do_parse_error_test(tester, bad_l, "expected to be bindata, got: INT32");
303
+ _do_parse_error_test(tester, bad_subtype, "expected to be bindata subtype 0");
304
+ }
305
+
306
+ // Test unrecognized fields
307
+ {
308
+ bson_t *level1 = TMP_BSON("{'kk': 2, %s}", all_required);
309
+ bson_t *level2 = TMP_BSON("{'ts': {'oo': 2}, %s}", required_no_ts);
310
+ bson_t *level3 = TMP_BSON("{'ts': {'e': {%s, %s, %s, 'pp': 1}}, %s}", D_JSON, S_JSON, L_JSON, required_no_ts);
311
+ _do_parse_error_test(tester, level1, "Unrecognized field 'kk'");
312
+ _do_parse_error_test(tester, level2, "Unrecognized field 'oo'");
313
+ _do_parse_error_test(tester, level3, "Unrecognized field 'pp'");
314
+ }
315
+ }
316
+
317
+ void _mongocrypt_tester_install_fle2_payload_find_text(_mongocrypt_tester_t *tester) {
318
+ INSTALL_TEST(_test_FLE2FindTextPayload_roundtrip);
319
+ INSTALL_TEST(_test_FLE2FindTextPayload_parse_errors);
320
+ }
@@ -182,26 +182,11 @@ static void _test_mc_FLE2InsertUpdatePayloadV2_includes_crypto_params(_mongocryp
182
182
  // Test crypto params from SERVER-91889 are included in "range" payload.
183
183
  {
184
184
  bson_t got = BSON_INITIALIZER;
185
- const bool use_range_v2 = true;
186
- ASSERT(mc_FLE2InsertUpdatePayloadV2_serializeForRange(&payload, &got, use_range_v2));
185
+ ASSERT(mc_FLE2InsertUpdatePayloadV2_serializeForRange(&payload, &got));
187
186
  _assert_match_bson(&got, TMP_BSON(BSON_STR({"sp" : 1, "pn" : 2, "tf" : 3, "mn" : 4, "mx" : 5})));
188
187
  bson_destroy(&got);
189
188
  }
190
189
 
191
- // Test crypto params from SERVER-91889 are excluded in "rangePreview" payload.
192
- {
193
- bson_t got = BSON_INITIALIZER;
194
- const bool use_range_v2 = false;
195
- ASSERT(mc_FLE2InsertUpdatePayloadV2_serializeForRange(&payload, &got, use_range_v2));
196
- _assert_match_bson(&got, TMP_BSON(BSON_STR({
197
- "sp" : {"$exists" : false},
198
- "pn" : {"$exists" : false},
199
- "tf" : {"$exists" : false},
200
- "mn" : {"$exists" : false},
201
- "mx" : {"$exists" : false}
202
- })));
203
- bson_destroy(&got);
204
- }
205
190
  mc_FLE2InsertUpdatePayloadV2_cleanup(&payload);
206
191
  }
207
192
 
@@ -243,7 +228,7 @@ static void _test_mc_FLE2InsertUpdatePayloadV2_parses_crypto_params(_mongocrypt_
243
228
  }
244
229
 
245
230
  static void _test_mc_FLE2InsertUpdatePayloadV2_parse_errors(_mongocrypt_tester_t *tester) {
246
- bson_t *input_bson = TMP_BSON(BSON_STR({
231
+ bson_t *input_bson = TMP_BSON_STR(BSON_STR({
247
232
  "d" : {"$binary" : {"base64" : "AAAA", "subType" : "00"}}, //
248
233
  "t" : "wrong type!"
249
234
  }));
@@ -162,7 +162,7 @@ static void test_FLE2InsertUpdatePayload_decrypt(_mongocrypt_tester_t *tester) {
162
162
  #undef TEST_IUP_HEX
163
163
 
164
164
  static void test_FLE2InsertUpdatePayload_parse_errors(_mongocrypt_tester_t *tester) {
165
- bson_t *input_bson = TMP_BSON(BSON_STR({
165
+ bson_t *input_bson = TMP_BSON_STR(BSON_STR({
166
166
  "d" : {"$binary" : {"base64" : "AAAA", "subType" : "00"}}, //
167
167
  "t" : "wrong type!"
168
168
  }));
@@ -93,7 +93,7 @@ static void test_mc_FLE2RangeFindDriverSpec_parse(_mongocrypt_tester_t *tester)
93
93
  mongocrypt_status_t *status = mongocrypt_status_new();
94
94
  mc_FLE2RangeFindDriverSpec_t rfds;
95
95
  TEST_PRINTF("running subtest: %s\n", test->desc);
96
- bool ret = mc_FLE2RangeFindDriverSpec_parse(&rfds, TMP_BSON(test->in), status);
96
+ bool ret = mc_FLE2RangeFindDriverSpec_parse(&rfds, TMP_BSON_STR(test->in), status);
97
97
  if (!test->expectError) {
98
98
  ASSERT_OK_STATUS(ret, status);
99
99
  ASSERT_STREQUAL(test->expect.field, rfds.field);
@@ -323,19 +323,22 @@ static void test_mc_FLE2RangeFindDriverSpec_to_placeholders(_mongocrypt_tester_t
323
323
  };
324
324
 
325
325
  bson_t *range_opts_bson =
326
- TMP_BSON("{'min': %d, 'max': %d, 'sparsity': {'$numberLong': '%d'}}", indexMin, indexMax, sparsity);
326
+ TMP_BSON("{'min': %" PRId32 ", 'max': %" PRId32 ", 'sparsity': {'$numberLong': '%" PRId64 "'}}",
327
+ indexMin,
328
+ indexMax,
329
+ sparsity);
327
330
 
328
- ASSERT_OK_STATUS(mc_RangeOpts_parse(&range_opts, range_opts_bson, true /* use_range_v2 */, status), status);
331
+ ASSERT_OK_STATUS(mc_RangeOpts_parse(&range_opts, range_opts_bson, status), status);
329
332
 
330
333
  for (size_t i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) {
331
334
  testcase_t *test = tests + i;
332
335
  TEST_PRINTF("running subtest: %s : %s\n", test->desc, test->in);
333
- ASSERT_OK_STATUS(mc_FLE2RangeFindDriverSpec_parse(&spec, TMP_BSON(test->in), status), status);
336
+ ASSERT_OK_STATUS(mc_FLE2RangeFindDriverSpec_parse(&spec, TMP_BSON_STR(test->in), status), status);
334
337
 
335
338
  // Create the expected document.
336
339
  bson_t *expected;
337
340
  {
338
- expected = TMP_BSON(test->expected);
341
+ expected = TMP_BSON_STR(test->expected);
339
342
 
340
343
  _mongocrypt_buffer_t p1 = {0}, p2 = {0};
341
344
 
@@ -116,8 +116,7 @@ static void _test_getEdgesInt32(_mongocrypt_tester_t *tester) {
116
116
  .max = test->max,
117
117
  .sparsity = test->sparsity,
118
118
  .trimFactor = OPT_I32(test->trimFactor)};
119
- const bool use_range_v2 = true;
120
- mc_edges_t *got = mc_getEdgesInt32(args, status, use_range_v2);
119
+ mc_edges_t *got = mc_getEdgesInt32(args, status);
121
120
  if (test->expectError != NULL) {
122
121
  ASSERT_OR_PRINT_MSG(NULL == got, "expected error, got success");
123
122
  ASSERT_STATUS_CONTAINS(status, test->expectError);
@@ -209,8 +208,7 @@ static void _test_getEdgesInt64(_mongocrypt_tester_t *tester) {
209
208
  .max = test->max,
210
209
  .sparsity = test->sparsity,
211
210
  .trimFactor = OPT_I32(test->trimFactor)};
212
- const bool use_range_v2 = true;
213
- mc_edges_t *got = mc_getEdgesInt64(args, status, use_range_v2);
211
+ mc_edges_t *got = mc_getEdgesInt64(args, status);
214
212
  if (test->expectError != NULL) {
215
213
  ASSERT_OR_PRINT_MSG(NULL == got, "expected error, got success");
216
214
  ASSERT_STATUS_CONTAINS(status, test->expectError);
@@ -270,8 +268,7 @@ static void _test_getEdgesDouble(_mongocrypt_tester_t *tester) {
270
268
  mc_getEdgesDouble_args_t args = {.value = test->value,
271
269
  .sparsity = test->sparsity,
272
270
  .trimFactor = OPT_I32(trimFactor)};
273
- const bool use_range_v2 = true;
274
- mc_edges_t *got = mc_getEdgesDouble(args, status, use_range_v2);
271
+ mc_edges_t *got = mc_getEdgesDouble(args, status);
275
272
 
276
273
  if (test->expectError != NULL) {
277
274
  if (NULL != got) {
@@ -308,7 +305,7 @@ static void _test_getEdgesDouble(_mongocrypt_tester_t *tester) {
308
305
  }
309
306
  }
310
307
 
311
- #if MONGOCRYPT_HAVE_DECIMAL128_SUPPORT
308
+ #if MONGOCRYPT_HAVE_DECIMAL128_SUPPORT()
312
309
  #define MAX_DEC128_EDGES 129
313
310
 
314
311
  typedef struct {
@@ -338,8 +335,7 @@ static void _test_getEdgesDecimal128(_mongocrypt_tester_t *tester) {
338
335
  // .max = test->max,
339
336
  .sparsity = (size_t)test->sparsity,
340
337
  .trimFactor = OPT_I32(trimFactor)};
341
- const bool use_range_v2 = true;
342
- mc_edges_t *got = mc_getEdgesDecimal128(args, status, use_range_v2);
338
+ mc_edges_t *got = mc_getEdgesDecimal128(args, status);
343
339
 
344
340
  if (test->expectError != NULL) {
345
341
  if (NULL != got) {
@@ -492,7 +488,7 @@ void _mongocrypt_tester_install_range_edge_generation(_mongocrypt_tester_t *test
492
488
  INSTALL_TEST(_test_getEdgesInt32);
493
489
  INSTALL_TEST(_test_getEdgesInt64);
494
490
  INSTALL_TEST(_test_getEdgesDouble);
495
- #if MONGOCRYPT_HAVE_DECIMAL128_SUPPORT
491
+ #if MONGOCRYPT_HAVE_DECIMAL128_SUPPORT()
496
492
  INSTALL_TEST(_test_getEdgesDecimal128);
497
493
  #endif
498
494
  INSTALL_TEST(_test_count_leading_zeros);