libmongocrypt-helper 1.11.0.0.1001 → 1.13.2.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 (598) hide show
  1. checksums.yaml +4 -4
  2. data/ext/libmongocrypt/libmongocrypt/CHANGELOG.md +27 -1
  3. data/ext/libmongocrypt/libmongocrypt/CMakeLists.txt +13 -2
  4. data/ext/libmongocrypt/libmongocrypt/CODEOWNERS +1 -7
  5. data/ext/libmongocrypt/libmongocrypt/CONTRIBUTING.md +14 -0
  6. data/ext/libmongocrypt/libmongocrypt/Earthfile +49 -50
  7. data/ext/libmongocrypt/libmongocrypt/README.md +39 -23
  8. data/ext/libmongocrypt/libmongocrypt/bindings/cs/README.md +4 -67
  9. data/ext/libmongocrypt/libmongocrypt/bindings/python/CHANGELOG.rst +14 -1
  10. data/ext/libmongocrypt/libmongocrypt/bindings/python/README.rst +1 -1
  11. data/ext/libmongocrypt/libmongocrypt/bindings/python/libmongocrypt-version.txt +1 -1
  12. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/asynchronous/state_machine.py +1 -1
  13. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/binding.py +39 -7
  14. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/mongocrypt.py +32 -0
  15. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/version.py +1 -1
  16. data/ext/libmongocrypt/libmongocrypt/bindings/python/pyproject.toml +1 -0
  17. data/ext/libmongocrypt/libmongocrypt/bindings/python/release.sh +1 -1
  18. data/ext/libmongocrypt/libmongocrypt/bindings/python/sbom.json +10 -9
  19. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/compact/success/encrypted-field-config-map.json +0 -1
  20. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/encrypted-field-config-map.json +0 -2
  21. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/test_mongocrypt.py +13 -12
  22. data/ext/libmongocrypt/libmongocrypt/cmake/FetchMongoC.cmake +4 -2
  23. data/ext/libmongocrypt/libmongocrypt/cmake/ImportBSON.cmake +1 -1
  24. data/ext/libmongocrypt/libmongocrypt/doc/releasing.md +37 -40
  25. data/ext/libmongocrypt/libmongocrypt/etc/cyclonedx.sbom.json +10 -9
  26. data/ext/libmongocrypt/libmongocrypt/etc/format.sh +0 -2
  27. data/ext/libmongocrypt/libmongocrypt/etc/libbson-remove-GCC-diagnostic-in-functions.patch +158 -0
  28. data/ext/libmongocrypt/libmongocrypt/etc/libbson-remove-GCC-diagnostic-pragma.patch +3 -3
  29. data/ext/libmongocrypt/libmongocrypt/etc/purls.txt +1 -1
  30. data/ext/libmongocrypt/libmongocrypt/integrating.md +51 -13
  31. data/ext/libmongocrypt/libmongocrypt/kms-message/README.md +1 -1
  32. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_crypto_windows.c +2 -2
  33. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_message/kms_response_parser.h +3 -0
  34. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_message.c +1 -1
  35. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_message_private.h +2 -2
  36. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_request.c +3 -3
  37. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_response_parser.c +8 -0
  38. data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kmip_reader_writer.c +5 -5
  39. data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_assert.h +25 -8
  40. data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_azure_online.c +2 -2
  41. data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_gcp_online.c +3 -3
  42. data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_request.c +12 -10
  43. data/ext/libmongocrypt/libmongocrypt/src/mc-cmp-private.h +137 -0
  44. data/ext/libmongocrypt/libmongocrypt/src/mc-efc-private.h +5 -0
  45. data/ext/libmongocrypt/libmongocrypt/src/mc-efc.c +35 -1
  46. data/ext/libmongocrypt/libmongocrypt/src/mc-fle-blob-subtype-private.h +5 -2
  47. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-encryption-placeholder-private.h +99 -0
  48. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-encryption-placeholder.c +226 -2
  49. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-equality-payload-v2.c +0 -1
  50. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-equality-payload.c +0 -1
  51. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-range-payload-private-v2.h +5 -0
  52. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-insert-update-payload-private-v2.h +39 -0
  53. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-insert-update-payload-v2.c +165 -1
  54. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-insert-update-payload.c +0 -1
  55. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-iev-private-v2.h +183 -60
  56. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-iev-v2.c +498 -115
  57. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-rfds-private.h +10 -0
  58. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-tag-and-encrypted-metadata-block-private.h +49 -0
  59. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-tag-and-encrypted-metadata-block.c +98 -0
  60. data/ext/libmongocrypt/libmongocrypt/src/mc-range-edge-generation.c +3 -2
  61. data/ext/libmongocrypt/libmongocrypt/src/mc-range-encoding.c +2 -1
  62. data/ext/libmongocrypt/libmongocrypt/src/mc-range-mincover-generator.template.h +2 -2
  63. data/ext/libmongocrypt/libmongocrypt/src/mc-range-mincover.c +1 -0
  64. data/ext/libmongocrypt/libmongocrypt/src/mc-rangeopts-private.h +6 -1
  65. data/ext/libmongocrypt/libmongocrypt/src/mc-rangeopts.c +2 -1
  66. data/ext/libmongocrypt/libmongocrypt/src/mc-schema-broker-private.h +126 -0
  67. data/ext/libmongocrypt/libmongocrypt/src/mc-schema-broker.c +1075 -0
  68. data/ext/libmongocrypt/libmongocrypt/src/mc-str-encode-string-sets-private.h +95 -0
  69. data/ext/libmongocrypt/libmongocrypt/src/mc-str-encode-string-sets.c +304 -0
  70. data/ext/libmongocrypt/libmongocrypt/src/mc-text-search-str-encode-private.h +45 -0
  71. data/ext/libmongocrypt/libmongocrypt/src/mc-text-search-str-encode.c +248 -0
  72. data/ext/libmongocrypt/libmongocrypt/src/mc-tokens-private.h +112 -2
  73. data/ext/libmongocrypt/libmongocrypt/src/mc-tokens.c +166 -2
  74. data/ext/libmongocrypt/libmongocrypt/src/mlib/windows-lean.h +2 -0
  75. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-buffer-private.h +11 -0
  76. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-buffer.c +36 -3
  77. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-cache-collinfo.c +1 -1
  78. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-cache-key.c +1 -1
  79. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-cache-private.h +2 -2
  80. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-cache.c +1 -1
  81. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ciphertext.c +1 -1
  82. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-datakey.c +2 -1
  83. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-decrypt.c +8 -4
  84. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-encrypt.c +429 -858
  85. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-private.h +55 -19
  86. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx.c +13 -10
  87. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-key-broker.c +15 -0
  88. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-key-private.h +9 -0
  89. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-key.c +6 -2
  90. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-kms-ctx-private.h +6 -0
  91. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-kms-ctx.c +174 -0
  92. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-log.c +0 -1
  93. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-marking-private.h +4 -0
  94. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-marking.c +518 -524
  95. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-opts-private.h +0 -4
  96. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-opts.c +1 -1
  97. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-private.h +8 -12
  98. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-traverse-util.c +1 -1
  99. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-util.c +3 -1
  100. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt.c +25 -9
  101. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt.h +65 -6
  102. data/ext/libmongocrypt/libmongocrypt/src/os_posix/os_dll.c +3 -1
  103. data/ext/libmongocrypt/libmongocrypt/src/unicode/case-fold-map.c +1434 -0
  104. data/ext/libmongocrypt/libmongocrypt/src/unicode/diacritic-fold-map.c +2884 -0
  105. data/ext/libmongocrypt/libmongocrypt/src/unicode/fold.c +139 -0
  106. data/ext/libmongocrypt/libmongocrypt/src/unicode/fold.h +58 -0
  107. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/unencrypted/payload.json +2 -2
  108. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/missing-key-id/collinfo.json +1 -0
  109. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/no-fields/collinfo.json +1 -0
  110. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/success/collinfo.json +1 -0
  111. data/ext/libmongocrypt/libmongocrypt/test/data/compact/anchor-pad/collinfo.json +1 -1
  112. data/ext/libmongocrypt/libmongocrypt/test/data/compact/anchor-pad/encrypted-payload-range-v2.json +20 -21
  113. data/ext/libmongocrypt/libmongocrypt/test/data/compact/missing-key-id/collinfo.json +2 -2
  114. data/ext/libmongocrypt/libmongocrypt/test/data/compact/no-fields/collinfo.json +1 -1
  115. data/ext/libmongocrypt/libmongocrypt/test/data/compact/no-range/collinfo.json +1 -1
  116. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/collinfo.json +1 -1
  117. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/encrypted-field-config-map.json +0 -1
  118. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/encrypted-payload-range-v2.json +20 -21
  119. data/ext/libmongocrypt/libmongocrypt/test/data/dollardb/omitted/cmd-to-mongocryptd.json +1 -2
  120. data/ext/libmongocrypt/libmongocrypt/test/data/dollardb/omitted/collinfo.json +2 -2
  121. data/ext/libmongocrypt/libmongocrypt/test/data/dollardb/omitted/encrypted-payload.json +2 -3
  122. data/ext/libmongocrypt/libmongocrypt/test/data/dollardb/omitted/mongocryptd-reply.json +1 -2
  123. data/ext/libmongocrypt/libmongocrypt/test/data/dollardb/preserved/cmd-to-mongocryptd.json +1 -2
  124. data/ext/libmongocrypt/libmongocrypt/test/data/dollardb/preserved/collinfo.json +2 -2
  125. data/ext/libmongocrypt/libmongocrypt/test/data/dollardb/preserved/encrypted-payload.json +2 -3
  126. data/ext/libmongocrypt/libmongocrypt/test/data/dollardb/preserved/mongocryptd-reply.json +1 -2
  127. data/ext/libmongocrypt/libmongocrypt/test/data/dollardb/preserved_empty/cmd-to-mongocryptd.json +1 -2
  128. data/ext/libmongocrypt/libmongocrypt/test/data/dollardb/preserved_empty/collinfo.json +2 -2
  129. data/ext/libmongocrypt/libmongocrypt/test/data/dollardb/preserved_empty/mongocryptd-reply.json +1 -2
  130. data/ext/libmongocrypt/libmongocrypt/test/data/dollardb/preserved_fle1/collinfo.json +2 -1
  131. data/ext/libmongocrypt/libmongocrypt/test/data/efc/efc-extraField.json +0 -1
  132. data/ext/libmongocrypt/libmongocrypt/test/data/efc/efc-missingKeyId.json +0 -1
  133. data/ext/libmongocrypt/libmongocrypt/test/data/efc/efc-oneField-badVersionSet.json +23 -0
  134. data/ext/libmongocrypt/libmongocrypt/test/data/efc/efc-oneField-goodVersionSet.json +23 -0
  135. data/ext/libmongocrypt/libmongocrypt/test/data/efc/efc-oneField.json +0 -1
  136. data/ext/libmongocrypt/libmongocrypt/test/data/efc/efc-textSearchFields-badVersionSet.json +48 -0
  137. data/ext/libmongocrypt/libmongocrypt/test/data/efc/efc-textSearchFields-goodVersionSet.json +48 -0
  138. data/ext/libmongocrypt/libmongocrypt/test/data/efc/efc-textSearchFields.json +47 -0
  139. data/ext/libmongocrypt/libmongocrypt/test/data/efc/efc-twoFields.json +0 -1
  140. data/ext/libmongocrypt/libmongocrypt/test/data/encrypted-field-config-map.json +1 -3
  141. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE1DeterministicEncryptedValue.json +8 -0
  142. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE1EncryptionPlaceholder.json +8 -0
  143. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE1RandomEncryptedValue.json +8 -0
  144. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2EncryptionPlaceholder.json +8 -0
  145. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2EqualityIndexedValueV2.json +8 -0
  146. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2FindEqualityPayloadV2.json +8 -0
  147. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2IndexedEqualityEncryptedValue.json +8 -0
  148. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2IndexedEqualityEncryptedValueV2.json +8 -0
  149. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2IndexedRangeEncryptedValue.json +8 -0
  150. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2IndexedRangeEncryptedValueV2.json +8 -0
  151. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2InsertUpdatePayload-with-edges-V2.json +8 -0
  152. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2InsertUpdatePayload-with-edges.json +8 -0
  153. data/ext/libmongocrypt/libmongocrypt/test/data/{fle2-explicit/insert-indexed.json → explicit-decrypt/FLE2InsertUpdatePayload.json} +1 -1
  154. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2InsertUpdatePayloadV2.json +8 -0
  155. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2RangeIndexedValueV2.json +8 -0
  156. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2UnindexedEncryptedValue.json +8 -0
  157. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2UnindexedEncryptedValueV2.json +8 -0
  158. data/ext/libmongocrypt/libmongocrypt/test/data/find-with-encryptionInformation.json +0 -1
  159. data/ext/libmongocrypt/libmongocrypt/test/data/fle1-explain/with-csfle/collinfo.json +2 -1
  160. data/ext/libmongocrypt/libmongocrypt/test/data/fle1-explain/with-mongocryptd/collinfo.json +2 -1
  161. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-bad-str-encode-version/bad-collinfo.json +26 -0
  162. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-bad-str-encode-version/bad-create-cmd-mongocryptd-reply.json +51 -0
  163. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-bad-str-encode-version/bad-create-cmd-to-mongocryptd.json +45 -0
  164. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-bad-str-encode-version/bad-create-cmd.json +18 -0
  165. data/ext/libmongocrypt/libmongocrypt/test/data/{fle2-find-range/int32/encrypted-field-map.json → fle2-bad-str-encode-version/bad-encrypted-field-config-map.json} +7 -12
  166. data/ext/libmongocrypt/libmongocrypt/test/data/{fle2-insert → fle2-bad-str-encode-version}/encrypted-payload.json +4 -4
  167. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create/cmd-to-mongocryptd.json +1 -2
  168. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create/encrypted-field-config-map.json +1 -2
  169. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create-encrypted-collection/cmd-to-mongocryptd.json +44 -0
  170. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create-encrypted-collection/cmd.json +17 -0
  171. data/ext/libmongocrypt/libmongocrypt/test/data/{fle2-find-equality/encrypted-field-map.json → fle2-create-encrypted-collection/encrypted-field-config-map.json} +9 -8
  172. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create-encrypted-collection/encrypted-payload.json +17 -0
  173. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create-encrypted-collection/mongocryptd-reply.json +50 -0
  174. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create-encrypted-collection-encrypted-fields-unset-str-encode-version/cmd-to-mongocryptd.json +45 -0
  175. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create-encrypted-collection-encrypted-fields-unset-str-encode-version/mongocryptd-reply.json +51 -0
  176. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create-encrypted-collection-with-str-encode-version/cmd-to-mongocryptd.json +46 -0
  177. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create-encrypted-collection-with-str-encode-version/cmd.json +18 -0
  178. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create-encrypted-collection-with-str-encode-version/encrypted-field-config-map.json +25 -0
  179. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create-encrypted-collection-with-str-encode-version/encrypted-payload.json +18 -0
  180. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create-encrypted-collection-with-str-encode-version/mongocryptd-reply.json +52 -0
  181. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-delete/empty/collinfo.json +1 -1
  182. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-delete/empty/encrypted-field-config-map.json +0 -1
  183. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-delete/empty/encrypted-payload-v2.json +57 -59
  184. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-delete/empty/mongocryptd-reply.json +63 -64
  185. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-delete/success/collinfo.json +1 -1
  186. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-delete/success/encrypted-field-config-map.json +0 -1
  187. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-delete/success/encrypted-payload-v2.json +64 -66
  188. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-delete/success/mongocryptd-reply.json +69 -70
  189. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explain/with-csfle/collinfo.json +1 -1
  190. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explain/with-csfle/encrypted-payload.json +1 -2
  191. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explain/with-mongocryptd/cmd-to-mongocryptd.json +1 -2
  192. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explain/with-mongocryptd/collinfo.json +2 -2
  193. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explain/with-mongocryptd/encrypted-payload.json +2 -3
  194. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explain/with-mongocryptd/mongocryptd-reply.json +1 -2
  195. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-explicit/cmd-to-mongocryptd.json +0 -1
  196. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-explicit/cmd-to-mongod.json +0 -1
  197. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-explicit/reply-from-mongocryptd.json +0 -1
  198. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int32/encrypted-field-map.json +0 -1
  199. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-text-search/cmd.json +9 -0
  200. data/ext/libmongocrypt/libmongocrypt/test/data/{fle2-find-range/double → fle2-insert-text-search}/encrypted-field-map.json +10 -9
  201. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-text-search/encrypted-payload.json +47 -0
  202. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-text-search/mongocryptd-reply.json +55 -0
  203. data/ext/libmongocrypt/libmongocrypt/test/data/{fle2-find-range/date → fle2-insert-text-search-with-str-encode-version}/encrypted-field-map.json +12 -10
  204. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-text-search-with-str-encode-version/encrypted-payload.json +47 -0
  205. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-text-search-with-str-encode-version/mongocryptd-reply.json +55 -0
  206. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-v2-with-str-encode-version/cmd.json +9 -0
  207. data/ext/libmongocrypt/libmongocrypt/test/data/{fle2-insert → fle2-insert-v2-with-str-encode-version}/encrypted-field-map.json +2 -2
  208. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-v2-with-str-encode-version/encrypted-payload.json +40 -0
  209. data/ext/libmongocrypt/libmongocrypt/test/data/{fle2-insert → fle2-insert-v2-with-str-encode-version}/mongocryptd-reply.json +2 -2
  210. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-text-search-create-encrypted-collection/cmd-to-mongocryptd.json +55 -0
  211. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-text-search-create-encrypted-collection/cmd.json +22 -0
  212. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-text-search-create-encrypted-collection/encrypted-field-config-map.json +29 -0
  213. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-text-search-create-encrypted-collection/encrypted-payload.json +23 -0
  214. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-text-search-create-encrypted-collection/mongocryptd-reply.json +61 -0
  215. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-text-search-create-encrypted-collection-with-str-encode-version/cmd-to-mongocryptd.json +56 -0
  216. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-text-search-create-encrypted-collection-with-str-encode-version/cmd.json +23 -0
  217. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-text-search-create-encrypted-collection-with-str-encode-version/encrypted-field-config-map.json +30 -0
  218. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-text-search-create-encrypted-collection-with-str-encode-version/encrypted-payload.json +23 -0
  219. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-text-search-create-encrypted-collection-with-str-encode-version/mongocryptd-reply.json +62 -0
  220. data/ext/libmongocrypt/libmongocrypt/test/data/iev-v2/FLECrudTest-insertOneRangeV2.json +9 -1
  221. data/ext/libmongocrypt/libmongocrypt/test/data/iev-v2/FLECrudTest-insertOneText.json +20 -0
  222. data/ext/libmongocrypt/libmongocrypt/test/data/iev-v2/FLECrudTest-insertOneTextLarge.json +930 -0
  223. data/ext/libmongocrypt/libmongocrypt/test/data/iev-v2/FLECrudTest-insertOneV2.json +1 -0
  224. data/ext/libmongocrypt/libmongocrypt/test/data/kms-tests.json +4 -4
  225. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle/cmd-to-mongocryptd.json +60 -0
  226. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle/cmd.json +14 -0
  227. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle/collInfo-c1.json +39 -0
  228. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle/collInfo-c2.json +39 -0
  229. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-facet/cmd.json +20 -0
  230. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-mismatch/cmd.json +14 -0
  231. data/ext/libmongocrypt/libmongocrypt/{bindings/cs/MongoDB.Libmongocrypt.Test/test/example/collection-info.json → test/data/lookup/csfle-mismatch/collInfo-c1.json} +12 -10
  232. data/ext/libmongocrypt/libmongocrypt/{bindings/java/mongocrypt/src/test/resources/collection-info.json → test/data/lookup/csfle-mismatch/collInfo-c3.json} +13 -11
  233. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-nested/cmd.json +24 -0
  234. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-only-schemaMap/cmd-to-mongocryptd.json +60 -0
  235. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-only-schemaMap/cmd.json +14 -0
  236. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-only-schemaMap/schemaMap.json +40 -0
  237. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-schemaMap/cmd-to-mongocryptd.json +60 -0
  238. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-schemaMap/cmd.json +14 -0
  239. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-schemaMap/collInfo-c1.json +39 -0
  240. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-schemaMap/schemaMap.json +21 -0
  241. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-self/cmd-to-mongocryptd.json +34 -0
  242. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-self/cmd.json +14 -0
  243. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-self/collInfo-c1.json +39 -0
  244. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-sibling/cmd-to-mongocryptd.json +49 -0
  245. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-sibling/cmd.json +14 -0
  246. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-sibling/collInfo-c1.json +39 -0
  247. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-sibling/collInfo-c2.json +29 -0
  248. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-sibling/reply-from-mongocryptd.json +18 -0
  249. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-unionWith/cmd.json +21 -0
  250. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-view/cmd.json +14 -0
  251. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-view/collInfo-c1.json +39 -0
  252. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-view/collInfo-v1.json +11 -0
  253. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/csfle/cmd-to-mongocryptd.json +65 -0
  254. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/csfle/cmd-to-mongod.json +26 -0
  255. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/csfle/cmd.json +19 -0
  256. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/csfle/collInfo-c1.json +39 -0
  257. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/csfle/collInfo-c2.json +39 -0
  258. data/ext/libmongocrypt/libmongocrypt/{bindings/java/mongocrypt/src/test/resources/keys/ABCDEFAB123498761234123456789012-local-document.json → test/data/lookup/mixed/csfle/csfle/key-doc.json} +4 -4
  259. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/csfle/reply-from-mongocryptd.json +33 -0
  260. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/no-schema/cmd-to-mongocryptd.json +47 -0
  261. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/no-schema/cmd-to-mongod.json +26 -0
  262. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/no-schema/cmd.json +19 -0
  263. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/no-schema/collInfo-c1.json +39 -0
  264. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/no-schema/collInfo-c2.json +17 -0
  265. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/no-schema/key-doc.json +30 -0
  266. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/no-schema/reply-from-mongocryptd.json +33 -0
  267. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/qe/cmd-to-mongocryptd.json +70 -0
  268. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/qe/cmd.json +19 -0
  269. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/qe/collInfo-c1.json +39 -0
  270. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/qe/collInfo-c2.json +42 -0
  271. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/csfle/cmd-to-mongocryptd.json +47 -0
  272. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/csfle/cmd-to-mongod.json +26 -0
  273. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/csfle/cmd.json +19 -0
  274. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/csfle/collInfo-c1.json +17 -0
  275. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/csfle/collInfo-c2.json +39 -0
  276. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/csfle/key-doc.json +30 -0
  277. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/csfle/reply-from-mongocryptd.json +33 -0
  278. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/no-schema/cmd-to-mongocryptd.json +29 -0
  279. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/no-schema/cmd-to-mongod.json +19 -0
  280. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/no-schema/cmd.json +19 -0
  281. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/no-schema/collInfo-c1.json +17 -0
  282. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/no-schema/collInfo-c2.json +17 -0
  283. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/no-schema/reply-from-mongocryptd.json +26 -0
  284. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/qe/cmd-to-mongocryptd.json +53 -0
  285. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/qe/cmd-to-mongod.json +58 -0
  286. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/qe/cmd.json +19 -0
  287. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/qe/collInfo-c1.json +17 -0
  288. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/qe/collInfo-c2.json +42 -0
  289. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/qe/key-doc.json +30 -0
  290. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/qe/reply-from-mongocryptd.json +65 -0
  291. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/csfle/cmd-to-mongocryptd.json +70 -0
  292. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/csfle/cmd.json +19 -0
  293. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/csfle/collInfo-c1.json +42 -0
  294. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/csfle/collInfo-c2.json +39 -0
  295. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/no-schema/cmd-to-mongocryptd.json +53 -0
  296. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/no-schema/cmd-to-mongod.json +56 -0
  297. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/no-schema/cmd.json +19 -0
  298. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/no-schema/collInfo-c1.json +42 -0
  299. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/no-schema/collInfo-c2.json +17 -0
  300. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/no-schema/key-doc.json +30 -0
  301. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/no-schema/reply-from-mongocryptd.json +63 -0
  302. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/qe/cmd-to-mongocryptd.json +66 -0
  303. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/qe/cmd-to-mongod.json +71 -0
  304. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/qe/cmd.json +19 -0
  305. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/qe/collInfo-c1.json +42 -0
  306. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/qe/collInfo-c2.json +42 -0
  307. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/qe/key-doc.json +30 -0
  308. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/qe/reply-from-mongocryptd.json +78 -0
  309. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe/cmd-to-mongocryptd.json +61 -0
  310. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe/cmd-to-mongod.json +14 -0
  311. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe/cmd.json +14 -0
  312. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe/collInfo-c1.json +42 -0
  313. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe/collInfo-c2.json +42 -0
  314. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe/reply-from-mongocryptd.json +68 -0
  315. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-encryptedFieldsMap/cmd-to-mongocryptd.json +66 -0
  316. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-encryptedFieldsMap/cmd-to-mongod.json +71 -0
  317. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-encryptedFieldsMap/cmd.json +19 -0
  318. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-encryptedFieldsMap/collInfo-c1.json +42 -0
  319. data/ext/libmongocrypt/libmongocrypt/test/data/{fle2-insert-unindexed/encrypted-field-map.json → lookup/qe-encryptedFieldsMap/encryptedFieldsMap.json} +6 -7
  320. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-encryptedFieldsMap/key-doc.json +30 -0
  321. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-encryptedFieldsMap/reply-from-mongocryptd.json +78 -0
  322. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-self/cmd-to-mongocryptd.json +46 -0
  323. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-self/cmd-to-mongod.json +53 -0
  324. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-self/cmd.json +19 -0
  325. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-self/collInfo-c1.json +42 -0
  326. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-self/key-doc.json +30 -0
  327. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-self/reply-from-mongocryptd.json +58 -0
  328. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-with-payload/cmd-to-mongocryptd.json +66 -0
  329. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-with-payload/cmd-to-mongod.json +75 -0
  330. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-with-payload/cmd.json +19 -0
  331. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-with-payload/collInfo-c1.json +42 -0
  332. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-with-payload/collInfo-c2.json +42 -0
  333. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-with-payload/key-doc.json +30 -0
  334. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-with-payload/reply-from-mongocryptd.json +78 -0
  335. data/ext/libmongocrypt/libmongocrypt/test/data/{fle2-create/mongocryptd-ismaster.json → mongocryptd-ismaster-17.json} +1 -1
  336. data/ext/libmongocrypt/libmongocrypt/test/data/mongocryptd-ismaster-26.json +12 -0
  337. data/ext/libmongocrypt/libmongocrypt/test/data/multikey/command.json +7 -0
  338. data/ext/libmongocrypt/libmongocrypt/{bindings/java/mongocrypt/src/test/resources/key-document.json → test/data/multikey/key-document-a.json} +18 -19
  339. data/ext/libmongocrypt/libmongocrypt/test/data/multikey/key-document-b.json +37 -0
  340. data/ext/libmongocrypt/libmongocrypt/test/data/multikey/mongocryptd_reply.json +34 -0
  341. data/ext/libmongocrypt/libmongocrypt/test/data/multikey/schema_map.json +35 -0
  342. data/ext/libmongocrypt/libmongocrypt/{bindings/java/mongocrypt/src/test/resources/kms-reply.txt → test/data/rmd/kms-decrypt-reply-429.txt} +1 -1
  343. data/ext/libmongocrypt/libmongocrypt/test/data/schema-broker/collinfo-encryptedFields.json +42 -0
  344. data/ext/libmongocrypt/libmongocrypt/test/data/schema-broker/collinfo-encryptedFields2.json +42 -0
  345. data/ext/libmongocrypt/libmongocrypt/test/data/schema-broker/collinfo-jsonSchema.json +43 -0
  346. data/ext/libmongocrypt/libmongocrypt/test/data/schema-broker/collinfo-noSchema.json +21 -0
  347. data/ext/libmongocrypt/libmongocrypt/test/data/schema-broker/create-with-jsonSchema.json +24 -0
  348. data/ext/libmongocrypt/libmongocrypt/test/data/schema-broker/encryptedFields.json +20 -0
  349. data/ext/libmongocrypt/libmongocrypt/test/data/schema-broker/encryptedFields2.json +20 -0
  350. data/ext/libmongocrypt/libmongocrypt/test/data/schema-broker/encryptedFieldsMap.json +42 -0
  351. data/ext/libmongocrypt/libmongocrypt/test/data/schema-broker/jsonSchema.json +19 -0
  352. data/ext/libmongocrypt/libmongocrypt/test/data/schema-broker/jsonSchema2.json +19 -0
  353. data/ext/libmongocrypt/libmongocrypt/test/data/schema-broker/schemaMap.json +40 -0
  354. data/ext/libmongocrypt/libmongocrypt/test/data/tokens/mc.json +28 -2
  355. data/ext/libmongocrypt/libmongocrypt/test/data/tokens/server.json +28 -2
  356. data/ext/libmongocrypt/libmongocrypt/test/example-state-machine.c +1 -1
  357. data/ext/libmongocrypt/libmongocrypt/test/test-mc-cmp.c +304 -0
  358. data/ext/libmongocrypt/libmongocrypt/test/test-mc-efc.c +70 -0
  359. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-encryption-placeholder.c +468 -0
  360. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-find-equality-payload-v2.c +20 -1
  361. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-payload-iev-v2.c +370 -22
  362. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-payload-iev.c +1 -1
  363. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-payload-iup-v2.c +25 -1
  364. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-payload-iup.c +24 -1
  365. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-payload-uev.c +2 -2
  366. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-rfds.c +2 -2
  367. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-tag-and-encrypted-metadata-block.c +91 -0
  368. data/ext/libmongocrypt/libmongocrypt/test/test-mc-range-edge-generation.c +6 -7
  369. data/ext/libmongocrypt/libmongocrypt/test/test-mc-range-encoding.c +32 -33
  370. data/ext/libmongocrypt/libmongocrypt/test/test-mc-range-mincover.c +68 -75
  371. data/ext/libmongocrypt/libmongocrypt/test/test-mc-rangeopts.c +2 -2
  372. data/ext/libmongocrypt/libmongocrypt/test/test-mc-schema-broker.c +1124 -0
  373. data/ext/libmongocrypt/libmongocrypt/test/test-mc-text-search-str-encode.c +1207 -0
  374. data/ext/libmongocrypt/libmongocrypt/test/test-mc-tokens.c +144 -37
  375. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-assert-match-bson.c +13 -14
  376. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-assert-match-bson.h +2 -2
  377. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-assert.h +21 -4
  378. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-buffer.c +25 -0
  379. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-cache.c +3 -20
  380. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-crypto-hooks.c +57 -46
  381. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-crypto.c +37 -7
  382. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-csfle-lib.c +21 -0
  383. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-decrypt.c +226 -146
  384. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-encrypt.c +1529 -1197
  385. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-rewrap-many-datakey.c +79 -0
  386. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-datakey.c +160 -0
  387. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-kek.c +3 -3
  388. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-key-cache.c +7 -7
  389. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-kms-responses.c +6 -5
  390. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-marking.c +750 -110
  391. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt.c +143 -33
  392. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt.h +39 -4
  393. data/ext/libmongocrypt/libmongocrypt/test/test-unicode-fold.c +97 -0
  394. data/lib/libmongocrypt_helper/version.rb +2 -2
  395. metadata +233 -225
  396. data/ext/libmongocrypt/libmongocrypt/bindings/cs/CMakeLists.txt +0 -17
  397. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Driver.snk +0 -0
  398. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/AssemblyInfo.cs +0 -4
  399. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/Binary.cs +0 -145
  400. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/BinarySafeHandle.cs +0 -60
  401. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/CheckableSafeHandle.cs +0 -46
  402. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/CipherCallbacks.cs +0 -168
  403. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/ContextSafeHandle.cs +0 -48
  404. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/CryptClient.cs +0 -257
  405. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/CryptClientFactory.cs +0 -138
  406. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/CryptContext.cs +0 -214
  407. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/CryptException.cs +0 -37
  408. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/CryptOptions.cs +0 -67
  409. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/HashCallback.cs +0 -59
  410. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/HmacShaCallbacks.cs +0 -96
  411. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/IStatus.cs +0 -26
  412. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/KmsCredentials.cs +0 -53
  413. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/KmsKeyId.cs +0 -91
  414. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/KmsRequest.cs +0 -125
  415. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/KmsRequestCollection.cs +0 -60
  416. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/Library.cs +0 -684
  417. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/LibraryLoader.cs +0 -289
  418. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/LibraryLoadingException.cs +0 -34
  419. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/License.txt +0 -14
  420. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/LogLevel.cs +0 -26
  421. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/MongoCryptSafeHandle.cs +0 -48
  422. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/MongoDB.Libmongocrypt.csproj +0 -107
  423. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/MongoDB.Libmongocrypt.ruleset +0 -85
  424. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/MongoDB.Libmongocrypt.targets +0 -21
  425. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/OperatingSystemHelper.cs +0 -59
  426. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/Package.include.template.csproj +0 -38
  427. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/PinnedBinary.cs +0 -49
  428. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/SecureRandomCallback.cs +0 -51
  429. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/SigningRSAESPKCSCallback.cs +0 -74
  430. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/Status.cs +0 -94
  431. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/StatusSafeHandle.cs +0 -60
  432. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/StyleCop.ruleset +0 -11
  433. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/stylecop.json +0 -8
  434. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Example/MongoDB.Libmongocrypt.Example.csproj +0 -23
  435. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Example/Package.include.template.csproj +0 -11
  436. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Example/Program.cs +0 -442
  437. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test/BasicTests.cs +0 -748
  438. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test/BsonUtil.cs +0 -82
  439. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test/CallbackUtils.cs +0 -37
  440. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test/CipherCallbacksTests.cs +0 -46
  441. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test/HashCallbackTests.cs +0 -37
  442. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test/HmacShaCallbacksTests.cs +0 -37
  443. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test/MongoDB.Libmongocrypt.Test.csproj +0 -37
  444. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test/Package.include.template.csproj +0 -23
  445. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test/SigningRSAESPKCSCallbackTests.cs +0 -64
  446. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test/test/example/command-reply.json +0 -13
  447. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test/test/example/encrypted-command-reply.json +0 -16
  448. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test/test/example/encrypted-command.json +0 -11
  449. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test/test/example/encrypted-value.json +0 -6
  450. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test/test/example/key-document.json +0 -36
  451. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test/test/example/key-filter.json +0 -19
  452. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test/test/example/list-collections-filter.json +0 -3
  453. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test/test/example/mongocryptd-command.json +0 -22
  454. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test/xunit.runner.json +0 -6
  455. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test32/BasicTests.cs +0 -54
  456. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test32/MongoDB.Libmongocrypt.Test32.csproj +0 -44
  457. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test32/Package.include.template.csproj +0 -23
  458. data/ext/libmongocrypt/libmongocrypt/bindings/cs/Scripts/build.cake +0 -215
  459. data/ext/libmongocrypt/libmongocrypt/bindings/cs/Scripts/build.config +0 -3
  460. data/ext/libmongocrypt/libmongocrypt/bindings/cs/Scripts/build.ps1 +0 -275
  461. data/ext/libmongocrypt/libmongocrypt/bindings/cs/Scripts/build.sh +0 -77
  462. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/README.md +0 -36
  463. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/benchmarks/build.gradle.kts +0 -28
  464. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/benchmarks/src/main/java/com/mongodb/crypt/benchmark/BenchmarkRunner.java +0 -217
  465. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/benchmarks/src/main/resources/keyDocument.json +0 -24
  466. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/build.gradle.kts +0 -354
  467. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/gradle/wrapper/gradle-wrapper.jar +0 -0
  468. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/gradle/wrapper/gradle-wrapper.properties +0 -5
  469. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/gradlew +0 -234
  470. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/gradlew.bat +0 -89
  471. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/settings.gradle.kts +0 -1
  472. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/BinaryHolder.java +0 -45
  473. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/CAPI.java +0 -1165
  474. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/CAPIHelper.java +0 -96
  475. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/CipherCallback.java +0 -92
  476. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/DisposableMemory.java +0 -31
  477. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/JULLogger.java +0 -130
  478. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/Logger.java +0 -144
  479. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/Loggers.java +0 -50
  480. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MacCallback.java +0 -60
  481. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MessageDigestCallback.java +0 -55
  482. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoAwsKmsProviderOptions.java +0 -104
  483. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoCrypt.java +0 -100
  484. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoCryptContext.java +0 -137
  485. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoCryptContextImpl.java +0 -164
  486. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoCryptException.java +0 -67
  487. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoCryptImpl.java +0 -423
  488. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoCryptOptions.java +0 -284
  489. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoCrypts.java +0 -38
  490. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoDataKeyOptions.java +0 -125
  491. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoExplicitEncryptOptions.java +0 -227
  492. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoKeyDecryptor.java +0 -76
  493. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoKeyDecryptorImpl.java +0 -105
  494. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoLocalKmsProviderOptions.java +0 -83
  495. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoRewrapManyDataKeyOptions.java +0 -104
  496. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/SLF4JLogger.java +0 -110
  497. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/SecureRandomCallback.java +0 -51
  498. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/SigningRSAESPKCSCallback.java +0 -76
  499. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/package-info.java +0 -18
  500. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/resources/META-INF/native-image/jni-config.json +0 -180
  501. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/resources/META-INF/native-image/reflect-config.json +0 -134
  502. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/java/com/mongodb/crypt/capi/MongoCryptTest.java +0 -389
  503. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/command-reply.json +0 -13
  504. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/command.json +0 -6
  505. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/encrypted-command-reply.json +0 -16
  506. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/encrypted-command.json +0 -11
  507. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/encrypted-value.json +0 -6
  508. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/fle2-find-range-explicit-v2/int32/encrypted-payload.json +0 -26
  509. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/fle2-find-range-explicit-v2/int32/key-filter.json +0 -19
  510. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/fle2-find-range-explicit-v2/int32/rangeopts.json +0 -14
  511. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/fle2-find-range-explicit-v2/int32/value-to-encrypt.json +0 -20
  512. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/json-schema.json +0 -15
  513. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/key-filter-keyAltName.json +0 -14
  514. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/key-filter.json +0 -19
  515. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/list-collections-filter.json +0 -3
  516. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/mongocryptd-command.json +0 -22
  517. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/mongocryptd-reply.json +0 -18
  518. data/ext/libmongocrypt/libmongocrypt/etc/silk-create-asset-group.sh +0 -70
  519. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/jsonSchema/cmd.json +0 -20
  520. data/ext/libmongocrypt/libmongocrypt/test/data/collection-info-no-schema.json +0 -19
  521. data/ext/libmongocrypt/libmongocrypt/test/data/compact/no-range/encrypted-field-config-map.json +0 -47
  522. data/ext/libmongocrypt/libmongocrypt/test/data/fle1-collMod/insert/cmd.json +0 -8
  523. data/ext/libmongocrypt/libmongocrypt/test/data/fle1-collMod/insert/collinfo.json +0 -9
  524. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create/ismaster-to-mongocryptd.json +0 -3
  525. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-delete/empty/encrypted-payload.json +0 -91
  526. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-delete/success/encrypted-payload.json +0 -98
  527. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explicit/find-indexed-contentionFactor1.json +0 -8
  528. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explicit/insert-indexed-contentionFactor1.json +0 -8
  529. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explicit/insert-indexed-same-user-and-index-key.json +0 -8
  530. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-equality/cmd.json +0 -6
  531. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-equality/encrypted-payload.json +0 -41
  532. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-equality/mongocryptd-reply.json +0 -19
  533. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/date/cmd.json +0 -10
  534. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/date/encrypted-payload.json +0 -42
  535. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/date/mongocryptd-reply.json +0 -50
  536. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128/cmd.json +0 -6
  537. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128/encrypted-field-map.json +0 -28
  538. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128/encrypted-payload.json +0 -42
  539. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128/mongocryptd-reply.json +0 -50
  540. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-precision/cmd.json +0 -6
  541. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-precision/encrypted-field-map.json +0 -31
  542. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-precision/encrypted-payload.json +0 -51
  543. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-precision/mongocryptd-reply.json +0 -59
  544. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double/cmd.json +0 -8
  545. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double/encrypted-payload.json +0 -42
  546. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double/mongocryptd-reply.json +0 -50
  547. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double-precision/cmd.json +0 -8
  548. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double-precision/encrypted-field-map.json +0 -31
  549. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double-precision/encrypted-payload.json +0 -45
  550. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double-precision/mongocryptd-reply.json +0 -53
  551. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int32/cmd.json +0 -8
  552. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int32/encrypted-payload.json +0 -42
  553. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int32/mongocryptd-reply.json +0 -50
  554. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int64/cmd.json +0 -8
  555. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int64/encrypted-field-map.json +0 -28
  556. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int64/encrypted-payload.json +0 -42
  557. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int64/mongocryptd-reply.json +0 -50
  558. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range-explicit/double/encrypted-payload.json +0 -26
  559. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range-explicit/double-precision/encrypted-payload.json +0 -26
  560. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range-explicit/int32/encrypted-payload.json +0 -26
  561. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range-explicit/int32-nominmax/encrypted-payload-v2.json +0 -26
  562. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range-explicit/int32-openinterval/encrypted-payload.json +0 -16
  563. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/date/cmd.json +0 -13
  564. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/date/encrypted-field-map.json +0 -28
  565. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/date/encrypted-payload.json +0 -45
  566. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/date/mongocryptd-reply.json +0 -53
  567. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128/cmd.json +0 -9
  568. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128/encrypted-field-map.json +0 -28
  569. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128/encrypted-payload.json +0 -45
  570. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128/mongocryptd-reply.json +0 -53
  571. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-precision/cmd.json +0 -9
  572. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-precision/encrypted-field-map.json +0 -31
  573. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-precision/encrypted-payload.json +0 -54
  574. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-precision/mongocryptd-reply.json +0 -62
  575. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double/cmd.json +0 -11
  576. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double/encrypted-field-map.json +0 -28
  577. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double/encrypted-payload.json +0 -45
  578. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double/mongocryptd-reply.json +0 -53
  579. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double-precision/cmd.json +0 -11
  580. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double-precision/encrypted-field-map.json +0 -31
  581. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double-precision/encrypted-payload.json +0 -48
  582. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double-precision/mongocryptd-reply.json +0 -56
  583. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int32/encrypted-payload.json +0 -45
  584. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int32/mongocryptd-reply.json +0 -53
  585. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int64/cmd.json +0 -11
  586. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int64/encrypted-field-map.json +0 -28
  587. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int64/encrypted-payload.json +0 -45
  588. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int64/mongocryptd-reply.json +0 -53
  589. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/double/encrypted-payload.json +0 -8
  590. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/double-precision/encrypted-payload.json +0 -8
  591. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/int32-nominmax/encrypted-payload-v2.json +0 -8
  592. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/sparsity-2/encrypted-payload.json +0 -8
  593. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-unindexed/cmd.json +0 -9
  594. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-unindexed/encrypted-payload.json +0 -14
  595. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-unindexed/mongocryptd-reply.json +0 -46
  596. data/ext/libmongocrypt/libmongocrypt/test/data/schema.json +0 -19
  597. /data/ext/libmongocrypt/libmongocrypt/test/data/{fle2-explicit/find-indexed.json → explicit-decrypt/FLE2FindEqualityPayload.json} +0 -0
  598. /data/ext/libmongocrypt/libmongocrypt/test/data/{fle2-insert → fle2-insert-text-search-with-str-encode-version}/cmd.json +0 -0
@@ -20,6 +20,7 @@
20
20
  #include "mc-efc-private.h"
21
21
  #include "mc-optional-private.h"
22
22
  #include "mc-rangeopts-private.h"
23
+ #include "mc-schema-broker-private.h"
23
24
  #include "mongocrypt-buffer-private.h"
24
25
  #include "mongocrypt-endpoint-private.h"
25
26
  #include "mongocrypt-key-broker-private.h"
@@ -63,6 +64,7 @@ typedef struct __mongocrypt_ctx_opts_t {
63
64
  _mongocrypt_buffer_t key_material;
64
65
  mongocrypt_encryption_algorithm_t algorithm;
65
66
  _mongocrypt_kek_t kek;
67
+ bool retry_enabled;
66
68
 
67
69
  struct {
68
70
  mongocrypt_index_type_t value;
@@ -87,6 +89,12 @@ typedef struct __mongocrypt_ctx_opts_t {
87
89
  } rangeopts;
88
90
  } _mongocrypt_ctx_opts_t;
89
91
 
92
+ // `_mongocrypt_ctx_opts_t` inherits extended alignment from libbson. To dynamically allocate, use
93
+ // aligned allocation (e.g. BSON_ALIGNED_ALLOC)
94
+ BSON_STATIC_ASSERT2(alignof__mongocrypt_ctx_opts_t,
95
+ BSON_ALIGNOF(_mongocrypt_ctx_opts_t)
96
+ >= BSON_MAX(BSON_ALIGNOF(_mongocrypt_key_alt_name_t), BSON_ALIGNOF(mc_RangeOpts_t)));
97
+
90
98
  /* All derived contexts may override these methods. */
91
99
  typedef struct {
92
100
  const char *(*mongo_db_collinfo)(mongocrypt_ctx_t *ctx);
@@ -152,7 +160,10 @@ typedef struct {
152
160
  char *target_coll;
153
161
 
154
162
  _mongocrypt_buffer_t list_collections_filter;
155
- _mongocrypt_buffer_t schema;
163
+
164
+ // `sb` manages encryption schemas (JSONSchema for CSFLE and encryptedFields for QE).
165
+ mc_schema_broker_t *sb;
166
+
156
167
  /* TODO CDRIVER-3150: audit + rename these buffers.
157
168
  * original_cmd for explicit is {v: <BSON value>}, for auto is the command to
158
169
  * be encrypted.
@@ -170,24 +181,6 @@ typedef struct {
170
181
  _mongocrypt_buffer_t marked_cmd;
171
182
  _mongocrypt_buffer_t encrypted_cmd;
172
183
  _mongocrypt_buffer_t key_id;
173
- bool used_local_schema;
174
- /* collinfo_has_siblings is true if the schema came from a remote JSON
175
- * schema, and there were siblings. */
176
- bool collinfo_has_siblings;
177
- /* encrypted_field_config is set when:
178
- * 1. `target_ns` is present in an encrypted_field_config_map.
179
- * 2. (TODO MONGOCRYPT-414) The collection has encryptedFields in the
180
- * response to listCollections. encrypted_field_config is true if and only if
181
- * encryption is using FLE 2.0.
182
- * 3. The `bulkWrite` command is processed and needs an empty encryptedFields to be processed by query analysis.
183
- * (`bulkWrite` does not support empty JSON schema).
184
- */
185
- _mongocrypt_buffer_t encrypted_field_config;
186
- mc_EncryptedFieldConfig_t efc;
187
- // `used_empty_encryptedFields` is true if the collection has no JSON schema or encryptedFields,
188
- // yet an empty encryptedFields was constructed to support query analysis.
189
- // When true, an empty encryptedFields is sent to query analysis, but not appended to the final command.
190
- bool used_empty_encryptedFields;
191
184
  /* bypass_query_analysis is set to true to skip the
192
185
  * MONGOCRYPT_CTX_NEED_MONGO_MARKINGS state. */
193
186
  bool bypass_query_analysis;
@@ -202,6 +195,11 @@ typedef struct {
202
195
  const char *cmd_name;
203
196
  } _mongocrypt_ctx_encrypt_t;
204
197
 
198
+ // `_mongocrypt_ctx_encrypt_t` inherits extended alignment from libbson. To dynamically allocate, use
199
+ // aligned allocation (e.g. BSON_ALIGNED_ALLOC)
200
+ BSON_STATIC_ASSERT2(alignof__mongocrypt_ctx_encrypt_t,
201
+ BSON_ALIGNOF(_mongocrypt_ctx_encrypt_t) >= BSON_ALIGNOF(mongocrypt_ctx_t));
202
+
205
203
  typedef struct {
206
204
  mongocrypt_ctx_t parent;
207
205
  /* TODO CDRIVER-3150: audit + rename these buffers.
@@ -212,6 +210,11 @@ typedef struct {
212
210
  _mongocrypt_buffer_t decrypted_doc;
213
211
  } _mongocrypt_ctx_decrypt_t;
214
212
 
213
+ // `_mongocrypt_ctx_datakey_t` inherits extended alignment from libbson. To dynamically allocate, use
214
+ // aligned allocation (e.g. BSON_ALIGNED_ALLOC)
215
+ BSON_STATIC_ASSERT2(alignof__mongocrypt_ctx_decrypt_t,
216
+ BSON_ALIGNOF(_mongocrypt_ctx_decrypt_t) >= BSON_ALIGNOF(mongocrypt_ctx_t));
217
+
215
218
  typedef struct {
216
219
  mongocrypt_ctx_t parent;
217
220
  mongocrypt_kms_ctx_t kms;
@@ -225,6 +228,11 @@ typedef struct {
225
228
  _mongocrypt_buffer_t kmip_secretdata;
226
229
  } _mongocrypt_ctx_datakey_t;
227
230
 
231
+ // `_mongocrypt_ctx_datakey_t` inherits extended alignment from libbson. To dynamically allocate, use
232
+ // aligned allocation (e.g. BSON_ALIGNED_ALLOC)
233
+ BSON_STATIC_ASSERT2(alignof__mongocrypt_ctx_datakey_t,
234
+ BSON_ALIGNOF(_mongocrypt_ctx_datakey_t) >= BSON_ALIGNOF(mongocrypt_ctx_t));
235
+
228
236
  typedef struct _mongocrypt_ctx_rmd_datakey_t _mongocrypt_ctx_rmd_datakey_t;
229
237
 
230
238
  struct _mongocrypt_ctx_rmd_datakey_t {
@@ -242,12 +250,40 @@ typedef struct {
242
250
  _mongocrypt_buffer_t results;
243
251
  } _mongocrypt_ctx_rewrap_many_datakey_t;
244
252
 
253
+ // `_mongocrypt_ctx_rewrap_many_datakey_t` inherits extended alignment from libbson. To dynamically allocate, use
254
+ // aligned allocation (e.g. BSON_ALIGNED_ALLOC)
255
+ BSON_STATIC_ASSERT2(alignof__mongocrypt_ctx_rewrap_many_datakey_t,
256
+ BSON_ALIGNOF(_mongocrypt_ctx_rewrap_many_datakey_t) >= BSON_ALIGNOF(mongocrypt_ctx_t));
257
+
245
258
  typedef struct {
246
259
  mongocrypt_ctx_t parent;
247
260
  _mongocrypt_buffer_t result;
248
261
  mc_EncryptedFieldConfig_t efc;
249
262
  } _mongocrypt_ctx_compact_t;
250
263
 
264
+ // `_mongocrypt_ctx_compact_t` inherits extended alignment from libbson. To dynamically allocate, use aligned
265
+ // allocation (e.g. BSON_ALIGNED_ALLOC)
266
+ BSON_STATIC_ASSERT2(alignof__mongocrypt_ctx_compact_t,
267
+ BSON_ALIGNOF(_mongocrypt_ctx_compact_t) >= BSON_ALIGNOF(mongocrypt_ctx_t));
268
+
269
+ #define MONGOCRYPT_CTX_ALLOC_SIZE \
270
+ BSON_MAX(sizeof(_mongocrypt_ctx_encrypt_t), \
271
+ BSON_MAX(sizeof(_mongocrypt_ctx_decrypt_t), \
272
+ BSON_MAX(sizeof(_mongocrypt_ctx_datakey_t), \
273
+ BSON_MAX(sizeof(_mongocrypt_ctx_rewrap_many_datakey_t), \
274
+ sizeof(_mongocrypt_ctx_compact_t)))))
275
+
276
+ #define MONGOCRYPT_CTX_ALLOC_ALIGNMENT \
277
+ BSON_MAX(BSON_ALIGNOF(_mongocrypt_ctx_encrypt_t), \
278
+ BSON_MAX(BSON_ALIGNOF(_mongocrypt_ctx_decrypt_t), \
279
+ BSON_MAX(BSON_ALIGNOF(_mongocrypt_ctx_datakey_t), \
280
+ BSON_MAX(BSON_ALIGNOF(_mongocrypt_ctx_rewrap_many_datakey_t), \
281
+ BSON_ALIGNOF(_mongocrypt_ctx_compact_t)))))
282
+
283
+ // `_mongocrypt_ctx_t` inherits extended alignment from libbson. To dynamically allocate, use
284
+ // aligned allocation (e.g. BSON_ALIGNED_ALLOC)
285
+ BSON_STATIC_ASSERT2(alignof_mongocrypt_ctx_t, BSON_ALIGNOF(mongocrypt_ctx_t) >= MONGOCRYPT_CTX_ALLOC_ALIGNMENT);
286
+
251
287
  /* Used for option validation. True means required. False means prohibited. */
252
288
  typedef enum { OPT_PROHIBITED = 0, OPT_REQUIRED, OPT_OPTIONAL } _mongocrypt_ctx_opt_spec_t;
253
289
 
@@ -282,7 +282,6 @@ bool mongocrypt_ctx_setopt_algorithm(mongocrypt_ctx_t *ctx, const char *algorith
282
282
 
283
283
  mongocrypt_ctx_t *mongocrypt_ctx_new(mongocrypt_t *crypt) {
284
284
  mongocrypt_ctx_t *ctx;
285
- size_t ctx_size;
286
285
 
287
286
  if (!crypt) {
288
287
  return NULL;
@@ -294,19 +293,17 @@ mongocrypt_ctx_t *mongocrypt_ctx_new(mongocrypt_t *crypt) {
294
293
  CLIENT_ERR("cannot create context from uninitialized crypt");
295
294
  return NULL;
296
295
  }
297
- ctx_size = sizeof(_mongocrypt_ctx_encrypt_t);
298
- if (sizeof(_mongocrypt_ctx_decrypt_t) > ctx_size) {
299
- ctx_size = sizeof(_mongocrypt_ctx_decrypt_t);
300
- }
301
- if (sizeof(_mongocrypt_ctx_datakey_t) > ctx_size) {
302
- ctx_size = sizeof(_mongocrypt_ctx_datakey_t);
303
- }
304
- ctx = bson_malloc0(ctx_size);
296
+
297
+ // Allocate with memory and alignment large enough for any possible context type.
298
+ static const size_t ctx_alignment = MONGOCRYPT_CTX_ALLOC_ALIGNMENT;
299
+ static const size_t ctx_size = MONGOCRYPT_CTX_ALLOC_SIZE;
300
+ ctx = bson_aligned_alloc0(ctx_alignment, ctx_size);
305
301
  BSON_ASSERT(ctx);
306
302
 
307
303
  ctx->crypt = crypt;
308
304
  ctx->status = mongocrypt_status_new();
309
305
  ctx->opts.algorithm = MONGOCRYPT_ENCRYPTION_ALGORITHM_NONE;
306
+ ctx->opts.retry_enabled = crypt->retry_enabled;
310
307
  ctx->state = MONGOCRYPT_CTX_DONE;
311
308
  return ctx;
312
309
  }
@@ -513,8 +510,9 @@ mongocrypt_kms_ctx_t *mongocrypt_ctx_next_kms_ctx(mongocrypt_ctx_t *ctx) {
513
510
  return NULL;
514
511
  }
515
512
 
513
+ mongocrypt_kms_ctx_t *ret;
516
514
  switch (ctx->state) {
517
- case MONGOCRYPT_CTX_NEED_KMS: return ctx->vtable.next_kms_ctx(ctx);
515
+ case MONGOCRYPT_CTX_NEED_KMS: ret = ctx->vtable.next_kms_ctx(ctx); break;
518
516
  case MONGOCRYPT_CTX_ERROR: return NULL;
519
517
  case MONGOCRYPT_CTX_DONE:
520
518
  case MONGOCRYPT_CTX_NEED_KMS_CREDENTIALS:
@@ -525,6 +523,11 @@ mongocrypt_kms_ctx_t *mongocrypt_ctx_next_kms_ctx(mongocrypt_ctx_t *ctx) {
525
523
  case MONGOCRYPT_CTX_READY:
526
524
  default: _mongocrypt_ctx_fail_w_msg(ctx, "wrong state"); return NULL;
527
525
  }
526
+
527
+ if (ret) {
528
+ ret->retry_enabled = ctx->opts.retry_enabled;
529
+ }
530
+ return ret;
528
531
  }
529
532
 
530
533
  bool mongocrypt_ctx_provide_kms_providers(mongocrypt_ctx_t *ctx, mongocrypt_binary_t *kms_providers_definition) {
@@ -807,6 +807,13 @@ mongocrypt_kms_ctx_t *_mongocrypt_key_broker_next_kms(_mongocrypt_key_broker_t *
807
807
  // Return the first not-yet-returned auth request.
808
808
  for (size_t i = 0; i < mc_mapof_kmsid_to_authrequest_len(kb->auth_requests); i++) {
809
809
  auth_request_t *ar = mc_mapof_kmsid_to_authrequest_at(kb->auth_requests, i);
810
+
811
+ if (ar->kms.should_retry) {
812
+ ar->kms.should_retry = false;
813
+ ar->returned = true;
814
+ return &ar->kms;
815
+ }
816
+
810
817
  if (ar->returned) {
811
818
  continue;
812
819
  }
@@ -817,6 +824,13 @@ mongocrypt_kms_ctx_t *_mongocrypt_key_broker_next_kms(_mongocrypt_key_broker_t *
817
824
  return NULL;
818
825
  }
819
826
 
827
+ // Check if any requests need retry
828
+ for (key_returned_t *ptr = kb->keys_returned; ptr != NULL; ptr = ptr->next) {
829
+ if (ptr->kms.should_retry) {
830
+ ptr->kms.should_retry = false;
831
+ return &ptr->kms;
832
+ }
833
+ }
820
834
  while (kb->decryptor_iter) {
821
835
  if (!kb->decryptor_iter->decrypted) {
822
836
  key_returned_t *key_returned;
@@ -1148,6 +1162,7 @@ void _mongocrypt_key_broker_add_test_key(_mongocrypt_key_broker_t *kb, const _mo
1148
1162
  key_returned->decrypted = true;
1149
1163
  _mongocrypt_buffer_init(&key_returned->decrypted_key_material);
1150
1164
  _mongocrypt_buffer_resize(&key_returned->decrypted_key_material, MONGOCRYPT_KEY_LEN);
1165
+ // Initialize test key material with all zeros.
1151
1166
  memset(key_returned->decrypted_key_material.data, 0, MONGOCRYPT_KEY_LEN);
1152
1167
  _mongocrypt_key_destroy(key_doc);
1153
1168
  /* Hijack state and move directly to DONE. */
@@ -27,6 +27,11 @@ typedef struct __mongocrypt_key_alt_name_t {
27
27
  bson_value_t value;
28
28
  } _mongocrypt_key_alt_name_t;
29
29
 
30
+ // `_mongocrypt_key_alt_name_t` inherits extended alignment from libbson. To dynamically allocate, use aligned
31
+ // allocation (e.g. BSON_ALIGNED_ALLOC)
32
+ BSON_STATIC_ASSERT2(alignof__mongocrypt_key_alt_name_t,
33
+ BSON_ALIGNOF(_mongocrypt_key_alt_name_t) >= BSON_ALIGNOF(bson_value_t));
34
+
30
35
  typedef struct {
31
36
  bson_t bson; /* original BSON for this key. */
32
37
  _mongocrypt_buffer_t id;
@@ -37,6 +42,10 @@ typedef struct {
37
42
  _mongocrypt_kek_t kek;
38
43
  } _mongocrypt_key_doc_t;
39
44
 
45
+ // `_mongocrypt_key_doc_t` inherits extended alignment from libbson. To dynamically allocate, use aligned allocation
46
+ // (e.g. BSON_ALIGNED_ALLOC)
47
+ BSON_STATIC_ASSERT2(alignof__mongocrypt_key_doc_t, BSON_ALIGNOF(_mongocrypt_key_doc_t) >= BSON_ALIGNOF(bson_t));
48
+
40
49
  _mongocrypt_key_alt_name_t *_mongocrypt_key_alt_name_new(const bson_value_t *value);
41
50
 
42
51
  bool _mongocrypt_key_alt_name_from_iter(const bson_iter_t *iter,
@@ -271,7 +271,10 @@ bool _mongocrypt_key_parse_owned(const bson_t *bson, _mongocrypt_key_doc_t *out,
271
271
  _mongocrypt_key_doc_t *_mongocrypt_key_new(void) {
272
272
  _mongocrypt_key_doc_t *key_doc;
273
273
 
274
- key_doc = (_mongocrypt_key_doc_t *)bson_malloc0(sizeof *key_doc);
274
+ key_doc = BSON_ALIGNED_ALLOC(_mongocrypt_key_doc_t);
275
+ // Use two sets of braces to avoid erroneous missing-braces warning in GCC. Refer:
276
+ // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53119
277
+ *key_doc = (_mongocrypt_key_doc_t){{0}};
275
278
  bson_init(&key_doc->bson);
276
279
 
277
280
  return key_doc;
@@ -389,7 +392,8 @@ _mongocrypt_key_alt_name_t *_mongocrypt_key_alt_name_create(const char *name, ..
389
392
  _mongocrypt_key_alt_name_t *_mongocrypt_key_alt_name_new(const bson_value_t *value) {
390
393
  BSON_ASSERT_PARAM(value);
391
394
 
392
- _mongocrypt_key_alt_name_t *name = bson_malloc0(sizeof(*name));
395
+ _mongocrypt_key_alt_name_t *name = BSON_ALIGNED_ALLOC(_mongocrypt_key_alt_name_t);
396
+ *name = (_mongocrypt_key_alt_name_t){0};
393
397
  BSON_ASSERT(name);
394
398
 
395
399
  bson_value_copy(value, &name->value);
@@ -56,8 +56,14 @@ struct _mongocrypt_kms_ctx_t {
56
56
  char *endpoint;
57
57
  _mongocrypt_log_t *log;
58
58
  char *kmsid;
59
+ int64_t sleep_usec;
60
+ int attempts;
61
+ bool retry_enabled;
62
+ bool should_retry;
59
63
  };
60
64
 
65
+ static const int kms_max_attempts = 3;
66
+
61
67
  bool _mongocrypt_kms_ctx_init_aws_decrypt(mongocrypt_kms_ctx_t *kms,
62
68
  _mongocrypt_opts_kms_providers_t *kms_providers,
63
69
  _mongocrypt_key_doc_t *key,
@@ -20,6 +20,7 @@
20
20
  #include "mongocrypt-crypto-private.h"
21
21
  #include "mongocrypt-ctx-private.h"
22
22
  #include "mongocrypt-endpoint-private.h"
23
+ #include "mongocrypt-kek-private.h"
23
24
  #include "mongocrypt-kms-ctx-private.h"
24
25
  #include "mongocrypt-log-private.h"
25
26
  #include "mongocrypt-opts-private.h"
@@ -27,6 +28,7 @@
27
28
  #include "mongocrypt-status-private.h"
28
29
  #include "mongocrypt-util-private.h"
29
30
  #include "mongocrypt.h"
31
+ #include <bson/bson.h>
30
32
  #include <kms_message/kms_azure_request.h>
31
33
  #include <kms_message/kms_b64.h>
32
34
  #include <kms_message/kms_gcp_request.h>
@@ -142,6 +144,9 @@ _init_common(mongocrypt_kms_ctx_t *kms, _mongocrypt_log_t *log, _kms_request_typ
142
144
  kms->status = mongocrypt_status_new();
143
145
  kms->req_type = kms_type;
144
146
  _mongocrypt_buffer_init(&kms->result);
147
+ kms->sleep_usec = 0;
148
+ kms->attempts = 0;
149
+ kms->should_retry = false;
145
150
  }
146
151
 
147
152
  bool _mongocrypt_kms_ctx_init_aws_decrypt(mongocrypt_kms_ctx_t *kms,
@@ -427,11 +432,21 @@ uint32_t mongocrypt_kms_ctx_bytes_needed(mongocrypt_kms_ctx_t *kms) {
427
432
  if (!mongocrypt_status_ok(kms->status) || !_mongocrypt_buffer_empty(&kms->result)) {
428
433
  return 0;
429
434
  }
435
+ if (kms->should_retry) {
436
+ return 0;
437
+ }
430
438
  want_bytes = kms_response_parser_wants_bytes(kms->parser, DEFAULT_MAX_KMS_BYTE_REQUEST);
431
439
  BSON_ASSERT(want_bytes >= 0);
432
440
  return (uint32_t)want_bytes;
433
441
  }
434
442
 
443
+ int64_t mongocrypt_kms_ctx_usleep(mongocrypt_kms_ctx_t *kms) {
444
+ if (!kms) {
445
+ return 0;
446
+ }
447
+ return kms->sleep_usec;
448
+ }
449
+
435
450
  static void
436
451
  _handle_non200_http_status(int http_status, const char *body, size_t body_len, mongocrypt_status_t *status) {
437
452
  BSON_ASSERT_PARAM(body);
@@ -455,6 +470,56 @@ _handle_non200_http_status(int http_status, const char *body, size_t body_len, m
455
470
  CLIENT_ERR("Error in KMS response. HTTP status=%d. Response body=\n%s", http_status, body);
456
471
  }
457
472
 
473
+ static int64_t backoff_time_usec(int64_t attempts) {
474
+ static bool seeded = false;
475
+ if (!seeded) {
476
+ srand((uint32_t)time(NULL));
477
+ seeded = true;
478
+ }
479
+
480
+ /* Exponential backoff with jitter. */
481
+ const int64_t base = 200000; /* 0.2 seconds */
482
+ const int64_t max = 20000000; /* 20 seconds */
483
+ BSON_ASSERT(attempts > 0);
484
+ int64_t backoff = base * ((int64_t)1 << (attempts - 1));
485
+ if (backoff > max) {
486
+ backoff = max;
487
+ }
488
+
489
+ /* Full jitter: between 1 and current max */
490
+ return (int64_t)((double)rand() / (double)RAND_MAX * (double)backoff) + 1;
491
+ }
492
+
493
+ static bool should_retry_http(int http_status, _kms_request_type_t t) {
494
+ static const int retryable_aws[] = {408, 429, 500, 502, 503, 509};
495
+ static const int retryable_azure[] = {408, 429, 500, 502, 503, 504};
496
+ if (t == MONGOCRYPT_KMS_AWS_ENCRYPT || t == MONGOCRYPT_KMS_AWS_DECRYPT) {
497
+ for (size_t i = 0; i < sizeof(retryable_aws) / sizeof(retryable_aws[0]); i++) {
498
+ if (http_status == retryable_aws[i]) {
499
+ return true;
500
+ }
501
+ }
502
+ } else if (t == MONGOCRYPT_KMS_AZURE_WRAPKEY || t == MONGOCRYPT_KMS_AZURE_UNWRAPKEY
503
+ || t == MONGOCRYPT_KMS_AZURE_OAUTH) {
504
+ for (size_t i = 0; i < sizeof(retryable_azure) / sizeof(retryable_azure[0]); i++) {
505
+ if (http_status == retryable_azure[i]) {
506
+ return true;
507
+ }
508
+ }
509
+ } else if (t == MONGOCRYPT_KMS_GCP_ENCRYPT || t == MONGOCRYPT_KMS_GCP_DECRYPT || t == MONGOCRYPT_KMS_GCP_OAUTH) {
510
+ if (http_status == 408 || http_status == 429 || http_status / 500 == 1) {
511
+ return true;
512
+ }
513
+ }
514
+ return false;
515
+ }
516
+
517
+ static void set_retry(mongocrypt_kms_ctx_t *kms) {
518
+ kms->should_retry = true;
519
+ kms->attempts++;
520
+ kms->sleep_usec = backoff_time_usec(kms->attempts);
521
+ }
522
+
458
523
  /* An AWS KMS context has received full response. Parse out the result or error.
459
524
  */
460
525
  static bool _ctx_done_aws(mongocrypt_kms_ctx_t *kms, const char *json_field) {
@@ -485,6 +550,21 @@ static bool _ctx_done_aws(mongocrypt_kms_ctx_t *kms, const char *json_field) {
485
550
  }
486
551
  body = kms_response_get_body(response, &body_len);
487
552
 
553
+ if (kms->retry_enabled && should_retry_http(http_status, kms->req_type)) {
554
+ if (kms->attempts >= kms_max_attempts) {
555
+ // Wrap error to indicate maximum retries occurred.
556
+ _handle_non200_http_status(http_status, body, body_len, status);
557
+ CLIENT_ERR("KMS request failed after maximum of %d retries: %s",
558
+ kms_max_attempts,
559
+ mongocrypt_status_message(status, NULL));
560
+ goto fail;
561
+ } else {
562
+ ret = true;
563
+ set_retry(kms);
564
+ goto fail;
565
+ }
566
+ }
567
+
488
568
  if (http_status != 200) {
489
569
  _handle_non200_http_status(http_status, body, body_len, status);
490
570
  goto fail;
@@ -566,6 +646,21 @@ static bool _ctx_done_oauth(mongocrypt_kms_ctx_t *kms) {
566
646
  }
567
647
  body = kms_response_get_body(response, &body_len);
568
648
 
649
+ if (kms->retry_enabled && should_retry_http(http_status, kms->req_type)) {
650
+ if (kms->attempts >= kms_max_attempts) {
651
+ // Wrap error to indicate maximum retries occurred.
652
+ _handle_non200_http_status(http_status, body, body_len, status);
653
+ CLIENT_ERR("KMS request failed after maximum of %d retries: %s",
654
+ kms_max_attempts,
655
+ mongocrypt_status_message(status, NULL));
656
+ goto fail;
657
+ } else {
658
+ ret = true;
659
+ set_retry(kms);
660
+ goto fail;
661
+ }
662
+ }
663
+
569
664
  if (body_len == 0) {
570
665
  CLIENT_ERR("Empty KMS response. HTTP status=%d", http_status);
571
666
  goto fail;
@@ -643,6 +738,21 @@ static bool _ctx_done_azure_wrapkey_unwrapkey(mongocrypt_kms_ctx_t *kms) {
643
738
  }
644
739
  body = kms_response_get_body(response, &body_len);
645
740
 
741
+ if (kms->retry_enabled && should_retry_http(http_status, kms->req_type)) {
742
+ if (kms->attempts >= kms_max_attempts) {
743
+ // Wrap error to indicate maximum retries occurred.
744
+ _handle_non200_http_status(http_status, body, body_len, status);
745
+ CLIENT_ERR("KMS request failed after maximum of %d retries: %s",
746
+ kms_max_attempts,
747
+ mongocrypt_status_message(status, NULL));
748
+ goto fail;
749
+ } else {
750
+ ret = true;
751
+ set_retry(kms);
752
+ goto fail;
753
+ }
754
+ }
755
+
646
756
  if (body_len == 0) {
647
757
  CLIENT_ERR("Empty KMS response. HTTP status=%d", http_status);
648
758
  goto fail;
@@ -737,6 +847,21 @@ static bool _ctx_done_gcp(mongocrypt_kms_ctx_t *kms, const char *json_field) {
737
847
  }
738
848
  body = kms_response_get_body(response, &body_len);
739
849
 
850
+ if (kms->retry_enabled && should_retry_http(http_status, kms->req_type)) {
851
+ if (kms->attempts >= kms_max_attempts) {
852
+ // Wrap error to indicate maximum retries occurred.
853
+ _handle_non200_http_status(http_status, body, body_len, status);
854
+ CLIENT_ERR("KMS request failed after maximum of %d retries: %s",
855
+ kms_max_attempts,
856
+ mongocrypt_status_message(status, NULL));
857
+ goto fail;
858
+ } else {
859
+ ret = true;
860
+ set_retry(kms);
861
+ goto fail;
862
+ }
863
+ }
864
+
740
865
  if (http_status != 200) {
741
866
  _handle_non200_http_status(http_status, body, body_len, status);
742
867
  goto fail;
@@ -995,6 +1120,55 @@ done:
995
1120
  return ret;
996
1121
  }
997
1122
 
1123
+ bool mongocrypt_kms_ctx_fail(mongocrypt_kms_ctx_t *kms) {
1124
+ if (!kms) {
1125
+ return false;
1126
+ }
1127
+
1128
+ kms->should_retry = false;
1129
+ mongocrypt_status_t *status = kms->status;
1130
+
1131
+ if (!kms->retry_enabled) {
1132
+ CLIENT_ERR("KMS request failed due to network error");
1133
+ return false;
1134
+ }
1135
+
1136
+ if (kms->attempts >= kms_max_attempts) {
1137
+ CLIENT_ERR("KMS request failed after %d retries due to a network error", kms_max_attempts);
1138
+ return false;
1139
+ }
1140
+
1141
+ // Check if request type is retryable. Some requests are non-idempotent and cannot be safely retried.
1142
+ _kms_request_type_t retryable_types[] = {MONGOCRYPT_KMS_AZURE_OAUTH,
1143
+ MONGOCRYPT_KMS_GCP_OAUTH,
1144
+ MONGOCRYPT_KMS_AWS_ENCRYPT,
1145
+ MONGOCRYPT_KMS_AWS_DECRYPT,
1146
+ MONGOCRYPT_KMS_AZURE_WRAPKEY,
1147
+ MONGOCRYPT_KMS_AZURE_UNWRAPKEY,
1148
+ MONGOCRYPT_KMS_GCP_ENCRYPT,
1149
+ MONGOCRYPT_KMS_GCP_DECRYPT};
1150
+ bool is_retryable = false;
1151
+ for (size_t i = 0; i < sizeof(retryable_types) / sizeof(retryable_types[0]); i++) {
1152
+ if (retryable_types[i] == kms->req_type) {
1153
+ is_retryable = true;
1154
+ break;
1155
+ }
1156
+ }
1157
+ if (!is_retryable) {
1158
+ CLIENT_ERR("KMS request failed due to network error");
1159
+ return false;
1160
+ }
1161
+
1162
+ // Mark KMS context as retryable. Return again in `mongocrypt_ctx_next_kms_ctx`.
1163
+ set_retry(kms);
1164
+
1165
+ // Reset intermediate state of parser.
1166
+ if (kms->parser) {
1167
+ kms_response_parser_reset(kms->parser);
1168
+ }
1169
+ return true;
1170
+ }
1171
+
998
1172
  bool mongocrypt_kms_ctx_feed(mongocrypt_kms_ctx_t *kms, mongocrypt_binary_t *bytes) {
999
1173
  if (!kms) {
1000
1174
  return false;
@@ -37,7 +37,6 @@ void _mongocrypt_log_cleanup(_mongocrypt_log_t *log) {
37
37
  }
38
38
 
39
39
  _mongocrypt_mutex_cleanup(&log->mutex);
40
- memset(log, 0, sizeof(*log));
41
40
  }
42
41
 
43
42
  void _mongocrypt_stdout_log_fn(mongocrypt_log_level_t level, const char *message, uint32_t message_len, void *ctx) {
@@ -45,6 +45,10 @@ typedef struct {
45
45
  };
46
46
  } _mongocrypt_marking_t;
47
47
 
48
+ // `_mongocrypt_marking_t` inherits extended alignment from libbson. To dynamically allocate, use aligned allocation
49
+ // (e.g. BSON_ALIGNED_ALLOC)
50
+ BSON_STATIC_ASSERT2(alignof__mongocrypt_marking_t, BSON_ALIGNOF(_mongocrypt_marking_t) >= BSON_ALIGNOF(bson_iter_t));
51
+
48
52
  void _mongocrypt_marking_init(_mongocrypt_marking_t *marking);
49
53
 
50
54
  void _mongocrypt_marking_cleanup(_mongocrypt_marking_t *marking);