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
@@ -25,7 +25,7 @@
25
25
  * A non-owning forward-only cursor api to read a buffer.
26
26
  *
27
27
  * Tracks length of buffer and current position of buffer. parser_name is
28
- * typically __FUNCTION__ to provide useful error messages automatically.
28
+ * typically __func__ to provide useful error messages automatically.
29
29
  *
30
30
  * All numbers are read as little endian.
31
31
  *
@@ -37,7 +37,7 @@
37
37
  * mongocrypt_status_t *status
38
38
  *
39
39
  * mc_reader_t reader;
40
- * mc_reader_init_from_buffer (&reader, buf, __FUNCTION__);
40
+ * mc_reader_init_from_buffer (&reader, buf, __func__);
41
41
  *
42
42
  * _mongocrypt_buffer_t in;
43
43
  * if (!mc_reader_read_uuid_buffer (&reader, &in, status)) {
@@ -21,7 +21,8 @@
21
21
  #define CHECK_AND_RETURN(x) \
22
22
  if (!(x)) { \
23
23
  return false; \
24
- }
24
+ } else \
25
+ ((void)0)
25
26
 
26
27
  #define CHECK_REMAINING_BUFFER_AND_RET(read_size) \
27
28
  if ((reader->pos + (read_size)) > reader->len) { \
@@ -31,7 +32,8 @@
31
32
  reader->pos + (read_size), \
32
33
  reader->len); \
33
34
  return false; \
34
- }
35
+ } else \
36
+ ((void)0)
35
37
 
36
38
  void mc_reader_init(mc_reader_t *reader, const uint8_t *ptr, uint64_t len, const char *parser_name) {
37
39
  BSON_ASSERT_PARAM(reader);
@@ -34,9 +34,6 @@ mc_schema_broker_t *mc_schema_broker_new(void);
34
34
 
35
35
  void mc_schema_broker_destroy(mc_schema_broker_t *sb);
36
36
 
37
- // mc_schema_broker_use_rangev2 enables rangev2 behavior. TODO(MONGOCRYPT-711) remove once rangev1 code is removed.
38
- void mc_schema_broker_use_rangev2(mc_schema_broker_t *sb);
39
-
40
37
  // mc_schema_broker_request requests a schema for a collection. Ignores duplicates.
41
38
  // Returns error if two requests have different databases (not-yet supported).
42
39
  bool mc_schema_broker_request(mc_schema_broker_t *sb, const char *db, const char *coll, mongocrypt_status_t *status);
@@ -50,18 +50,12 @@ struct mc_schema_broker_t {
50
50
  char *db; // Database shared by all schemas.
51
51
  mc_schema_entry_t *ll;
52
52
  size_t ll_len;
53
- bool use_range_v2;
54
53
  };
55
54
 
56
55
  mc_schema_broker_t *mc_schema_broker_new(void) {
57
56
  return bson_malloc0(sizeof(mc_schema_broker_t));
58
57
  }
59
58
 
60
- void mc_schema_broker_use_rangev2(mc_schema_broker_t *sb) {
61
- BSON_ASSERT_PARAM(sb);
62
- sb->use_range_v2 = true;
63
- }
64
-
65
59
  bool mc_schema_broker_request(mc_schema_broker_t *sb, const char *db, const char *coll, mongocrypt_status_t *status) {
66
60
  BSON_ASSERT_PARAM(sb);
67
61
  BSON_ASSERT_PARAM(db);
@@ -208,7 +202,6 @@ static inline bool mc_schema_entry_satisfy_from_collinfo(mc_schema_entry_t *se,
208
202
  const bson_t *collinfo,
209
203
  const char *coll,
210
204
  const char *db,
211
- bool use_range_v2,
212
205
  mongocrypt_status_t *status) {
213
206
  BSON_ASSERT_PARAM(se);
214
207
  BSON_ASSERT_PARAM(collinfo);
@@ -255,7 +248,7 @@ static inline bool mc_schema_entry_satisfy_from_collinfo(mc_schema_entry_t *se,
255
248
  return false;
256
249
  }
257
250
 
258
- if (!mc_EncryptedFieldConfig_parse(&se->encryptedFields.efc, &se->encryptedFields.bson, status, use_range_v2)) {
251
+ if (!mc_EncryptedFieldConfig_parse(&se->encryptedFields.efc, &se->encryptedFields.bson, status)) {
259
252
  return false;
260
253
  }
261
254
  se->encryptedFields.set = true;
@@ -351,7 +344,7 @@ bool mc_schema_broker_satisfy_from_collinfo(mc_schema_broker_t *sb,
351
344
  }
352
345
  }
353
346
 
354
- if (!mc_schema_entry_satisfy_from_collinfo(se, collinfo, coll, sb->db, sb->use_range_v2, status)) {
347
+ if (!mc_schema_entry_satisfy_from_collinfo(se, collinfo, coll, sb->db, status)) {
355
348
  return false;
356
349
  }
357
350
 
@@ -426,10 +419,7 @@ bool mc_schema_broker_satisfy_from_encryptedFieldsMap(mc_schema_broker_t *sb,
426
419
  goto loop_fail;
427
420
  }
428
421
 
429
- if (!mc_EncryptedFieldConfig_parse(&it->encryptedFields.efc,
430
- &it->encryptedFields.bson,
431
- status,
432
- sb->use_range_v2)) {
422
+ if (!mc_EncryptedFieldConfig_parse(&it->encryptedFields.efc, &it->encryptedFields.bson, status)) {
433
423
  goto loop_fail;
434
424
  }
435
425
 
@@ -473,7 +463,7 @@ bool mc_schema_broker_satisfy_from_cache(mc_schema_broker_t *sb,
473
463
  goto loop_skip;
474
464
  }
475
465
 
476
- if (!mc_schema_entry_satisfy_from_collinfo(it, collinfo, sb->db, it->coll, sb->use_range_v2, status)) {
466
+ if (!mc_schema_entry_satisfy_from_collinfo(it, collinfo, sb->db, it->coll, status)) {
477
467
  goto loop_fail;
478
468
  }
479
469
 
@@ -92,4 +92,4 @@ void mc_substring_set_iter_init(mc_substring_set_iter_t *it, mc_substring_set_t
92
92
  // true otherwise.
93
93
  bool mc_substring_set_iter_next(mc_substring_set_iter_t *it, const char **str, uint32_t *byte_len, uint32_t *count);
94
94
 
95
- #endif
95
+ #endif
@@ -166,8 +166,8 @@ static void mc_substring_set_node_destroy(mc_substring_set_node_t *node) {
166
166
  }
167
167
 
168
168
  // FNV-1a hash function
169
- const uint32_t FNV1APRIME = 16777619;
170
- const uint32_t FNV1ABASIS = 2166136261;
169
+ static const uint32_t FNV1APRIME = 16777619;
170
+ static const uint32_t FNV1ABASIS = 2166136261;
171
171
 
172
172
  static uint32_t fnv1a(const uint8_t *data, uint32_t len) {
173
173
  BSON_ASSERT_PARAM(data);
@@ -301,4 +301,4 @@ bool mc_substring_set_iter_next(mc_substring_set_iter_t *it, const char **str, u
301
301
  }
302
302
  it->cur_node = (void *)cur->next;
303
303
  return true;
304
- }
304
+ }
@@ -42,4 +42,11 @@ mc_str_encode_sets_t *mc_text_search_str_encode(const mc_FLE2TextSearchInsertSpe
42
42
 
43
43
  void mc_str_encode_sets_destroy(mc_str_encode_sets_t *sets);
44
44
 
45
- #endif /* MONGOCRYPT_TEXT_SEARCH_STR_ENCODE_PRIVATE_H */
45
+ // Applies case/diacritic folding to the string value in spec (if applicable), and returns
46
+ // the resulting string as a BSON string element in *out. Returns false and an error if the string
47
+ // is not valid UTF-8 or is unsuitable per the query parameters in the spec.
48
+ bool mc_text_search_str_query(const mc_FLE2TextSearchInsertSpec_t *spec,
49
+ _mongocrypt_buffer_t *out,
50
+ mongocrypt_status_t *status);
51
+
52
+ #endif /* MONGOCRYPT_TEXT_SEARCH_STR_ENCODE_PRIVATE_H */
@@ -14,9 +14,11 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
+ #include "mc-fle2-encryption-placeholder-private.h"
17
18
  #include "mc-str-encode-string-sets-private.h"
18
19
  #include "mc-text-search-str-encode-private.h"
19
20
  #include "mongocrypt-buffer-private.h"
21
+ #include "mongocrypt-crypto-private.h"
20
22
  #include "mongocrypt.h"
21
23
  #include "unicode/fold.h"
22
24
  #include <bson/bson.h>
@@ -181,7 +183,7 @@ mc_str_encode_sets_t *mc_text_search_str_encode(const mc_FLE2TextSearchInsertSpe
181
183
  mongocrypt_status_t *status) {
182
184
  BSON_ASSERT_PARAM(spec);
183
185
  if (spec->len > MAX_ENCODE_BYTE_LEN) {
184
- CLIENT_ERR("StrEncode: String passed in was too long: String was %u bytes, but max is %u bytes",
186
+ CLIENT_ERR("StrEncode: String passed in was too long: String was %" PRIu32 " bytes, but max is %d bytes",
185
187
  spec->len,
186
188
  MAX_ENCODE_BYTE_LEN);
187
189
  return NULL;
@@ -245,4 +247,78 @@ void mc_str_encode_sets_destroy(mc_str_encode_sets_t *sets) {
245
247
  mc_affix_set_destroy(sets->prefix_set);
246
248
  mc_substring_set_destroy(sets->substring_set);
247
249
  bson_free(sets);
248
- }
250
+ }
251
+
252
+ bool mc_text_search_str_query(const mc_FLE2TextSearchInsertSpec_t *spec,
253
+ _mongocrypt_buffer_t *out,
254
+ mongocrypt_status_t *status) {
255
+ BSON_ASSERT_PARAM(spec);
256
+ BSON_ASSERT_PARAM(out);
257
+
258
+ if (spec->len > MAX_ENCODE_BYTE_LEN) {
259
+ CLIENT_ERR("StrQuery: String passed in was too long: String was %" PRIu32 " bytes, but max is %d bytes",
260
+ spec->len,
261
+ MAX_ENCODE_BYTE_LEN);
262
+ return false;
263
+ }
264
+
265
+ _mongocrypt_buffer_init(out);
266
+ if (!bson_utf8_validate(spec->v, spec->len, false /* allow_null */)) {
267
+ CLIENT_ERR("StrQuery: String passed in was not valid UTF-8");
268
+ return false;
269
+ }
270
+
271
+ uint32_t folded_codepoint_len = 0;
272
+
273
+ if (spec->casef || spec->diacf) {
274
+ char *folded_str;
275
+ size_t folded_str_bytes_len;
276
+ if (!unicode_fold(spec->v,
277
+ spec->len,
278
+ (spec->casef * kUnicodeFoldToLower) | (spec->diacf * kUnicodeFoldRemoveDiacritics),
279
+ &folded_str,
280
+ &folded_str_bytes_len,
281
+ status)) {
282
+ return false;
283
+ }
284
+ _mongocrypt_buffer_copy_from_string_as_bson_value(out, folded_str, (int)folded_str_bytes_len);
285
+ folded_codepoint_len = mc_get_utf8_codepoint_length(folded_str, (uint32_t)folded_str_bytes_len);
286
+ bson_free(folded_str);
287
+ } else {
288
+ _mongocrypt_buffer_copy_from_string_as_bson_value(out, spec->v, (int)spec->len);
289
+ folded_codepoint_len = mc_get_utf8_codepoint_length(spec->v, spec->len);
290
+ }
291
+
292
+ if (spec->substr.set || spec->suffix.set || spec->prefix.set) {
293
+ uint32_t min = 0, max = 0;
294
+ if (spec->substr.set) {
295
+ min = spec->substr.value.lb;
296
+ max = spec->substr.value.ub;
297
+ } else if (spec->suffix.set) {
298
+ min = spec->suffix.value.lb;
299
+ max = spec->suffix.value.ub;
300
+ } else {
301
+ min = spec->prefix.value.lb;
302
+ max = spec->prefix.value.ub;
303
+ }
304
+ if (folded_codepoint_len == 0) {
305
+ CLIENT_ERR("StrQuery: string value cannot be empty for substring, suffix, or prefix queries");
306
+ return false;
307
+ }
308
+ if (folded_codepoint_len > max) {
309
+ CLIENT_ERR("StrQuery: string value was longer than the maximum query length "
310
+ "for this field after folding -- folded codepoint len: %u, max query len: %u",
311
+ folded_codepoint_len,
312
+ max);
313
+ return false;
314
+ }
315
+ if (folded_codepoint_len < min) {
316
+ CLIENT_ERR("StrQuery: string value was shorter than the minimum query length "
317
+ "for this field after folding -- folded codepoint len: %u, min query len: %u",
318
+ folded_codepoint_len,
319
+ min);
320
+ return false;
321
+ }
322
+ }
323
+ return true;
324
+ }
@@ -197,38 +197,56 @@ DECL_TOKEN_TYPE(mc_ServerTextSuffixToken,
197
197
  DECL_TOKEN_TYPE(mc_ServerTextPrefixToken,
198
198
  const mc_ServerTokenDerivationLevel1Token_t *serverTokenDerivationLevel1Token);
199
199
 
200
- DECL_TOKEN_TYPE(mc_EDCTextExactDerivedFromDataTokenAndContentionFactorToken,
200
+ DECL_TOKEN_TYPE(mc_EDCTextExactDerivedFromDataToken,
201
201
  const mc_EDCTextExactToken_t *edcTextExactToken,
202
- const _mongocrypt_buffer_t *v,
202
+ const _mongocrypt_buffer_t *v);
203
+ DECL_TOKEN_TYPE(mc_EDCTextSubstringDerivedFromDataToken,
204
+ const mc_EDCTextSubstringToken_t *edcTextSubstringToken,
205
+ const _mongocrypt_buffer_t *v);
206
+ DECL_TOKEN_TYPE(mc_EDCTextSuffixDerivedFromDataToken,
207
+ const mc_EDCTextSuffixToken_t *edcTextSuffixToken,
208
+ const _mongocrypt_buffer_t *v);
209
+ DECL_TOKEN_TYPE(mc_EDCTextPrefixDerivedFromDataToken,
210
+ const mc_EDCTextPrefixToken_t *edcTextPrefixToken,
211
+ const _mongocrypt_buffer_t *v);
212
+
213
+ DECL_TOKEN_TYPE(mc_EDCTextExactDerivedFromDataTokenAndContentionFactorToken,
214
+ const mc_EDCTextExactDerivedFromDataToken_t *edcTextExactToken,
203
215
  uint64_t u);
204
216
  DECL_TOKEN_TYPE(mc_EDCTextSubstringDerivedFromDataTokenAndContentionFactorToken,
205
- const mc_EDCTextSubstringToken_t *edcTextSubstringToken,
206
- const _mongocrypt_buffer_t *v,
217
+ const mc_EDCTextSubstringDerivedFromDataToken_t *edcTextSubstringToken,
207
218
  uint64_t u);
208
219
  DECL_TOKEN_TYPE(mc_EDCTextSuffixDerivedFromDataTokenAndContentionFactorToken,
209
- const mc_EDCTextSuffixToken_t *edcTextSuffixToken,
210
- const _mongocrypt_buffer_t *v,
220
+ const mc_EDCTextSuffixDerivedFromDataToken_t *edcTextSuffixToken,
211
221
  uint64_t u);
212
222
  DECL_TOKEN_TYPE(mc_EDCTextPrefixDerivedFromDataTokenAndContentionFactorToken,
213
- const mc_EDCTextPrefixToken_t *edcTextPrefixToken,
214
- const _mongocrypt_buffer_t *v,
223
+ const mc_EDCTextPrefixDerivedFromDataToken_t *edcTextPrefixToken,
215
224
  uint64_t u);
216
225
 
217
- DECL_TOKEN_TYPE(mc_ESCTextExactDerivedFromDataTokenAndContentionFactorToken,
226
+ DECL_TOKEN_TYPE(mc_ESCTextExactDerivedFromDataToken,
218
227
  const mc_ESCTextExactToken_t *escTextExactToken,
219
- const _mongocrypt_buffer_t *v,
228
+ const _mongocrypt_buffer_t *v);
229
+ DECL_TOKEN_TYPE(mc_ESCTextSubstringDerivedFromDataToken,
230
+ const mc_ESCTextSubstringToken_t *escTextSubstringToken,
231
+ const _mongocrypt_buffer_t *v);
232
+ DECL_TOKEN_TYPE(mc_ESCTextSuffixDerivedFromDataToken,
233
+ const mc_ESCTextSuffixToken_t *escTextSuffixToken,
234
+ const _mongocrypt_buffer_t *v);
235
+ DECL_TOKEN_TYPE(mc_ESCTextPrefixDerivedFromDataToken,
236
+ const mc_ESCTextPrefixToken_t *escTextPrefixToken,
237
+ const _mongocrypt_buffer_t *v);
238
+
239
+ DECL_TOKEN_TYPE(mc_ESCTextExactDerivedFromDataTokenAndContentionFactorToken,
240
+ const mc_ESCTextExactDerivedFromDataToken_t *escTextExactToken,
220
241
  uint64_t u);
221
242
  DECL_TOKEN_TYPE(mc_ESCTextSubstringDerivedFromDataTokenAndContentionFactorToken,
222
- const mc_ESCTextSubstringToken_t *escTextSubstringToken,
223
- const _mongocrypt_buffer_t *v,
243
+ const mc_ESCTextSubstringDerivedFromDataToken_t *escTextSubstringToken,
224
244
  uint64_t u);
225
245
  DECL_TOKEN_TYPE(mc_ESCTextSuffixDerivedFromDataTokenAndContentionFactorToken,
226
- const mc_ESCTextSuffixToken_t *escTextSuffixToken,
227
- const _mongocrypt_buffer_t *v,
246
+ const mc_ESCTextSuffixDerivedFromDataToken_t *escTextSuffixToken,
228
247
  uint64_t u);
229
248
  DECL_TOKEN_TYPE(mc_ESCTextPrefixDerivedFromDataTokenAndContentionFactorToken,
230
- const mc_ESCTextPrefixToken_t *escTextPrefixToken,
231
- const _mongocrypt_buffer_t *v,
249
+ const mc_ESCTextPrefixDerivedFromDataToken_t *escTextPrefixToken,
232
250
  uint64_t u);
233
251
 
234
252
  DECL_TOKEN_TYPE(mc_ServerTextExactDerivedFromDataToken,
@@ -168,7 +168,7 @@ IMPL_TOKEN_NEW_CONST(mc_ServerZerosEncryptionToken, mc_ServerDerivedFromDataToke
168
168
 
169
169
  // d = 17 bytes of 0, AnchorPaddingTokenRoot = HMAC(ESCToken, d)
170
170
  #define ANCHOR_PADDING_TOKEN_D_LENGTH 17
171
- const uint8_t mc_AnchorPaddingTokenDValue[ANCHOR_PADDING_TOKEN_D_LENGTH] =
171
+ static const uint8_t mc_AnchorPaddingTokenDValue[ANCHOR_PADDING_TOKEN_D_LENGTH] =
172
172
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
173
173
 
174
174
  DEF_TOKEN_TYPE(mc_AnchorPaddingTokenRoot, const mc_ESCToken_t *ESCToken) {
@@ -233,97 +233,89 @@ IMPL_TOKEN_NEW_CONST(mc_ServerTextPrefixToken,
233
233
  mc_ServerTokenDerivationLevel1Token_get(serverTokenDerivationLevel1Token),
234
234
  TEXT_PREFIX_ID)
235
235
 
236
- #define IMPL_TOKEN_NEW_FROM_DATA_AND_CONTENTION(Name, Key, BufferArg, UintArg) \
237
- { \
238
- BSON_CONCAT(Name, _t) *t = bson_malloc(sizeof(BSON_CONCAT(Name, _t))); \
239
- _mongocrypt_buffer_t tmp; \
240
- _mongocrypt_buffer_init(&tmp); \
241
- _mongocrypt_buffer_resize(&tmp, MONGOCRYPT_HMAC_SHA256_LEN); \
242
- _mongocrypt_buffer_init(&t->data); \
243
- _mongocrypt_buffer_resize(&t->data, MONGOCRYPT_HMAC_SHA256_LEN); \
244
- if (!_mongocrypt_hmac_sha_256(crypto, Key, BufferArg, &tmp, status)) { \
245
- BSON_CONCAT(Name, _destroy)(t); \
246
- _mongocrypt_buffer_cleanup(&tmp); \
247
- return NULL; \
248
- } \
249
- _mongocrypt_buffer_t uint_arg; \
250
- _mongocrypt_buffer_copy_from_uint64_le(&uint_arg, UintArg); \
251
- if (!_mongocrypt_hmac_sha_256(crypto, &tmp, &uint_arg, &t->data, status)) { \
252
- BSON_CONCAT(Name, _destroy)(t); \
253
- _mongocrypt_buffer_cleanup(&tmp); \
254
- _mongocrypt_buffer_cleanup(&uint_arg); \
255
- return NULL; \
256
- } \
257
- _mongocrypt_buffer_cleanup(&tmp); \
258
- _mongocrypt_buffer_cleanup(&uint_arg); \
259
- return t; \
260
- }
236
+ DEF_TOKEN_TYPE(mc_EDCTextExactDerivedFromDataToken,
237
+ const mc_EDCTextExactToken_t *edcTextExactToken,
238
+ const _mongocrypt_buffer_t *v)
239
+ IMPL_TOKEN_NEW(mc_EDCTextExactDerivedFromDataToken, mc_EDCTextExactToken_get(edcTextExactToken), v)
240
+ DEF_TOKEN_TYPE(mc_EDCTextSubstringDerivedFromDataToken,
241
+ const mc_EDCTextSubstringToken_t *edcTextSubstringToken,
242
+ const _mongocrypt_buffer_t *v)
243
+ IMPL_TOKEN_NEW(mc_EDCTextSubstringDerivedFromDataToken, mc_EDCTextSubstringToken_get(edcTextSubstringToken), v)
244
+ DEF_TOKEN_TYPE(mc_EDCTextSuffixDerivedFromDataToken,
245
+ const mc_EDCTextSuffixToken_t *edcTextSuffixToken,
246
+ const _mongocrypt_buffer_t *v)
247
+ IMPL_TOKEN_NEW(mc_EDCTextSuffixDerivedFromDataToken, mc_EDCTextSuffixToken_get(edcTextSuffixToken), v)
248
+ DEF_TOKEN_TYPE(mc_EDCTextPrefixDerivedFromDataToken,
249
+ const mc_EDCTextPrefixToken_t *edcTextPrefixToken,
250
+ const _mongocrypt_buffer_t *v)
251
+ IMPL_TOKEN_NEW(mc_EDCTextPrefixDerivedFromDataToken, mc_EDCTextPrefixToken_get(edcTextPrefixToken), v)
261
252
 
262
253
  DEF_TOKEN_TYPE(mc_EDCTextExactDerivedFromDataTokenAndContentionFactorToken,
263
- const mc_EDCTextExactToken_t *edcTextExactToken,
264
- const _mongocrypt_buffer_t *v,
254
+ const mc_EDCTextExactDerivedFromDataToken_t *edcTextExactToken,
265
255
  uint64_t u)
266
- IMPL_TOKEN_NEW_FROM_DATA_AND_CONTENTION(mc_EDCTextExactDerivedFromDataTokenAndContentionFactorToken,
267
- mc_EDCTextExactToken_get(edcTextExactToken),
268
- v,
269
- u)
256
+ IMPL_TOKEN_NEW_CONST(mc_EDCTextExactDerivedFromDataTokenAndContentionFactorToken,
257
+ mc_EDCTextExactDerivedFromDataToken_get(edcTextExactToken),
258
+ u)
270
259
  DEF_TOKEN_TYPE(mc_EDCTextSubstringDerivedFromDataTokenAndContentionFactorToken,
271
- const mc_EDCTextSubstringToken_t *edcTextSubstringToken,
272
- const _mongocrypt_buffer_t *v,
260
+ const mc_EDCTextSubstringDerivedFromDataToken_t *edcTextSubstringToken,
273
261
  uint64_t u)
274
- IMPL_TOKEN_NEW_FROM_DATA_AND_CONTENTION(mc_EDCTextSubstringDerivedFromDataTokenAndContentionFactorToken,
275
- mc_EDCTextSubstringToken_get(edcTextSubstringToken),
276
- v,
277
- u)
262
+ IMPL_TOKEN_NEW_CONST(mc_EDCTextSubstringDerivedFromDataTokenAndContentionFactorToken,
263
+ mc_EDCTextSubstringDerivedFromDataToken_get(edcTextSubstringToken),
264
+ u)
278
265
  DEF_TOKEN_TYPE(mc_EDCTextSuffixDerivedFromDataTokenAndContentionFactorToken,
279
- const mc_EDCTextSuffixToken_t *edcTextSuffixToken,
280
- const _mongocrypt_buffer_t *v,
266
+ const mc_EDCTextSuffixDerivedFromDataToken_t *edcTextSuffixToken,
281
267
  uint64_t u)
282
- IMPL_TOKEN_NEW_FROM_DATA_AND_CONTENTION(mc_EDCTextSuffixDerivedFromDataTokenAndContentionFactorToken,
283
- mc_EDCTextSuffixToken_get(edcTextSuffixToken),
284
- v,
285
- u)
268
+ IMPL_TOKEN_NEW_CONST(mc_EDCTextSuffixDerivedFromDataTokenAndContentionFactorToken,
269
+ mc_EDCTextSuffixDerivedFromDataToken_get(edcTextSuffixToken),
270
+ u)
286
271
  DEF_TOKEN_TYPE(mc_EDCTextPrefixDerivedFromDataTokenAndContentionFactorToken,
287
- const mc_EDCTextPrefixToken_t *edcTextPrefixToken,
288
- const _mongocrypt_buffer_t *v,
272
+ const mc_EDCTextPrefixDerivedFromDataToken_t *edcTextPrefixToken,
289
273
  uint64_t u)
290
- IMPL_TOKEN_NEW_FROM_DATA_AND_CONTENTION(mc_EDCTextPrefixDerivedFromDataTokenAndContentionFactorToken,
291
- mc_EDCTextPrefixToken_get(edcTextPrefixToken),
292
- v,
293
- u)
274
+ IMPL_TOKEN_NEW_CONST(mc_EDCTextPrefixDerivedFromDataTokenAndContentionFactorToken,
275
+ mc_EDCTextPrefixDerivedFromDataToken_get(edcTextPrefixToken),
276
+ u)
294
277
 
295
- DEF_TOKEN_TYPE(mc_ESCTextExactDerivedFromDataTokenAndContentionFactorToken,
278
+ DEF_TOKEN_TYPE(mc_ESCTextExactDerivedFromDataToken,
296
279
  const mc_ESCTextExactToken_t *escTextExactToken,
297
- const _mongocrypt_buffer_t *v,
280
+ const _mongocrypt_buffer_t *v)
281
+ IMPL_TOKEN_NEW(mc_ESCTextExactDerivedFromDataToken, mc_ESCTextExactToken_get(escTextExactToken), v)
282
+ DEF_TOKEN_TYPE(mc_ESCTextSubstringDerivedFromDataToken,
283
+ const mc_ESCTextSubstringToken_t *escTextSubstringToken,
284
+ const _mongocrypt_buffer_t *v)
285
+ IMPL_TOKEN_NEW(mc_ESCTextSubstringDerivedFromDataToken, mc_ESCTextSubstringToken_get(escTextSubstringToken), v)
286
+ DEF_TOKEN_TYPE(mc_ESCTextSuffixDerivedFromDataToken,
287
+ const mc_ESCTextSuffixToken_t *escTextSuffixToken,
288
+ const _mongocrypt_buffer_t *v)
289
+ IMPL_TOKEN_NEW(mc_ESCTextSuffixDerivedFromDataToken, mc_ESCTextSuffixToken_get(escTextSuffixToken), v)
290
+ DEF_TOKEN_TYPE(mc_ESCTextPrefixDerivedFromDataToken,
291
+ const mc_ESCTextPrefixToken_t *escTextPrefixToken,
292
+ const _mongocrypt_buffer_t *v)
293
+ IMPL_TOKEN_NEW(mc_ESCTextPrefixDerivedFromDataToken, mc_ESCTextPrefixToken_get(escTextPrefixToken), v)
294
+
295
+ DEF_TOKEN_TYPE(mc_ESCTextExactDerivedFromDataTokenAndContentionFactorToken,
296
+ const mc_ESCTextExactDerivedFromDataToken_t *escTextExactToken,
298
297
  uint64_t u)
299
- IMPL_TOKEN_NEW_FROM_DATA_AND_CONTENTION(mc_ESCTextExactDerivedFromDataTokenAndContentionFactorToken,
300
- mc_ESCTextExactToken_get(escTextExactToken),
301
- v,
302
- u)
298
+ IMPL_TOKEN_NEW_CONST(mc_ESCTextExactDerivedFromDataTokenAndContentionFactorToken,
299
+ mc_ESCTextExactDerivedFromDataToken_get(escTextExactToken),
300
+ u)
303
301
  DEF_TOKEN_TYPE(mc_ESCTextSubstringDerivedFromDataTokenAndContentionFactorToken,
304
- const mc_ESCTextSubstringToken_t *escTextSubstringToken,
305
- const _mongocrypt_buffer_t *v,
302
+ const mc_ESCTextSubstringDerivedFromDataToken_t *escTextSubstringToken,
306
303
  uint64_t u)
307
- IMPL_TOKEN_NEW_FROM_DATA_AND_CONTENTION(mc_ESCTextSubstringDerivedFromDataTokenAndContentionFactorToken,
308
- mc_ESCTextSubstringToken_get(escTextSubstringToken),
309
- v,
310
- u)
304
+ IMPL_TOKEN_NEW_CONST(mc_ESCTextSubstringDerivedFromDataTokenAndContentionFactorToken,
305
+ mc_ESCTextSubstringDerivedFromDataToken_get(escTextSubstringToken),
306
+ u)
311
307
  DEF_TOKEN_TYPE(mc_ESCTextSuffixDerivedFromDataTokenAndContentionFactorToken,
312
- const mc_ESCTextSuffixToken_t *escTextSuffixToken,
313
- const _mongocrypt_buffer_t *v,
308
+ const mc_ESCTextSuffixDerivedFromDataToken_t *escTextSuffixToken,
314
309
  uint64_t u)
315
- IMPL_TOKEN_NEW_FROM_DATA_AND_CONTENTION(mc_ESCTextSuffixDerivedFromDataTokenAndContentionFactorToken,
316
- mc_ESCTextSuffixToken_get(escTextSuffixToken),
317
- v,
318
- u)
310
+ IMPL_TOKEN_NEW_CONST(mc_ESCTextSuffixDerivedFromDataTokenAndContentionFactorToken,
311
+ mc_ESCTextSuffixDerivedFromDataToken_get(escTextSuffixToken),
312
+ u)
319
313
  DEF_TOKEN_TYPE(mc_ESCTextPrefixDerivedFromDataTokenAndContentionFactorToken,
320
- const mc_ESCTextPrefixToken_t *escTextPrefixToken,
321
- const _mongocrypt_buffer_t *v,
314
+ const mc_ESCTextPrefixDerivedFromDataToken_t *escTextPrefixToken,
322
315
  uint64_t u)
323
- IMPL_TOKEN_NEW_FROM_DATA_AND_CONTENTION(mc_ESCTextPrefixDerivedFromDataTokenAndContentionFactorToken,
324
- mc_ESCTextPrefixToken_get(escTextPrefixToken),
325
- v,
326
- u)
316
+ IMPL_TOKEN_NEW_CONST(mc_ESCTextPrefixDerivedFromDataTokenAndContentionFactorToken,
317
+ mc_ESCTextPrefixDerivedFromDataToken_get(escTextPrefixToken),
318
+ u)
327
319
 
328
320
  DEF_TOKEN_TYPE(mc_ServerTextExactDerivedFromDataToken,
329
321
  const mc_ServerTextExactToken_t *serverTextExactToken,
@@ -25,7 +25,7 @@
25
25
  * A non-owning forward-only cursor api to write to a buffer.
26
26
  *
27
27
  * Tracks length of buffer and current position of buffer. parser_name is
28
- * typically __FUNCTION__ to provide useful error messages automatically.
28
+ * typically __func__ to provide useful error messages automatically.
29
29
  *
30
30
  * All numbers are written as little endian.
31
31
  */
@@ -21,7 +21,8 @@
21
21
  #define CHECK_AND_RETURN(x) \
22
22
  if (!(x)) { \
23
23
  return false; \
24
- }
24
+ } else \
25
+ ((void)0)
25
26
 
26
27
  #define CHECK_REMAINING_BUFFER_AND_RET(write_size) \
27
28
  if ((write_size) > writer->len - writer->pos) { \
@@ -30,7 +31,8 @@
30
31
  (writer->len - writer->pos), \
31
32
  (uint64_t)(write_size)); \
32
33
  return false; \
33
- }
34
+ } else \
35
+ ((void)0)
34
36
 
35
37
  void mc_writer_init(mc_writer_t *writer, uint8_t *ptr, uint64_t len, const char *parser_name) {
36
38
  BSON_ASSERT_PARAM(writer);
@@ -51,4 +51,4 @@ static inline mstr merror_system_error_string(int errn) {
51
51
  #endif
52
52
  }
53
53
 
54
- #endif // MLIB_ERROR_PRIVATE_H
54
+ #endif // MLIB_ERROR_PRIVATE_H
@@ -9,6 +9,12 @@
9
9
  #include <stdlib.h>
10
10
  #include <string.h>
11
11
 
12
+ // Deliberately using old-style casts for C and C++ compatibility.
13
+ #if defined(__cplusplus) && defined(__clang__)
14
+ _Pragma("clang diagnostic push");
15
+ _Pragma("clang diagnostic ignored \"-Wold-style-cast\"");
16
+ #endif
17
+
12
18
  MLIB_C_LINKAGE_BEGIN
13
19
 
14
20
  /**
@@ -496,7 +502,7 @@ static mlib_constexpr_fn mlib_int128_divmod_result mlib_int128_divmod(mlib_int12
496
502
  u[2] |= (uint32_t)(numer.r.lo >> (64 - d));
497
503
  u[4] |= (uint32_t)(numer.r.hi >> (64 - d));
498
504
  v[2] |= (uint32_t)(denom.r.lo >> (64 - d));
499
- };
505
+ }
500
506
 
501
507
  uint32_t q[2] = {0};
502
508
  if (has_three) {
@@ -644,4 +650,9 @@ static mlib_constexpr_fn mlib_int128_charbuf mlib_int128_format(mlib_int128 i) {
644
650
 
645
651
  MLIB_C_LINKAGE_END
646
652
 
653
+ // Deliberately using old-style casts for C and C++ compatibility.
654
+ #if defined(__cplusplus) && defined(__clang__)
655
+ _Pragma("clang diagnostic pop");
656
+ #endif
657
+
647
658
  #endif // MLIB_INT128_H_INCLUDED
@@ -10,6 +10,11 @@
10
10
  #include <thread>
11
11
  #include <vector>
12
12
 
13
+ // Deliberately using old-style casts for C and C++ compatibility.
14
+ #if defined(__clang__)
15
+ _Pragma("clang diagnostic ignored \"-Wold-style-cast\"");
16
+ #endif
17
+
13
18
  #if (defined(__GNUC__) && __GNUC__ < 7 && !defined(__clang__)) || (defined(_MSC_VER) && _MSC_VER < 1920)
14
19
  // Old GCC and old MSVC have partially-broken constexpr that prevents us from
15
20
  // properly using static_assert with from_string()
@@ -60,7 +60,7 @@ static inline char mpath_preferred_sep(mpath_format f) {
60
60
  * @return mstr A new string which must be freed with mstr_free()
61
61
  */
62
62
  static inline mstr mpath_current_path(void) {
63
- #if _WIN32
63
+ #if defined(_WIN32)
64
64
  while (1) {
65
65
  DWORD len = GetCurrentDirectoryW(0, NULL);
66
66
  wchar_t *wstr = calloc(sizeof(wchar_t), len);
@@ -76,12 +76,12 @@ static inline mstr mpath_current_path(void) {
76
76
  }
77
77
  #else
78
78
  mstr_mut mut = mstr_new(8096);
79
- char *p = getcwd(mut.data, mut.len);
79
+ char *p = getcwd(mut.raw.data, mut.raw.len);
80
80
  if (p == NULL) {
81
81
  mstr_free(mut.mstr);
82
82
  return MSTR_NULL;
83
83
  }
84
- mstr ret = mstr_copy_cstr(mut.data);
84
+ mstr ret = mstr_copy_cstr(mut.raw.data);
85
85
  mstr_free(mut.mstr);
86
86
  return ret;
87
87
  #endif
@@ -167,7 +167,7 @@ static inline mstr mpath_join(mstr_view base, mstr_view suffix, mpath_format f)
167
167
  // We must insert a path separator between the two strings
168
168
  assert(base.len <= SIZE_MAX - suffix.len - 1u);
169
169
  mstr_mut r = mstr_new(base.len + suffix.len + 1);
170
- char *p = r.data;
170
+ char *p = r.raw.data;
171
171
  memcpy(p, base.data, base.len);
172
172
  p += base.len;
173
173
  *p++ = mpath_preferred_sep(f);
@@ -255,7 +255,7 @@ static inline mstr_view mpath_relative_path(mstr_view path, mpath_format f) {
255
255
  static inline mstr mpath_to_format(mpath_format from, mstr_view path, mpath_format to) {
256
256
  mstr_mut ret = mstr_new(path.len);
257
257
  const char *p = path.data;
258
- char *out = ret.data;
258
+ char *out = ret.raw.data;
259
259
  const char *stop = path.data + path.len;
260
260
  for (; p != stop; ++p, ++out) {
261
261
  if (mpath_is_sep(*p, from)) {