libmongocrypt-helper 1.7.4.0.1002 → 1.11.0.0.1001

Sign up to get free protection for your applications and to get access to all the features.
Files changed (600) hide show
  1. checksums.yaml +4 -4
  2. data/ext/libmongocrypt/libmongocrypt/CHANGELOG.md +40 -5
  3. data/ext/libmongocrypt/libmongocrypt/CMakeLists.txt +29 -24
  4. data/ext/libmongocrypt/libmongocrypt/CODEOWNERS +1 -4
  5. data/ext/libmongocrypt/libmongocrypt/Earthfile +522 -0
  6. data/ext/libmongocrypt/libmongocrypt/README.md +36 -40
  7. data/ext/libmongocrypt/libmongocrypt/bindings/cs/CMakeLists.txt +1 -0
  8. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Driver.snk +0 -0
  9. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/AssemblyInfo.cs +2 -2
  10. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/Binary.cs +16 -2
  11. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/CryptClient.cs +25 -6
  12. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/CryptClientFactory.cs +8 -4
  13. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/Library.cs +35 -3
  14. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/LibraryLoader.cs +81 -44
  15. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/MongoDB.Libmongocrypt.csproj +2 -1
  16. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Example/MongoDB.Libmongocrypt.Example.csproj +1 -1
  17. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test/BasicTests.cs +1 -1
  18. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test/MongoDB.Libmongocrypt.Test.csproj +2 -0
  19. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test32/MongoDB.Libmongocrypt.Test32.csproj +2 -0
  20. data/ext/libmongocrypt/libmongocrypt/bindings/cs/README.md +3 -0
  21. data/ext/libmongocrypt/libmongocrypt/bindings/cs/Scripts/build.cake +22 -26
  22. data/ext/libmongocrypt/libmongocrypt/bindings/cs/Scripts/build.config +3 -0
  23. data/ext/libmongocrypt/libmongocrypt/bindings/cs/Scripts/build.sh +0 -0
  24. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/benchmarks/build.gradle.kts +28 -0
  25. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/benchmarks/src/main/java/com/mongodb/crypt/benchmark/BenchmarkRunner.java +217 -0
  26. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/benchmarks/src/main/resources/keyDocument.json +24 -0
  27. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/build.gradle.kts +22 -7
  28. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/gradle/wrapper/gradle-wrapper.jar +0 -0
  29. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/gradle/wrapper/gradle-wrapper.properties +1 -1
  30. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/gradlew +154 -108
  31. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/gradlew.bat +7 -18
  32. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/settings.gradle.kts +1 -0
  33. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/CAPI.java +41 -6
  34. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/CAPIHelper.java +5 -5
  35. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/CipherCallback.java +27 -1
  36. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoCryptImpl.java +34 -19
  37. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoExplicitEncryptOptions.java +6 -4
  38. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/resources/META-INF/native-image/jni-config.json +180 -0
  39. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/resources/META-INF/native-image/reflect-config.json +134 -0
  40. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/java/com/mongodb/crypt/capi/MongoCryptTest.java +50 -6
  41. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/fle2-find-range-explicit-v2/int32/encrypted-payload.json +26 -0
  42. data/ext/libmongocrypt/libmongocrypt/bindings/{python/test/data/fle2-find-range-explicit → java/mongocrypt/src/test/resources/fle2-find-range-explicit-v2}/int32/rangeopts.json +3 -0
  43. data/ext/libmongocrypt/libmongocrypt/bindings/node/README.md +4 -771
  44. data/ext/libmongocrypt/libmongocrypt/bindings/python/CHANGELOG.rst +86 -0
  45. data/ext/libmongocrypt/libmongocrypt/bindings/python/README.rst +41 -20
  46. data/ext/libmongocrypt/libmongocrypt/bindings/python/RELEASE.rst +6 -24
  47. data/ext/libmongocrypt/libmongocrypt/bindings/python/build-manylinux-wheel.sh +4 -13
  48. data/ext/libmongocrypt/libmongocrypt/bindings/python/hatch_build.py +36 -0
  49. data/ext/libmongocrypt/libmongocrypt/bindings/python/libmongocrypt-version.txt +1 -0
  50. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/__init__.py +2 -2
  51. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/asynchronous/auto_encrypter.py +61 -0
  52. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/asynchronous/credentials.py +156 -0
  53. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/asynchronous/explicit_encrypter.py +156 -0
  54. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/asynchronous/state_machine.py +149 -0
  55. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/auto_encrypter.py +2 -46
  56. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/binary.py +14 -17
  57. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/binding.py +232 -296
  58. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/compat.py +6 -31
  59. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/credentials.py +2 -121
  60. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/crypto.py +31 -20
  61. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/errors.py +2 -2
  62. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/explicit_encrypter.py +2 -233
  63. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/mongocrypt.py +168 -254
  64. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/options.py +265 -0
  65. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/state_machine.py +2 -141
  66. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/synchronous/auto_encrypter.py +61 -0
  67. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/synchronous/credentials.py +156 -0
  68. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/synchronous/explicit_encrypter.py +156 -0
  69. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/synchronous/state_machine.py +149 -0
  70. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/version.py +2 -2
  71. data/ext/libmongocrypt/libmongocrypt/bindings/python/pyproject.toml +118 -0
  72. data/ext/libmongocrypt/libmongocrypt/bindings/python/release.sh +97 -61
  73. data/ext/libmongocrypt/libmongocrypt/bindings/python/requirements-test.txt +7 -0
  74. data/ext/libmongocrypt/libmongocrypt/bindings/python/requirements.txt +4 -0
  75. data/ext/libmongocrypt/libmongocrypt/bindings/python/sbom.json +76 -0
  76. data/ext/libmongocrypt/libmongocrypt/bindings/python/strip_header.py +6 -7
  77. data/ext/libmongocrypt/libmongocrypt/bindings/python/synchro.py +64 -0
  78. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/__init__.py +2 -10
  79. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/collection-info.json +1 -1
  80. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/command.json +1 -1
  81. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/compact/success/encrypted-payload.json +21 -21
  82. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/encrypted-command-reply.json +1 -1
  83. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/encrypted-field-config-map.json +1 -1
  84. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/fle2-find-range-explicit-v2/int32/encrypted-payload.json +26 -0
  85. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/fle2-find-range-explicit-v2/int32/rangeopts.json +14 -0
  86. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/key-document-azure.json +1 -1
  87. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/key-document-gcp.json +1 -1
  88. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/key-document.json +1 -1
  89. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/key-filter.json +1 -1
  90. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/list-collections-filter.json +1 -1
  91. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/mongocryptd-command.json +1 -1
  92. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/mongocryptd-reply.json +1 -1
  93. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/schema-map.json +1 -1
  94. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/performance/keyDocument.json +24 -0
  95. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/performance/perf_test.py +165 -0
  96. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/test_binding.py +8 -12
  97. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/test_crypto.py +9 -11
  98. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/test_mongocrypt.py +991 -343
  99. data/ext/libmongocrypt/libmongocrypt/bindings/python/update-sbom.sh +14 -0
  100. data/ext/libmongocrypt/libmongocrypt/cmake/FetchMongoC.cmake +19 -1
  101. data/ext/libmongocrypt/libmongocrypt/cmake/ImportBSON.cmake +31 -6
  102. data/ext/libmongocrypt/libmongocrypt/cmake/IntelDFP.cmake +20 -227
  103. data/ext/libmongocrypt/libmongocrypt/cmake/Patch.cmake +54 -0
  104. data/ext/libmongocrypt/libmongocrypt/cmake/Platform.cmake +50 -0
  105. data/ext/libmongocrypt/libmongocrypt/cmake/mongocrypt-config.cmake +21 -0
  106. data/ext/libmongocrypt/libmongocrypt/doc/img/cli-icon.png +0 -0
  107. data/ext/libmongocrypt/libmongocrypt/doc/img/reference-targets.png +0 -0
  108. data/ext/libmongocrypt/libmongocrypt/doc/releasing.md +153 -0
  109. data/ext/libmongocrypt/libmongocrypt/etc/c6-vault.repo +39 -0
  110. data/ext/libmongocrypt/libmongocrypt/etc/calc_release_version.py +61 -28
  111. data/ext/libmongocrypt/libmongocrypt/etc/calc_release_version_selftest.sh +73 -0
  112. data/ext/libmongocrypt/libmongocrypt/etc/cyclonedx.sbom.json +108 -0
  113. data/ext/libmongocrypt/libmongocrypt/etc/fle2_aead_generate_tests.py +15 -24
  114. data/ext/libmongocrypt/libmongocrypt/etc/fle2_crypto.py +66 -54
  115. data/ext/libmongocrypt/libmongocrypt/etc/fle2_generate_tests.py +14 -23
  116. data/ext/libmongocrypt/libmongocrypt/etc/fle2v2_aead_generate_tests.py +32 -0
  117. data/ext/libmongocrypt/libmongocrypt/etc/format-all.sh +12 -0
  118. data/ext/libmongocrypt/libmongocrypt/etc/format.sh +16 -0
  119. data/ext/libmongocrypt/libmongocrypt/etc/install-package.sh +48 -0
  120. data/ext/libmongocrypt/libmongocrypt/etc/libbson-remove-GCC-diagnostic-pragma.patch +27 -0
  121. data/ext/libmongocrypt/libmongocrypt/etc/mongo-inteldfp-alpine-arm-fix.patch +17 -0
  122. data/ext/libmongocrypt/libmongocrypt/etc/mongo-inteldfp-libmongocrypt-pr-625.patch +13 -0
  123. data/ext/libmongocrypt/libmongocrypt/etc/packager.py +120 -91
  124. data/ext/libmongocrypt/libmongocrypt/etc/purls.txt +14 -0
  125. data/ext/libmongocrypt/libmongocrypt/etc/repo_config.yaml +56 -0
  126. data/ext/libmongocrypt/libmongocrypt/etc/silk-create-asset-group.sh +70 -0
  127. data/ext/libmongocrypt/libmongocrypt/etc/ssdlc_compliance_report.md +37 -0
  128. data/ext/libmongocrypt/libmongocrypt/etc/third_party_vulnerabilities.md +42 -0
  129. data/ext/libmongocrypt/libmongocrypt/integrating.md +18 -1
  130. data/ext/libmongocrypt/libmongocrypt/kms-message/CMakeLists.txt +11 -3
  131. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_gcp_request.c +1 -1
  132. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_kmip_reader_writer.c +17 -0
  133. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_kmip_reader_writer_private.h +6 -0
  134. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_kmip_request.c +211 -1
  135. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_kmip_response.c +163 -0
  136. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_kmip_tag_type_private.h +2 -1
  137. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_message/kms_kmip_request.h +17 -0
  138. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_message/kms_kmip_response.h +6 -0
  139. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_port.c +3 -2
  140. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_request.c +4 -2
  141. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_request_str.c +2 -2
  142. data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kmip_reader_writer.c +23 -2
  143. data/ext/libmongocrypt/libmongocrypt/src/crypto/cng.c +381 -436
  144. data/ext/libmongocrypt/libmongocrypt/src/crypto/commoncrypto.c +162 -227
  145. data/ext/libmongocrypt/libmongocrypt/src/crypto/libcrypto.c +183 -248
  146. data/ext/libmongocrypt/libmongocrypt/src/crypto/none.c +33 -55
  147. data/ext/libmongocrypt/libmongocrypt/src/csfle-markup.cpp +175 -205
  148. data/ext/libmongocrypt/libmongocrypt/src/mc-array-private.h +10 -21
  149. data/ext/libmongocrypt/libmongocrypt/src/mc-array.c +44 -56
  150. data/ext/libmongocrypt/libmongocrypt/src/mc-check-conversions-private.h +4 -8
  151. data/ext/libmongocrypt/libmongocrypt/src/mc-dec128.h +351 -463
  152. data/ext/libmongocrypt/libmongocrypt/src/mc-dec128.test.cpp +59 -66
  153. data/ext/libmongocrypt/libmongocrypt/src/mc-efc-private.h +21 -11
  154. data/ext/libmongocrypt/libmongocrypt/src/mc-efc.c +175 -99
  155. data/ext/libmongocrypt/libmongocrypt/src/mc-fle-blob-subtype-private.h +18 -10
  156. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-encryption-placeholder-private.h +69 -70
  157. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-encryption-placeholder.c +445 -439
  158. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-equality-payload-private-v2.h +41 -0
  159. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-equality-payload-private.h +11 -18
  160. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-equality-payload-v2.c +135 -0
  161. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-equality-payload.c +109 -126
  162. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-range-payload-private-v2.h +103 -0
  163. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-range-payload-private.h +28 -31
  164. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-range-payload-v2.c +173 -0
  165. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-range-payload.c +106 -125
  166. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-insert-update-payload-private-v2.h +130 -0
  167. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-insert-update-payload-private.h +36 -44
  168. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-insert-update-payload-v2.c +382 -0
  169. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-insert-update-payload.c +237 -278
  170. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-iev-private-v2.h +133 -0
  171. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-iev-private.h +67 -56
  172. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-iev-v2.c +437 -0
  173. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-iev.c +454 -325
  174. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-uev-common-private.h +69 -0
  175. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-uev-common.c +182 -0
  176. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-uev-private.h +23 -31
  177. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-uev-v2-private.h +85 -0
  178. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-uev-v2.c +142 -0
  179. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-uev.c +104 -231
  180. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-range-operator-private.h +8 -7
  181. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-rfds-private.h +56 -56
  182. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-rfds.c +520 -580
  183. data/ext/libmongocrypt/libmongocrypt/src/mc-optional-private.h +47 -66
  184. data/ext/libmongocrypt/libmongocrypt/src/mc-range-edge-generation-private.h +67 -76
  185. data/ext/libmongocrypt/libmongocrypt/src/mc-range-edge-generation.c +201 -190
  186. data/ext/libmongocrypt/libmongocrypt/src/mc-range-encoding-private.h +55 -42
  187. data/ext/libmongocrypt/libmongocrypt/src/mc-range-encoding.c +809 -558
  188. data/ext/libmongocrypt/libmongocrypt/src/mc-range-mincover-generator.template.h +177 -201
  189. data/ext/libmongocrypt/libmongocrypt/src/mc-range-mincover-private.h +54 -53
  190. data/ext/libmongocrypt/libmongocrypt/src/mc-range-mincover.c +188 -240
  191. data/ext/libmongocrypt/libmongocrypt/src/mc-rangeopts-private.h +43 -35
  192. data/ext/libmongocrypt/libmongocrypt/src/mc-rangeopts.c +484 -337
  193. data/ext/libmongocrypt/libmongocrypt/src/mc-reader-private.h +36 -71
  194. data/ext/libmongocrypt/libmongocrypt/src/mc-reader.c +111 -164
  195. data/ext/libmongocrypt/libmongocrypt/src/mc-tokens-private.h +87 -65
  196. data/ext/libmongocrypt/libmongocrypt/src/mc-tokens.c +153 -125
  197. data/ext/libmongocrypt/libmongocrypt/src/mc-writer-private.h +66 -0
  198. data/ext/libmongocrypt/libmongocrypt/src/mc-writer.c +141 -0
  199. data/ext/libmongocrypt/libmongocrypt/src/mlib/check.hpp +37 -55
  200. data/ext/libmongocrypt/libmongocrypt/src/mlib/endian.h +11 -11
  201. data/ext/libmongocrypt/libmongocrypt/src/mlib/error.h +27 -32
  202. data/ext/libmongocrypt/libmongocrypt/src/mlib/int128.h +461 -499
  203. data/ext/libmongocrypt/libmongocrypt/src/mlib/int128.test.cpp +256 -334
  204. data/ext/libmongocrypt/libmongocrypt/src/mlib/macros.h +4 -5
  205. data/ext/libmongocrypt/libmongocrypt/src/mlib/path.h +196 -231
  206. data/ext/libmongocrypt/libmongocrypt/src/mlib/path.test.c +56 -79
  207. data/ext/libmongocrypt/libmongocrypt/src/mlib/str.h +411 -530
  208. data/ext/libmongocrypt/libmongocrypt/src/mlib/str.test.c +116 -131
  209. data/ext/libmongocrypt/libmongocrypt/src/mlib/thread.h +17 -26
  210. data/ext/libmongocrypt/libmongocrypt/src/mlib/user-check.h +2 -2
  211. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-binary-private.h +1 -9
  212. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-binary.c +31 -48
  213. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-buffer-private.h +55 -131
  214. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-buffer.c +442 -565
  215. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-cache-collinfo-private.h +1 -2
  216. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-cache-collinfo.c +28 -45
  217. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-cache-key-private.h +11 -17
  218. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-cache-key.c +104 -132
  219. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-cache-oauth-private.h +16 -24
  220. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-cache-oauth.c +110 -93
  221. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-cache-private.h +26 -45
  222. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-cache.c +220 -273
  223. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ciphertext-private.h +13 -25
  224. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ciphertext.c +147 -166
  225. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-compat.h +2 -2
  226. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-crypto-private.h +110 -204
  227. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-crypto.c +1145 -1567
  228. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-datakey.c +510 -476
  229. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-decrypt.c +817 -694
  230. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-encrypt.c +2775 -2697
  231. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-private.h +189 -184
  232. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-rewrap-many-datakey.c +308 -351
  233. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx.c +990 -1139
  234. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-dll-private.h +23 -24
  235. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-endian-private.h +44 -58
  236. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-endpoint-private.h +21 -25
  237. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-endpoint.c +167 -181
  238. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-kek-private.h +42 -44
  239. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-kek.c +292 -272
  240. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-key-broker-private.h +70 -110
  241. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-key-broker.c +1010 -1033
  242. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-key-private.h +27 -44
  243. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-key.c +349 -402
  244. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-kms-ctx-private.h +127 -120
  245. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-kms-ctx.c +1692 -1611
  246. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-log-private.h +35 -67
  247. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-log.c +49 -83
  248. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-marking-private.h +31 -36
  249. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-marking.c +1923 -1479
  250. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-mutex-private.h +7 -12
  251. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-opts-private.h +124 -107
  252. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-opts.c +925 -419
  253. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-private.h +99 -122
  254. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-status-private.h +3 -8
  255. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-status.c +92 -119
  256. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-traverse-util-private.h +19 -29
  257. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-traverse-util.c +136 -176
  258. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-util-private.h +11 -21
  259. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-util.c +98 -136
  260. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt.c +924 -1339
  261. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt.h +199 -313
  262. data/ext/libmongocrypt/libmongocrypt/src/os_posix/os_dll.c +83 -79
  263. data/ext/libmongocrypt/libmongocrypt/src/os_posix/os_mutex.c +20 -28
  264. data/ext/libmongocrypt/libmongocrypt/src/os_win/os_dll.c +64 -73
  265. data/ext/libmongocrypt/libmongocrypt/src/os_win/os_mutex.c +8 -16
  266. data/ext/libmongocrypt/libmongocrypt/test/crypt_shared-stub.cpp +57 -87
  267. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/bypassQueryAnalysis/payload.json +53 -0
  268. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/jsonSchema/cmd-to-mongocryptd.json +23 -0
  269. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/jsonSchema/cmd.json +20 -0
  270. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/simple/cmd-to-mongocryptd.json +50 -0
  271. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/simple/cmd.json +20 -0
  272. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/simple/collinfo.json +44 -0
  273. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/simple/encrypted-field-map.json +24 -0
  274. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/simple/encrypted-payload-pattern.json +53 -0
  275. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/simple/mongocryptd-reply.json +62 -0
  276. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/unencrypted/cmd-to-mongocryptd.json +30 -0
  277. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/unencrypted/cmd.json +17 -0
  278. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/unencrypted/mongocryptd-reply.json +39 -0
  279. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/unencrypted/payload.json +21 -0
  280. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/missing-key-id/collinfo.json +20 -0
  281. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/no-fields/collinfo.json +9 -0
  282. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/no-fields/encrypted-payload.json +4 -0
  283. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/success/cmd.json +1 -0
  284. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/success/collinfo.json +63 -0
  285. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/success/encrypted-field-config-map.json +61 -0
  286. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/success/encrypted-payload-range-v2.json +37 -0
  287. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/success/encrypted-payload.json +29 -0
  288. data/ext/libmongocrypt/libmongocrypt/test/data/compact/anchor-pad/cmd.json +1 -0
  289. data/ext/libmongocrypt/libmongocrypt/test/data/compact/anchor-pad/collinfo.json +64 -0
  290. data/ext/libmongocrypt/libmongocrypt/test/data/compact/anchor-pad/encrypted-payload-range-v2.json +105 -0
  291. data/ext/libmongocrypt/libmongocrypt/test/data/compact/anchor-pad/encrypted-payload.json +30 -0
  292. data/ext/libmongocrypt/libmongocrypt/test/data/compact/no-range/cmd.json +1 -0
  293. data/ext/libmongocrypt/libmongocrypt/test/data/compact/no-range/collinfo.json +49 -0
  294. data/ext/libmongocrypt/libmongocrypt/test/data/compact/no-range/encrypted-field-config-map.json +47 -0
  295. data/ext/libmongocrypt/libmongocrypt/test/data/compact/no-range/encrypted-payload.json +23 -0
  296. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/collinfo.json +15 -0
  297. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/encrypted-field-config-map.json +10 -0
  298. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/encrypted-payload-range-v2.json +104 -0
  299. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/encrypted-payload.json +6 -0
  300. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-delete/empty/encrypted-payload-v2.json +60 -0
  301. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-delete/success/encrypted-payload-v2.json +67 -0
  302. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explain/with-csfle/collinfo.json +4 -4
  303. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explain/with-csfle/encrypted-payload.json +5 -5
  304. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explicit/find-indexed-contentionFactor1-v2.json +8 -0
  305. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explicit/find-indexed-v2.json +8 -0
  306. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explicit/insert-indexed-contentionFactor1-v2.json +8 -0
  307. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explicit/insert-indexed-same-user-and-index-key-v2.json +8 -0
  308. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explicit/insert-indexed-v2.json +8 -0
  309. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-equality-v2/cmd.json +6 -0
  310. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-equality-v2/encrypted-field-map.json +22 -0
  311. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-equality-v2/encrypted-payload.json +40 -0
  312. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-equality-v2/mongocryptd-reply.json +19 -0
  313. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/date-v2/cmd.json +10 -0
  314. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/date-v2/encrypted-field-map.json +27 -0
  315. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/date-v2/encrypted-payload.json +41 -0
  316. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/date-v2/mongocryptd-reply.json +49 -0
  317. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-precision-v2/cmd.json +6 -0
  318. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-precision-v2/encrypted-field-map.json +30 -0
  319. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-precision-v2/encrypted-payload.json +50 -0
  320. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-precision-v2/mongocryptd-reply.json +58 -0
  321. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-v2/cmd.json +6 -0
  322. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-v2/encrypted-field-map.json +27 -0
  323. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-v2/encrypted-payload.json +41 -0
  324. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-v2/mongocryptd-reply.json +49 -0
  325. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double-precision-v2/cmd.json +8 -0
  326. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double-precision-v2/encrypted-field-map.json +30 -0
  327. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double-precision-v2/encrypted-payload.json +44 -0
  328. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double-precision-v2/mongocryptd-reply.json +52 -0
  329. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double-v2/cmd.json +8 -0
  330. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double-v2/encrypted-field-map.json +27 -0
  331. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double-v2/encrypted-payload.json +41 -0
  332. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double-v2/mongocryptd-reply.json +49 -0
  333. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int32-v2/cmd.json +8 -0
  334. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int32-v2/encrypted-field-map.json +27 -0
  335. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int32-v2/encrypted-payload.json +41 -0
  336. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int32-v2/mongocryptd-reply.json +49 -0
  337. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int64-v2/cmd.json +8 -0
  338. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int64-v2/encrypted-field-map.json +27 -0
  339. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int64-v2/encrypted-payload.json +41 -0
  340. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int64-v2/mongocryptd-reply.json +49 -0
  341. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range-explicit/double/encrypted-payload-v2.json +26 -0
  342. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range-explicit/double-precision/encrypted-payload-v2.json +26 -0
  343. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range-explicit/int32/encrypted-payload-v2.json +26 -0
  344. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range-explicit/int32-nominmax/encrypted-payload-v2.json +26 -0
  345. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range-explicit/int32-openinterval/encrypted-payload-v2.json +16 -0
  346. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert/cmd.json +1 -1
  347. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/date/RNG_DATA.h +65 -65
  348. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/date-v2/cmd.json +13 -0
  349. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/date-v2/encrypted-field-map.json +27 -0
  350. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/date-v2/encrypted-payload.json +44 -0
  351. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/date-v2/mongocryptd-reply.json +52 -0
  352. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128/RNG_DATA.h +132 -132
  353. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-precision/RNG_DATA.h +71 -71
  354. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-precision-v2/cmd.json +9 -0
  355. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-precision-v2/encrypted-field-map.json +30 -0
  356. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-precision-v2/encrypted-payload.json +53 -0
  357. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-precision-v2/mongocryptd-reply.json +61 -0
  358. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-v2/cmd.json +9 -0
  359. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-v2/encrypted-field-map.json +27 -0
  360. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-v2/encrypted-payload.json +44 -0
  361. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-v2/mongocryptd-reply.json +52 -0
  362. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double/RNG_DATA.h +68 -68
  363. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double-precision/RNG_DATA.h +19 -19
  364. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double-precision-v2/cmd.json +11 -0
  365. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double-precision-v2/encrypted-field-map.json +30 -0
  366. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double-precision-v2/encrypted-payload.json +47 -0
  367. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double-precision-v2/mongocryptd-reply.json +55 -0
  368. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double-v2/cmd.json +11 -0
  369. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double-v2/encrypted-field-map.json +27 -0
  370. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double-v2/encrypted-payload.json +44 -0
  371. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double-v2/mongocryptd-reply.json +52 -0
  372. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int32/RNG_DATA.h +25 -25
  373. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int32-v2/cmd.json +11 -0
  374. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int32-v2/encrypted-field-map.json +27 -0
  375. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int32-v2/encrypted-payload.json +44 -0
  376. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int32-v2/mongocryptd-reply.json +52 -0
  377. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int64/RNG_DATA.h +65 -65
  378. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int64-v2/cmd.json +11 -0
  379. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int64-v2/encrypted-field-map.json +27 -0
  380. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int64-v2/encrypted-payload.json +44 -0
  381. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int64-v2/mongocryptd-reply.json +52 -0
  382. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/double/RNG_DATA.h +68 -68
  383. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/double/encrypted-payload-v2.json +8 -0
  384. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/double-precision/RNG_DATA.h +19 -19
  385. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/double-precision/encrypted-payload-v2.json +8 -0
  386. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/int32/RNG_DATA.h +25 -25
  387. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/int32/encrypted-payload-v2.json +8 -0
  388. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/int32-nominmax/encrypted-payload-v2.json +8 -0
  389. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/sparsity-2/RNG_DATA.h +15 -15
  390. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/sparsity-2/encrypted-payload-v2.json +8 -0
  391. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-unindexed-v2/cmd.json +9 -0
  392. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-unindexed-v2/encrypted-field-map.json +18 -0
  393. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-unindexed-v2/encrypted-payload.json +14 -0
  394. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-unindexed-v2/mongocryptd-reply.json +41 -0
  395. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-v2/cmd.json +9 -0
  396. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-v2/encrypted-field-map.json +22 -0
  397. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-v2/encrypted-payload.json +39 -0
  398. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-v2/mongocryptd-reply.json +49 -0
  399. data/ext/libmongocrypt/libmongocrypt/test/data/iev-v2/FLECrudTest-insertOneRangeV2.json +10 -0
  400. data/ext/libmongocrypt/libmongocrypt/test/data/iev-v2/FLECrudTest-insertOneV2.json +10 -0
  401. data/ext/libmongocrypt/libmongocrypt/test/data/kms-azure/decrypt-response.txt +16 -0
  402. data/ext/libmongocrypt/libmongocrypt/test/data/kms-azure/encrypt-response.txt +16 -0
  403. data/ext/libmongocrypt/libmongocrypt/test/data/kms-azure/oauth-response.txt +19 -0
  404. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/find/cmd.json +9 -0
  405. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/find/encrypted-field-map.json +19 -0
  406. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/find/encrypted-payload.json +62 -0
  407. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/find/mongocryptd-reply.json +69 -0
  408. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/insert/cmd.json +11 -0
  409. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/insert/encrypted-field-map.json +19 -0
  410. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/insert/encrypted-payload.json +40 -0
  411. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/insert/mongocryptd-reply.json +47 -0
  412. data/ext/libmongocrypt/libmongocrypt/test/data/range-edge-generation/edges_decimal128.cstruct +1 -1
  413. data/ext/libmongocrypt/libmongocrypt/test/data/range-edge-generation/edges_double.cstruct +8637 -7958
  414. data/ext/libmongocrypt/libmongocrypt/test/data/range-edge-generation/edges_int32.cstruct +5522 -1382
  415. data/ext/libmongocrypt/libmongocrypt/test/data/range-edge-generation/edges_int64.cstruct +5042 -1262
  416. data/ext/libmongocrypt/libmongocrypt/test/data/range-min-cover/mincover_decimal128.cstruct +1 -1
  417. data/ext/libmongocrypt/libmongocrypt/test/data/range-min-cover/mincover_decimal128_precision.cstruct +1 -1
  418. data/ext/libmongocrypt/libmongocrypt/test/data/range-min-cover/mincover_double.cstruct +1 -1
  419. data/ext/libmongocrypt/libmongocrypt/test/data/range-min-cover/mincover_double_precision.cstruct +2 -2
  420. data/ext/libmongocrypt/libmongocrypt/test/data/range-min-cover/mincover_int32.cstruct +1 -1
  421. data/ext/libmongocrypt/libmongocrypt/test/data/range-min-cover/mincover_int64.cstruct +1 -1
  422. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-find-int32/cmd.json +8 -0
  423. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-find-int32/encrypted-field-map.json +19 -0
  424. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-find-int32/encrypted-payload.json +53 -0
  425. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-find-int32/mongocryptd-reply.json +58 -0
  426. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-insert-int32/cmd.json +11 -0
  427. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-insert-int32/encrypted-field-map.json +19 -0
  428. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-insert-int32/encrypted-payload.json +40 -0
  429. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-insert-int32/mongocryptd-reply.json +45 -0
  430. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-find-int32/expected.json +26 -0
  431. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-find-int32/to-encrypt.json +20 -0
  432. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-find-int32-defaults/expected.json +26 -0
  433. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-find-int32-defaults/to-encrypt.json +20 -0
  434. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-insert-double/expected.json +8 -0
  435. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-insert-int32/expected.json +8 -0
  436. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-insert-int32-defaults/expected.json +8 -0
  437. data/ext/libmongocrypt/libmongocrypt/test/data/roundtrip/README.md +17 -0
  438. data/ext/libmongocrypt/libmongocrypt/test/data/roundtrip/aes-ctr.json +29 -0
  439. data/ext/libmongocrypt/libmongocrypt/test/data/roundtrip/fle2-fixed.json +10 -0
  440. data/ext/libmongocrypt/libmongocrypt/test/data/roundtrip/fle2-generated.json +38 -0
  441. data/ext/libmongocrypt/libmongocrypt/test/data/roundtrip/fle2aead-decrypt.json +35 -0
  442. data/ext/libmongocrypt/libmongocrypt/test/data/roundtrip/fle2aead-fixed.json +29 -0
  443. data/ext/libmongocrypt/libmongocrypt/test/data/roundtrip/fle2aead-generated.json +122 -0
  444. data/ext/libmongocrypt/libmongocrypt/test/data/roundtrip/fle2v2-aead-fixed.json +29 -0
  445. data/ext/libmongocrypt/libmongocrypt/test/data/roundtrip/fle2v2-aead-generated.json +122 -0
  446. data/ext/libmongocrypt/libmongocrypt/test/data/roundtrip/mcgrew.json +12 -0
  447. data/ext/libmongocrypt/libmongocrypt/test/data/roundtrip/nist.json +20 -0
  448. data/ext/libmongocrypt/libmongocrypt/test/data/tokens/README.md +30 -0
  449. data/ext/libmongocrypt/libmongocrypt/test/data/tokens/mc.json +25 -0
  450. data/ext/libmongocrypt/libmongocrypt/test/data/tokens/server.json +25 -0
  451. data/ext/libmongocrypt/libmongocrypt/test/example-no-bson.c +4 -4
  452. data/ext/libmongocrypt/libmongocrypt/test/example-state-machine.c +279 -323
  453. data/ext/libmongocrypt/libmongocrypt/test/fuzz_kms.c +8 -7
  454. data/ext/libmongocrypt/libmongocrypt/test/test-dll.cpp +6 -7
  455. data/ext/libmongocrypt/libmongocrypt/test/test-gcp-auth.c +221 -283
  456. data/ext/libmongocrypt/libmongocrypt/test/test-mc-efc.c +60 -73
  457. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-find-equality-payload-v2.c +78 -0
  458. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-find-range-payload-v2.c +129 -0
  459. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-payload-iev-v2.c +248 -0
  460. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-payload-iev.c +467 -414
  461. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-payload-iup-v2.c +248 -0
  462. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-payload-iup.c +141 -159
  463. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-payload-uev-v2.c +338 -0
  464. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-payload-uev.c +238 -176
  465. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-rfds.c +373 -474
  466. data/ext/libmongocrypt/libmongocrypt/test/test-mc-range-edge-generation.c +421 -388
  467. data/ext/libmongocrypt/libmongocrypt/test/test-mc-range-encoding.c +974 -825
  468. data/ext/libmongocrypt/libmongocrypt/test/test-mc-range-mincover.c +499 -481
  469. data/ext/libmongocrypt/libmongocrypt/test/test-mc-rangeopts.c +312 -148
  470. data/ext/libmongocrypt/libmongocrypt/test/test-mc-reader.c +124 -207
  471. data/ext/libmongocrypt/libmongocrypt/test/test-mc-tokens.c +249 -213
  472. data/ext/libmongocrypt/libmongocrypt/test/test-mc-writer.c +176 -0
  473. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-assert-match-bson.c +632 -808
  474. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-assert-match-bson.h +22 -2
  475. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-assert.h +168 -189
  476. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-buffer.c +187 -211
  477. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-cache-oauth.c +118 -37
  478. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-cache.c +210 -233
  479. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ciphertext.c +185 -220
  480. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-cleanup.c +374 -0
  481. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-compact.c +410 -445
  482. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-crypto-hooks.c +798 -812
  483. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-crypto-std-hooks.c +142 -135
  484. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-crypto-std-hooks.h +70 -71
  485. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-crypto.c +394 -846
  486. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-csfle-lib.c +159 -183
  487. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-decrypt.c +870 -1045
  488. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-encrypt.c +5183 -4717
  489. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-rewrap-many-datakey.c +750 -964
  490. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-setopt.c +1093 -1178
  491. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-datakey.c +348 -420
  492. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-dll.c +23 -30
  493. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-endpoint.c +98 -111
  494. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-kek.c +49 -52
  495. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-key-broker.c +770 -920
  496. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-key-cache.c +354 -407
  497. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-key.c +197 -245
  498. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-kms-ctx.c +705 -368
  499. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-kms-responses.c +147 -166
  500. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-local-kms.c +50 -61
  501. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-log.c +85 -100
  502. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-marking.c +1073 -690
  503. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-opts.c +42 -0
  504. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-status.c +46 -58
  505. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-traverse-util.c +381 -451
  506. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-util.c +55 -67
  507. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-util.h +7 -10
  508. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt.c +879 -918
  509. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt.h +119 -169
  510. data/ext/libmongocrypt/libmongocrypt/test/test-named-kms-providers.c +2381 -0
  511. data/ext/libmongocrypt/libmongocrypt/test/util/HELP.autogen +3 -1
  512. data/ext/libmongocrypt/libmongocrypt/test/util/README.md +1 -0
  513. data/ext/libmongocrypt/libmongocrypt/test/util/csfle.c +512 -559
  514. data/ext/libmongocrypt/libmongocrypt/test/util/make_includes.py +1 -1
  515. data/ext/libmongocrypt/libmongocrypt/test/util/util.c +771 -882
  516. data/ext/libmongocrypt/libmongocrypt/test/util/util.h +33 -55
  517. data/lib/libmongocrypt_helper/version.rb +2 -2
  518. metadata +245 -111
  519. checksums.yaml.gz.sig +0 -0
  520. data/ext/libmongocrypt/libmongocrypt/VERSION_CURRENT +0 -1
  521. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/fle2-find-range-explicit/int32/encrypted-payload.json +0 -26
  522. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/fle2-find-range-explicit/int32/key-document.json +0 -0
  523. data/ext/libmongocrypt/libmongocrypt/bindings/node/CHANGELOG.md +0 -81
  524. data/ext/libmongocrypt/libmongocrypt/bindings/node/LICENSE +0 -201
  525. data/ext/libmongocrypt/libmongocrypt/bindings/node/binding.gyp +0 -79
  526. data/ext/libmongocrypt/libmongocrypt/bindings/node/etc/README.hbs +0 -44
  527. data/ext/libmongocrypt/libmongocrypt/bindings/node/etc/build-static.sh +0 -39
  528. data/ext/libmongocrypt/libmongocrypt/bindings/node/index.d.ts +0 -515
  529. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/autoEncrypter.js +0 -420
  530. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/buffer_pool.js +0 -123
  531. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/clientEncryption.js +0 -699
  532. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/common.js +0 -100
  533. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/credentialsProvider.js +0 -33
  534. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/cryptoCallbacks.js +0 -87
  535. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/index.js +0 -42
  536. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/mongocryptdManager.js +0 -66
  537. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/stateMachine.js +0 -487
  538. data/ext/libmongocrypt/libmongocrypt/bindings/node/package-lock.json +0 -16051
  539. data/ext/libmongocrypt/libmongocrypt/bindings/node/package.json +0 -81
  540. data/ext/libmongocrypt/libmongocrypt/bindings/node/src/mongocrypt.cc +0 -929
  541. data/ext/libmongocrypt/libmongocrypt/bindings/node/src/mongocrypt.h +0 -114
  542. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/autoEncrypter.test.js +0 -953
  543. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/buffer_pool.test.js +0 -91
  544. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/clientEncryption.test.js +0 -701
  545. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/credentialsProvider.test.js +0 -163
  546. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/cryptoCallbacks.test.js +0 -284
  547. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/README.md +0 -5
  548. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/cmd.json +0 -6
  549. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/collection-info.json +0 -37
  550. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/encrypted-document-nested.json +0 -8
  551. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/encrypted-document.json +0 -11
  552. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/encryptedFields.json +0 -30
  553. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/key-document.json +0 -32
  554. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/key1-document.json +0 -30
  555. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/mongocryptd-reply.json +0 -18
  556. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/mongocryptdManager.test.js +0 -48
  557. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/release.test.js +0 -59
  558. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/requirements.helper.js +0 -29
  559. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/stateMachine.test.js +0 -331
  560. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/tools/mongodb_reporter.js +0 -325
  561. data/ext/libmongocrypt/libmongocrypt/bindings/python/setup.py +0 -84
  562. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/fle2-find-range-explicit/int32/encrypted-payload.json +0 -26
  563. data/ext/libmongocrypt/libmongocrypt/bindings/python/test-requirements.txt +0 -12
  564. data/ext/libmongocrypt/libmongocrypt/debian/build_snapshot.sh +0 -79
  565. data/ext/libmongocrypt/libmongocrypt/debian/changelog +0 -105
  566. data/ext/libmongocrypt/libmongocrypt/debian/compat +0 -1
  567. data/ext/libmongocrypt/libmongocrypt/debian/control +0 -41
  568. data/ext/libmongocrypt/libmongocrypt/debian/copyright +0 -129
  569. data/ext/libmongocrypt/libmongocrypt/debian/gbp.conf +0 -23
  570. data/ext/libmongocrypt/libmongocrypt/debian/libmongocrypt-dev.dirs +0 -2
  571. data/ext/libmongocrypt/libmongocrypt/debian/libmongocrypt-dev.install +0 -5
  572. data/ext/libmongocrypt/libmongocrypt/debian/libmongocrypt0.dirs +0 -1
  573. data/ext/libmongocrypt/libmongocrypt/debian/libmongocrypt0.install +0 -1
  574. data/ext/libmongocrypt/libmongocrypt/debian/rules +0 -46
  575. data/ext/libmongocrypt/libmongocrypt/debian/source/format +0 -1
  576. data/ext/libmongocrypt/libmongocrypt/debian/source/lintian-overrides +0 -3
  577. data/ext/libmongocrypt/libmongocrypt/debian/source/options +0 -1
  578. data/ext/libmongocrypt/libmongocrypt/debian/watch +0 -3
  579. data/ext/libmongocrypt/libmongocrypt/test/data/aes-ctr.cstructs +0 -359
  580. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/mongocryptd-reply.json +0 -72
  581. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-aead.cstructs +0 -109
  582. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range-explicit/int32-nominmax/encrypted-payload.json +0 -26
  583. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range-explicit/int32-nominmax/rangeopts.json +0 -5
  584. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/int32-nominmax/RNG_DATA.h +0 -70
  585. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/int32-nominmax/encrypted-payload.json +0 -8
  586. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/int32-nominmax/rangeopts.json +0 -5
  587. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/int32-nominmax/value-to-encrypt.json +0 -5
  588. data/ext/libmongocrypt/libmongocrypt/test/data/fle2.cstructs +0 -33
  589. data.tar.gz.sig +0 -0
  590. metadata.gz.sig +0 -0
  591. /data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/{fle2-find-range-explicit → fle2-find-range-explicit-v2}/int32/key-filter.json +0 -0
  592. /data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/{fle2-find-range-explicit → fle2-find-range-explicit-v2}/int32/value-to-encrypt.json +0 -0
  593. /data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/{fle2-find-range-explicit → fle2-find-range-explicit-v2}/int32/value-to-encrypt.json +0 -0
  594. /data/ext/libmongocrypt/libmongocrypt/bindings/{java/mongocrypt/src/test/resources/fle2-find-range-explicit → python/test/data/fle2-find-rangePreview-explicit}/int32/rangeopts.json +0 -0
  595. /data/ext/libmongocrypt/libmongocrypt/{test/data/fle2-find-range-explicit/int32-nominmax → bindings/python/test/data/fle2-find-rangePreview-explicit/int32}/value-to-encrypt.json +0 -0
  596. /data/ext/libmongocrypt/libmongocrypt/{bindings/node/test/data/kms-decrypt-reply.txt → test/data/kms-aws/decrypt-response.txt} +0 -0
  597. /data/ext/libmongocrypt/libmongocrypt/{bindings/node/test/data/kms-encrypt-reply.txt → test/data/kms-aws/encrypt-response.txt} +0 -0
  598. /data/ext/libmongocrypt/libmongocrypt/test/data/{gcp-auth → kms-gcp}/decrypt-response.txt +0 -0
  599. /data/ext/libmongocrypt/libmongocrypt/test/data/{gcp-auth → kms-gcp}/encrypt-response.txt +0 -0
  600. /data/ext/libmongocrypt/libmongocrypt/test/data/{gcp-auth → kms-gcp}/oauth-response.txt +0 -0
@@ -18,1284 +18,1199 @@
18
18
 
19
19
  #include <stdarg.h>
20
20
 
21
- #include "test-mongocrypt.h"
21
+ #include "mc-range-encoding-private.h"
22
22
  #include "mongocrypt-binary-private.h"
23
+ #include "mongocrypt.h"
24
+ #include "test-mongocrypt.h"
23
25
 
24
26
  /* An orphaned UTF-8 continuation byte (10xxxxxx) is malformed UTF-8. */
25
- static char invalid_utf8[] = {(char) 0x80, (char) 0x00};
27
+ static char invalid_utf8[] = {(char)0x80, (char)0x00};
26
28
 
27
29
  /* Convenience macros for setting options */
28
- #define ASSERT_MASTERKEY_AWS_OK(region, region_len, cmk, cmk_len) \
29
- ASSERT_OK (mongocrypt_ctx_setopt_masterkey_aws ( \
30
- ctx, region, region_len, cmk, cmk_len), \
31
- ctx);
32
- #define ASSERT_MASTERKEY_AWS_FAILS(region, region_len, cmk, cmk_len, msg) \
33
- ASSERT_FAILS (mongocrypt_ctx_setopt_masterkey_aws ( \
34
- ctx, region, region_len, cmk, cmk_len), \
35
- ctx, \
36
- msg);
37
-
38
- #define ASSERT_MASTERKEY_LOCAL_OK \
39
- ASSERT_OK (mongocrypt_ctx_setopt_masterkey_local (ctx), ctx);
40
- #define ASSERT_MASTERKEY_LOCAL_FAILS(msg) \
41
- ASSERT_FAILS (mongocrypt_ctx_setopt_masterkey_local (ctx), ctx, msg);
42
-
43
- #define ASSERT_KEY_ENCRYPTION_KEY_OK(bin) \
44
- ASSERT_OK (mongocrypt_ctx_setopt_key_encryption_key (ctx, bin), ctx);
45
- #define ASSERT_KEY_ENCRYPTION_KEY_FAILS(bin, msg) \
46
- ASSERT_FAILS (mongocrypt_ctx_setopt_key_encryption_key (ctx, bin), ctx, msg);
47
-
48
- #define ASSERT_KEY_ID_OK(key_id) \
49
- ASSERT_OK (mongocrypt_ctx_setopt_key_id (ctx, key_id), ctx);
50
- #define ASSERT_KEY_ID_FAILS(key_id, msg) \
51
- ASSERT_FAILS (mongocrypt_ctx_setopt_key_id (ctx, key_id), ctx, msg);
52
-
53
- #define ASSERT_KEY_ALT_NAME_OK(key_alt_name) \
54
- ASSERT_OK (mongocrypt_ctx_setopt_key_alt_name (ctx, key_alt_name), ctx);
55
- #define ASSERT_KEY_ALT_NAME_FAILS(key_alt_name, msg) \
56
- ASSERT_FAILS ( \
57
- mongocrypt_ctx_setopt_key_alt_name (ctx, key_alt_name), ctx, msg);
58
-
59
- #define ASSERT_KEY_MATERIAL_OK(key_material) \
60
- ASSERT_OK (mongocrypt_ctx_setopt_key_material (ctx, key_material), ctx);
61
- #define ASSERT_KEY_MATERIAL_FAILS(key_material, msg) \
62
- ASSERT_FAILS ( \
63
- mongocrypt_ctx_setopt_key_material (ctx, key_material), ctx, msg);
64
-
65
- #define ASSERT_ALGORITHM_OK(algo, algo_len) \
66
- ASSERT_OK (mongocrypt_ctx_setopt_algorithm (ctx, algo, algo_len), ctx);
67
- #define ASSERT_ALGORITHM_FAILS(algo, algo_len, msg) \
68
- ASSERT_FAILS ( \
69
- mongocrypt_ctx_setopt_algorithm (ctx, algo, algo_len), ctx, msg);
70
-
71
- #define ASSERT_QUERY_TYPE_OK(qt, qt_len) \
72
- ASSERT_OK (mongocrypt_ctx_setopt_query_type (ctx, qt, qt_len), ctx);
73
- #define ASSERT_QUERY_TYPE_FAILS(qt, qt_len, msg) \
74
- ASSERT_FAILS (mongocrypt_ctx_setopt_query_type (ctx, qt, qt_len), ctx, msg);
75
-
76
- #define ASSERT_ENDPOINT_OK(endpoint, endpoint_len) \
77
- ASSERT_OK (mongocrypt_ctx_setopt_masterkey_aws_endpoint ( \
78
- ctx, endpoint, endpoint_len), \
79
- ctx);
80
- #define ASSERT_ENDPOINT_FAILS(endpoint, endpoint_len, msg) \
81
- ASSERT_FAILS (mongocrypt_ctx_setopt_masterkey_aws_endpoint ( \
82
- ctx, endpoint, endpoint_len), \
83
- ctx, \
84
- msg);
85
-
86
- #define ASSERT_DATAKEY_INIT_OK \
87
- ASSERT_OK (mongocrypt_ctx_datakey_init (ctx), ctx);
88
- #define ASSERT_DATAKEY_INIT_FAILS(msg) \
89
- ASSERT_FAILS (mongocrypt_ctx_datakey_init (ctx), ctx, msg);
90
-
91
- #define ASSERT_ENCRYPT_INIT_OK(db, db_len, cmd) \
92
- ASSERT_OK (mongocrypt_ctx_encrypt_init (ctx, db, db_len, cmd), ctx);
93
- #define ENCRYPT_INIT_FAILS(db, db_len, cmd, msg) \
94
- ASSERT_FAILS (mongocrypt_ctx_encrypt_init (ctx, db, db_len, cmd), ctx, msg);
95
-
96
- #define ASSERT_EX_ENCRYPT_INIT_OK(bin) \
97
- ASSERT_OK (mongocrypt_ctx_explicit_encrypt_init (ctx, bin), ctx);
98
- #define ASSERT_EX_ENCRYPT_INIT_FAILS(bin, msg) \
99
- ASSERT_FAILS (mongocrypt_ctx_explicit_encrypt_init (ctx, bin), ctx, msg);
100
-
101
- #define ASSERT_EX_ENCRYPT_EXPRESSION_INIT_OK(bin) \
102
- ASSERT_OK (mongocrypt_ctx_explicit_encrypt_expression_init (ctx, bin), ctx);
103
- #define ASSERT_EX_ENCRYPT_EXPRESSION_INIT_FAILS(bin, msg) \
104
- ASSERT_FAILS ( \
105
- mongocrypt_ctx_explicit_encrypt_expression_init (ctx, bin), ctx, msg);
106
-
107
- #define ASSERT_DECRYPT_INIT_OK(bin) \
108
- ASSERT_OK (mongocrypt_ctx_decrypt_init (ctx, bin), ctx);
109
- #define ASSERT_DECRYPT_INIT_FAILS(bin, msg) \
110
- ASSERT_FAILS (mongocrypt_ctx_decrypt_init (ctx, bin), ctx, msg);
111
-
112
- #define ASSERT_EX_DECRYPT_INIT_OK(bin) \
113
- ASSERT_OK (mongocrypt_ctx_explicit_decrypt_init (ctx, bin), ctx);
114
- #define ASSERT_EX_DECRYPT_INIT_FAILS(bin, msg) \
115
- ASSERT_FAILS (mongocrypt_ctx_explicit_decrypt_init (ctx, bin), ctx, msg);
116
-
117
- #define REFRESH \
118
- do { \
119
- mongocrypt_ctx_destroy (ctx); \
120
- ctx = mongocrypt_ctx_new (crypt); \
121
- } while (0)
30
+ #define ASSERT_MASTERKEY_AWS_OK(region, region_len, cmk, cmk_len) \
31
+ ASSERT_OK(mongocrypt_ctx_setopt_masterkey_aws(ctx, region, region_len, cmk, cmk_len), ctx);
32
+ #define ASSERT_MASTERKEY_AWS_FAILS(region, region_len, cmk, cmk_len, msg) \
33
+ ASSERT_FAILS(mongocrypt_ctx_setopt_masterkey_aws(ctx, region, region_len, cmk, cmk_len), ctx, msg);
34
+
35
+ #define ASSERT_MASTERKEY_LOCAL_OK ASSERT_OK(mongocrypt_ctx_setopt_masterkey_local(ctx), ctx);
36
+ #define ASSERT_MASTERKEY_LOCAL_FAILS(msg) ASSERT_FAILS(mongocrypt_ctx_setopt_masterkey_local(ctx), ctx, msg);
37
+
38
+ #define ASSERT_KEY_ENCRYPTION_KEY_OK(bin) ASSERT_OK(mongocrypt_ctx_setopt_key_encryption_key(ctx, bin), ctx);
39
+ #define ASSERT_KEY_ENCRYPTION_KEY_FAILS(bin, msg) \
40
+ ASSERT_FAILS(mongocrypt_ctx_setopt_key_encryption_key(ctx, bin), ctx, msg);
41
+
42
+ #define ASSERT_KEY_ID_OK(key_id) ASSERT_OK(mongocrypt_ctx_setopt_key_id(ctx, key_id), ctx);
43
+ #define ASSERT_KEY_ID_FAILS(key_id, msg) ASSERT_FAILS(mongocrypt_ctx_setopt_key_id(ctx, key_id), ctx, msg);
44
+
45
+ #define ASSERT_KEY_ALT_NAME_OK(key_alt_name) ASSERT_OK(mongocrypt_ctx_setopt_key_alt_name(ctx, key_alt_name), ctx);
46
+ #define ASSERT_KEY_ALT_NAME_FAILS(key_alt_name, msg) \
47
+ ASSERT_FAILS(mongocrypt_ctx_setopt_key_alt_name(ctx, key_alt_name), ctx, msg);
48
+
49
+ #define ASSERT_KEY_MATERIAL_OK(key_material) ASSERT_OK(mongocrypt_ctx_setopt_key_material(ctx, key_material), ctx);
50
+ #define ASSERT_KEY_MATERIAL_FAILS(key_material, msg) \
51
+ ASSERT_FAILS(mongocrypt_ctx_setopt_key_material(ctx, key_material), ctx, msg);
52
+
53
+ #define ASSERT_ALGORITHM_OK(algo, algo_len) ASSERT_OK(mongocrypt_ctx_setopt_algorithm(ctx, algo, algo_len), ctx);
54
+ #define ASSERT_ALGORITHM_FAILS(algo, algo_len, msg) \
55
+ ASSERT_FAILS(mongocrypt_ctx_setopt_algorithm(ctx, algo, algo_len), ctx, msg);
56
+
57
+ #define ASSERT_QUERY_TYPE_OK(qt, qt_len) ASSERT_OK(mongocrypt_ctx_setopt_query_type(ctx, qt, qt_len), ctx);
58
+ #define ASSERT_QUERY_TYPE_FAILS(qt, qt_len, msg) \
59
+ ASSERT_FAILS(mongocrypt_ctx_setopt_query_type(ctx, qt, qt_len), ctx, msg);
60
+
61
+ #define ASSERT_ENDPOINT_OK(endpoint, endpoint_len) \
62
+ ASSERT_OK(mongocrypt_ctx_setopt_masterkey_aws_endpoint(ctx, endpoint, endpoint_len), ctx);
63
+ #define ASSERT_ENDPOINT_FAILS(endpoint, endpoint_len, msg) \
64
+ ASSERT_FAILS(mongocrypt_ctx_setopt_masterkey_aws_endpoint(ctx, endpoint, endpoint_len), ctx, msg);
65
+
66
+ #define ASSERT_DATAKEY_INIT_OK ASSERT_OK(mongocrypt_ctx_datakey_init(ctx), ctx);
67
+ #define ASSERT_DATAKEY_INIT_FAILS(msg) ASSERT_FAILS(mongocrypt_ctx_datakey_init(ctx), ctx, msg);
68
+
69
+ #define ASSERT_ENCRYPT_INIT_OK(db, db_len, cmd) ASSERT_OK(mongocrypt_ctx_encrypt_init(ctx, db, db_len, cmd), ctx);
70
+ #define ENCRYPT_INIT_FAILS(db, db_len, cmd, msg) \
71
+ ASSERT_FAILS(mongocrypt_ctx_encrypt_init(ctx, db, db_len, cmd), ctx, msg);
72
+
73
+ #define ASSERT_EX_ENCRYPT_INIT_OK(bin) ASSERT_OK(mongocrypt_ctx_explicit_encrypt_init(ctx, bin), ctx);
74
+ #define ASSERT_EX_ENCRYPT_INIT_FAILS(bin, msg) ASSERT_FAILS(mongocrypt_ctx_explicit_encrypt_init(ctx, bin), ctx, msg);
75
+
76
+ #define ASSERT_EX_ENCRYPT_EXPRESSION_INIT_OK(bin) \
77
+ ASSERT_OK(mongocrypt_ctx_explicit_encrypt_expression_init(ctx, bin), ctx);
78
+ #define ASSERT_EX_ENCRYPT_EXPRESSION_INIT_FAILS(bin, msg) \
79
+ ASSERT_FAILS(mongocrypt_ctx_explicit_encrypt_expression_init(ctx, bin), ctx, msg);
80
+
81
+ #define ASSERT_DECRYPT_INIT_OK(bin) ASSERT_OK(mongocrypt_ctx_decrypt_init(ctx, bin), ctx);
82
+ #define ASSERT_DECRYPT_INIT_FAILS(bin, msg) ASSERT_FAILS(mongocrypt_ctx_decrypt_init(ctx, bin), ctx, msg);
83
+
84
+ #define ASSERT_EX_DECRYPT_INIT_OK(bin) ASSERT_OK(mongocrypt_ctx_explicit_decrypt_init(ctx, bin), ctx);
85
+ #define ASSERT_EX_DECRYPT_INIT_FAILS(bin, msg) ASSERT_FAILS(mongocrypt_ctx_explicit_decrypt_init(ctx, bin), ctx, msg);
86
+
87
+ #define REFRESH \
88
+ do { \
89
+ mongocrypt_destroy(crypt); \
90
+ crypt = _mongocrypt_tester_mongocrypt(TESTER_MONGOCRYPT_DEFAULT); \
91
+ REFRESH_CTX; \
92
+ } while (0)
93
+
94
+ #define REFRESH_CTX \
95
+ do { \
96
+ mongocrypt_ctx_destroy(ctx); \
97
+ ctx = mongocrypt_ctx_new(crypt); \
98
+ } while (0)
122
99
 
123
100
  #define DET MONGOCRYPT_ALGORITHM_DETERMINISTIC_STR
124
101
  #define RAND MONGOCRYPT_ALGORITHM_RANDOM_STR
125
102
 
126
103
  /* Test valid and invalid options */
127
- static void
128
- _test_setopt_masterkey_aws (_mongocrypt_tester_t *tester)
129
- {
130
- mongocrypt_t *crypt;
131
- mongocrypt_ctx_t *ctx = NULL;
132
-
133
- crypt = _mongocrypt_tester_mongocrypt (TESTER_MONGOCRYPT_DEFAULT);
134
-
135
- REFRESH;
136
- ASSERT_MASTERKEY_AWS_FAILS (NULL, 0, "cmk", 3, "invalid region");
137
- REFRESH;
138
- ASSERT_MASTERKEY_AWS_FAILS ("region", 6, NULL, 0, "invalid cmk");
139
- REFRESH;
140
- ASSERT_MASTERKEY_AWS_FAILS ("region", 0, "cmk", 0, "invalid region");
141
- REFRESH;
142
- ASSERT_MASTERKEY_AWS_OK ("region", -1, "cmk", -1);
143
- REFRESH;
144
- ASSERT_MASTERKEY_AWS_FAILS ("region", -2, "cmk", -1, "invalid region");
145
- REFRESH;
146
- ASSERT_MASTERKEY_AWS_FAILS ("region", -1, "cmk", -2, "invalid cmk");
147
-
148
- /* Test invalid UTF 8 */
149
- REFRESH;
150
- ASSERT_MASTERKEY_AWS_FAILS (invalid_utf8, -1, "cmk", -2, "invalid region");
151
-
152
- /* Test double setting. */
153
- REFRESH;
154
- ASSERT_MASTERKEY_AWS_OK ("region", -1, "cmk", -1);
155
- ASSERT_MASTERKEY_AWS_FAILS (
156
- "region", -1, "cmk", -1, "master key already set");
157
-
158
- /* Cannot be set with local masterkey. */
159
- REFRESH;
160
- ASSERT_MASTERKEY_AWS_OK ("region", -1, "cmk", -1);
161
- ASSERT_MASTERKEY_LOCAL_FAILS ("master key already set");
162
-
163
- /* Cannot be set after entering error state. */
164
- REFRESH;
165
- _mongocrypt_ctx_fail_w_msg (ctx, "test");
166
- ASSERT_MASTERKEY_AWS_FAILS ("region", -1, "cmk", -1, "test");
167
-
168
- mongocrypt_ctx_destroy (ctx);
169
- mongocrypt_destroy (crypt);
104
+ static void _test_setopt_masterkey_aws(_mongocrypt_tester_t *tester) {
105
+ mongocrypt_t *crypt;
106
+ mongocrypt_ctx_t *ctx = NULL;
107
+
108
+ crypt = _mongocrypt_tester_mongocrypt(TESTER_MONGOCRYPT_DEFAULT);
109
+
110
+ REFRESH;
111
+ ASSERT_MASTERKEY_AWS_FAILS(NULL, 0, "cmk", 3, "invalid region");
112
+ REFRESH;
113
+ ASSERT_MASTERKEY_AWS_FAILS("region", 6, NULL, 0, "invalid cmk");
114
+ REFRESH;
115
+ ASSERT_MASTERKEY_AWS_FAILS("region", 0, "cmk", 0, "invalid region");
116
+ REFRESH;
117
+ ASSERT_MASTERKEY_AWS_OK("region", -1, "cmk", -1);
118
+ REFRESH;
119
+ ASSERT_MASTERKEY_AWS_FAILS("region", -2, "cmk", -1, "invalid region");
120
+ REFRESH;
121
+ ASSERT_MASTERKEY_AWS_FAILS("region", -1, "cmk", -2, "invalid cmk");
122
+
123
+ /* Test invalid UTF 8 */
124
+ REFRESH;
125
+ ASSERT_MASTERKEY_AWS_FAILS(invalid_utf8, -1, "cmk", -2, "invalid region");
126
+
127
+ /* Test double setting. */
128
+ REFRESH;
129
+ ASSERT_MASTERKEY_AWS_OK("region", -1, "cmk", -1);
130
+ ASSERT_MASTERKEY_AWS_FAILS("region", -1, "cmk", -1, "master key already set");
131
+
132
+ /* Cannot be set with local masterkey. */
133
+ REFRESH;
134
+ ASSERT_MASTERKEY_AWS_OK("region", -1, "cmk", -1);
135
+ ASSERT_MASTERKEY_LOCAL_FAILS("master key already set");
136
+
137
+ /* Cannot be set after entering error state. */
138
+ REFRESH;
139
+ _mongocrypt_ctx_fail_w_msg(ctx, "test");
140
+ ASSERT_MASTERKEY_AWS_FAILS("region", -1, "cmk", -1, "test");
141
+
142
+ mongocrypt_ctx_destroy(ctx);
143
+ mongocrypt_destroy(crypt);
170
144
  }
171
145
 
146
+ static void _test_setopt_masterkey_local(_mongocrypt_tester_t *tester) {
147
+ mongocrypt_t *crypt;
148
+ mongocrypt_ctx_t *ctx = NULL;
172
149
 
173
- static void
174
- _test_setopt_masterkey_local (_mongocrypt_tester_t *tester)
175
- {
176
- mongocrypt_t *crypt;
177
- mongocrypt_ctx_t *ctx = NULL;
150
+ crypt = _mongocrypt_tester_mongocrypt(TESTER_MONGOCRYPT_DEFAULT);
178
151
 
179
- crypt = _mongocrypt_tester_mongocrypt (TESTER_MONGOCRYPT_DEFAULT);
152
+ /* Test double setting. */
153
+ REFRESH;
154
+ ASSERT_MASTERKEY_LOCAL_OK;
155
+ ASSERT_MASTERKEY_LOCAL_FAILS("master key already set");
180
156
 
181
- /* Test double setting. */
182
- REFRESH;
183
- ASSERT_MASTERKEY_LOCAL_OK;
184
- ASSERT_MASTERKEY_LOCAL_FAILS ("master key already set");
157
+ /* Cannot be set with aws masterkey. */
158
+ REFRESH;
159
+ ASSERT_MASTERKEY_LOCAL_OK;
160
+ ASSERT_MASTERKEY_AWS_FAILS("region", -1, "cmk", -1, "master key already set");
185
161
 
186
- /* Cannot be set with aws masterkey. */
187
- REFRESH;
188
- ASSERT_MASTERKEY_LOCAL_OK;
189
- ASSERT_MASTERKEY_AWS_FAILS (
190
- "region", -1, "cmk", -1, "master key already set");
162
+ REFRESH;
163
+ _mongocrypt_ctx_fail_w_msg(ctx, "test");
164
+ ASSERT_MASTERKEY_LOCAL_FAILS("test");
191
165
 
192
- REFRESH;
193
- _mongocrypt_ctx_fail_w_msg (ctx, "test");
194
- ASSERT_MASTERKEY_LOCAL_FAILS ("test");
195
-
196
- mongocrypt_ctx_destroy (ctx);
197
- mongocrypt_destroy (crypt);
166
+ mongocrypt_ctx_destroy(ctx);
167
+ mongocrypt_destroy(crypt);
198
168
  }
199
169
 
200
- static void
201
- _test_setopt_key_encryption_key_azure (_mongocrypt_tester_t *tester)
202
- {
203
- mongocrypt_t *crypt;
204
- mongocrypt_ctx_t *ctx = NULL;
205
-
206
- crypt = _mongocrypt_tester_mongocrypt (TESTER_MONGOCRYPT_DEFAULT);
207
-
208
- /* Test double setting. */
209
- REFRESH;
210
- ASSERT_KEY_ENCRYPTION_KEY_OK (
211
- TEST_BSON ("{'provider': 'azure', 'keyName': '', "
212
- "'keyVaultEndpoint': 'example.com' }"));
213
- ASSERT_KEY_ENCRYPTION_KEY_FAILS (
214
- TEST_BSON ("{'provider': 'azure', 'keyName': '', "
215
- "'keyVaultEndpoint': 'example.com' }"),
216
- "key encryption key already set");
217
-
218
- /* Cannot be set when another masterkey is set. */
219
- REFRESH;
220
- ASSERT_MASTERKEY_LOCAL_OK;
221
- ASSERT_KEY_ENCRYPTION_KEY_FAILS (
222
- TEST_BSON ("{'provider': 'azure', 'keyName': '', "
223
- "'keyVaultEndpoint': 'example.com' }"),
224
- "key encryption key already set");
225
-
226
- REFRESH;
227
- _mongocrypt_ctx_fail_w_msg (ctx, "test");
228
- ASSERT_KEY_ENCRYPTION_KEY_FAILS (
229
- TEST_BSON ("{'provider': 'azure', 'keyName': '', "
230
- "'keyVaultEndpoint': 'example.com' }"),
231
- "test");
232
-
233
- mongocrypt_ctx_destroy (ctx);
234
- mongocrypt_destroy (crypt);
170
+ static void _test_setopt_key_encryption_key_azure(_mongocrypt_tester_t *tester) {
171
+ mongocrypt_t *crypt;
172
+ mongocrypt_ctx_t *ctx = NULL;
173
+
174
+ crypt = _mongocrypt_tester_mongocrypt(TESTER_MONGOCRYPT_DEFAULT);
175
+
176
+ /* Test double setting. */
177
+ REFRESH;
178
+ ASSERT_KEY_ENCRYPTION_KEY_OK(TEST_BSON("{'provider': 'azure', 'keyName': '', "
179
+ "'keyVaultEndpoint': 'example.com' }"));
180
+ ASSERT_KEY_ENCRYPTION_KEY_FAILS(TEST_BSON("{'provider': 'azure', 'keyName': '', "
181
+ "'keyVaultEndpoint': 'example.com' }"),
182
+ "key encryption key already set");
183
+
184
+ /* Cannot be set when another masterkey is set. */
185
+ REFRESH;
186
+ ASSERT_MASTERKEY_LOCAL_OK;
187
+ ASSERT_KEY_ENCRYPTION_KEY_FAILS(TEST_BSON("{'provider': 'azure', 'keyName': '', "
188
+ "'keyVaultEndpoint': 'example.com' }"),
189
+ "key encryption key already set");
190
+
191
+ REFRESH;
192
+ _mongocrypt_ctx_fail_w_msg(ctx, "test");
193
+ ASSERT_KEY_ENCRYPTION_KEY_FAILS(TEST_BSON("{'provider': 'azure', 'keyName': '', "
194
+ "'keyVaultEndpoint': 'example.com' }"),
195
+ "test");
196
+
197
+ mongocrypt_ctx_destroy(ctx);
198
+ mongocrypt_destroy(crypt);
235
199
  }
236
200
 
237
- static void
238
- _test_setopt_key_encryption_key_gcp (_mongocrypt_tester_t *tester)
239
- {
240
- mongocrypt_t *crypt;
241
- mongocrypt_ctx_t *ctx = NULL;
242
-
243
- crypt = _mongocrypt_tester_mongocrypt (TESTER_MONGOCRYPT_DEFAULT);
244
-
245
- /* Test double setting. */
246
- REFRESH;
247
- ASSERT_KEY_ENCRYPTION_KEY_OK (
248
- TEST_BSON ("{'provider': 'gcp', 'projectId': 'proj', 'location': "
249
- "'google.com', 'keyRing': 'ring', 'keyName': 'key' }"));
250
- ASSERT_KEY_ENCRYPTION_KEY_FAILS (
251
- TEST_BSON ("{'provider': 'gcp', 'projectId': 'proj', 'location': "
252
- "'google.com', 'keyRing': 'ring', 'keyName': 'key' }"),
253
- "key encryption key already set");
254
-
255
- /* Cannot be set when another masterkey is set. */
256
- REFRESH;
257
- ASSERT_MASTERKEY_LOCAL_OK;
258
- ASSERT_KEY_ENCRYPTION_KEY_FAILS (
259
- TEST_BSON ("{'provider': 'gcp', 'projectId': 'proj', 'location': "
260
- "'google.com', 'keyRing': 'ring', 'keyName': 'key' }"),
261
- "key encryption key already set");
262
-
263
- REFRESH;
264
- _mongocrypt_ctx_fail_w_msg (ctx, "test");
265
- ASSERT_KEY_ENCRYPTION_KEY_FAILS (
266
- TEST_BSON ("{'provider': 'gcp', 'projectId': 'proj', 'location': "
267
- "'google.com', 'keyRing': 'ring', 'keyName': 'key' }"),
268
- "test");
269
-
270
- mongocrypt_ctx_destroy (ctx);
271
- mongocrypt_destroy (crypt);
201
+ static void _test_setopt_key_encryption_key_gcp(_mongocrypt_tester_t *tester) {
202
+ mongocrypt_t *crypt;
203
+ mongocrypt_ctx_t *ctx = NULL;
204
+
205
+ crypt = _mongocrypt_tester_mongocrypt(TESTER_MONGOCRYPT_DEFAULT);
206
+
207
+ /* Test double setting. */
208
+ REFRESH;
209
+ ASSERT_KEY_ENCRYPTION_KEY_OK(TEST_BSON("{'provider': 'gcp', 'projectId': 'proj', 'location': "
210
+ "'google.com', 'keyRing': 'ring', 'keyName': 'key' }"));
211
+ ASSERT_KEY_ENCRYPTION_KEY_FAILS(TEST_BSON("{'provider': 'gcp', 'projectId': 'proj', 'location': "
212
+ "'google.com', 'keyRing': 'ring', 'keyName': 'key' }"),
213
+ "key encryption key already set");
214
+
215
+ /* Cannot be set when another masterkey is set. */
216
+ REFRESH;
217
+ ASSERT_MASTERKEY_LOCAL_OK;
218
+ ASSERT_KEY_ENCRYPTION_KEY_FAILS(TEST_BSON("{'provider': 'gcp', 'projectId': 'proj', 'location': "
219
+ "'google.com', 'keyRing': 'ring', 'keyName': 'key' }"),
220
+ "key encryption key already set");
221
+
222
+ REFRESH;
223
+ _mongocrypt_ctx_fail_w_msg(ctx, "test");
224
+ ASSERT_KEY_ENCRYPTION_KEY_FAILS(TEST_BSON("{'provider': 'gcp', 'projectId': 'proj', 'location': "
225
+ "'google.com', 'keyRing': 'ring', 'keyName': 'key' }"),
226
+ "test");
227
+
228
+ mongocrypt_ctx_destroy(ctx);
229
+ mongocrypt_destroy(crypt);
272
230
  }
273
231
 
232
+ static void _test_setopt_key_id(_mongocrypt_tester_t *tester) {
233
+ mongocrypt_t *crypt;
234
+ mongocrypt_ctx_t *ctx = NULL;
274
235
 
275
- static void
276
- _test_setopt_key_id (_mongocrypt_tester_t *tester)
277
- {
278
- mongocrypt_t *crypt;
279
- mongocrypt_ctx_t *ctx = NULL;
280
-
281
- crypt = _mongocrypt_tester_mongocrypt (TESTER_MONGOCRYPT_DEFAULT);
236
+ crypt = _mongocrypt_tester_mongocrypt(TESTER_MONGOCRYPT_DEFAULT);
282
237
 
283
- /* Test double setting. */
284
- REFRESH;
285
- ASSERT_KEY_ID_OK (TEST_BIN (16));
286
- ASSERT_KEY_ID_FAILS (TEST_BIN (16), "option already set");
238
+ /* Test double setting. */
239
+ REFRESH;
240
+ ASSERT_KEY_ID_OK(TEST_BIN(16));
241
+ ASSERT_KEY_ID_FAILS(TEST_BIN(16), "option already set");
287
242
 
288
- /* Test NULL/empty input */
289
- REFRESH;
290
- ASSERT_KEY_ID_FAILS (NULL, "option must be non-NULL");
243
+ /* Test NULL/empty input */
244
+ REFRESH;
245
+ ASSERT_KEY_ID_FAILS(NULL, "option must be non-NULL");
291
246
 
292
- REFRESH;
293
- ASSERT_KEY_ID_FAILS (TEST_BIN (0), "option must be non-NULL");
247
+ REFRESH;
248
+ ASSERT_KEY_ID_FAILS(TEST_BIN(0), "option must be non-NULL");
294
249
 
295
- /* Test wrong length */
296
- REFRESH;
297
- ASSERT_KEY_ID_FAILS (TEST_BIN (5), "expected 16 byte UUID");
250
+ /* Test wrong length */
251
+ REFRESH;
252
+ ASSERT_KEY_ID_FAILS(TEST_BIN(5), "expected 16 byte UUID");
298
253
 
299
- REFRESH;
300
- _mongocrypt_ctx_fail_w_msg (ctx, "test");
301
- ASSERT_KEY_ID_FAILS (TEST_BIN (16), "test");
254
+ REFRESH;
255
+ _mongocrypt_ctx_fail_w_msg(ctx, "test");
256
+ ASSERT_KEY_ID_FAILS(TEST_BIN(16), "test");
302
257
 
303
- mongocrypt_ctx_destroy (ctx);
304
- mongocrypt_destroy (crypt);
258
+ mongocrypt_ctx_destroy(ctx);
259
+ mongocrypt_destroy(crypt);
305
260
  }
306
261
 
262
+ static void _test_setopt_key_alt_name(_mongocrypt_tester_t *tester) {
263
+ mongocrypt_t *crypt;
264
+ mongocrypt_ctx_t *ctx = NULL;
307
265
 
308
- static void
309
- _test_setopt_key_alt_name (_mongocrypt_tester_t *tester)
310
- {
311
- mongocrypt_t *crypt;
312
- mongocrypt_ctx_t *ctx = NULL;
266
+ crypt = _mongocrypt_tester_mongocrypt(TESTER_MONGOCRYPT_DEFAULT);
313
267
 
314
- crypt = _mongocrypt_tester_mongocrypt (TESTER_MONGOCRYPT_DEFAULT);
268
+ /* Test double setting - actually succeeds since multiple key alt names
269
+ * allowed for data keys. */
270
+ REFRESH;
271
+ ASSERT_KEY_ALT_NAME_OK(TEST_BSON("{'keyAltName': 'abc'}"));
272
+ ASSERT_KEY_ALT_NAME_OK(TEST_BSON("{'keyAltName': 'def'}"));
315
273
 
316
- /* Test double setting - actually succeeds since multiple key alt names
317
- * allowed for data keys. */
318
- REFRESH;
319
- ASSERT_KEY_ALT_NAME_OK (TEST_BSON ("{'keyAltName': 'abc'}"));
320
- ASSERT_KEY_ALT_NAME_OK (TEST_BSON ("{'keyAltName': 'def'}"));
274
+ /* Test NULL/empty input */
275
+ REFRESH;
276
+ ASSERT_KEY_ALT_NAME_FAILS(NULL, "option must be non-NULL");
321
277
 
322
- /* Test NULL/empty input */
323
- REFRESH;
324
- ASSERT_KEY_ALT_NAME_FAILS (NULL, "option must be non-NULL");
278
+ REFRESH;
279
+ ASSERT_KEY_ALT_NAME_FAILS(TEST_BIN(0), "option must be non-NULL");
325
280
 
326
- REFRESH;
327
- ASSERT_KEY_ALT_NAME_FAILS (TEST_BIN (0), "option must be non-NULL");
281
+ /* Test wrong type */
282
+ REFRESH;
283
+ REFRESH;
284
+ ASSERT_KEY_ALT_NAME_FAILS(TEST_BSON("{'keyAltName': 1}"), "keyAltName expected to be UTF8");
328
285
 
329
- /* Test wrong type */
330
- REFRESH;
331
- REFRESH;
332
- ASSERT_KEY_ALT_NAME_FAILS (TEST_BSON ("{'keyAltName': 1}"),
333
- "keyAltName expected to be UTF8");
286
+ /* Test missing key */
287
+ REFRESH;
288
+ ASSERT_KEY_ALT_NAME_FAILS(TEST_BSON("{'keyAltNames': 'abc'}"), "keyAltName must have field 'keyAltName'");
334
289
 
335
- /* Test missing key */
336
- REFRESH;
337
- ASSERT_KEY_ALT_NAME_FAILS (TEST_BSON ("{'keyAltNames': 'abc'}"),
338
- "keyAltName must have field 'keyAltName'");
290
+ /* Test extra key */
291
+ REFRESH;
292
+ ASSERT_KEY_ALT_NAME_FAILS(TEST_BSON("{'keyAltName': 'abc', 'extra': 1}"), "unrecognized field");
339
293
 
340
- /* Test extra key */
341
- REFRESH;
342
- ASSERT_KEY_ALT_NAME_FAILS (TEST_BSON ("{'keyAltName': 'abc', 'extra': 1}"),
343
- "unrecognized field");
344
-
345
- mongocrypt_ctx_destroy (ctx);
346
- mongocrypt_destroy (crypt);
294
+ mongocrypt_ctx_destroy(ctx);
295
+ mongocrypt_destroy(crypt);
347
296
  }
348
297
 
349
-
350
- static void
351
- _test_setopt_key_material (_mongocrypt_tester_t *tester)
352
- {
353
- /* "0123456789abcef", repeated 6 times. */
354
- const char *const material =
355
- "MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1"
356
- "Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVm";
357
- const char *const pattern =
358
- "{'keyMaterial': {'$binary': {'base64': '%s', 'subType': '00'}}%s}";
359
- mongocrypt_binary_t *const valid = TEST_BSON (pattern, material, "");
360
-
361
- mongocrypt_t *crypt =
362
- _mongocrypt_tester_mongocrypt (TESTER_MONGOCRYPT_DEFAULT);
363
- mongocrypt_ctx_t *ctx = NULL;
364
-
365
- /* Test double setting. */
366
- REFRESH;
367
- ASSERT_KEY_MATERIAL_OK (valid);
368
- ASSERT_KEY_MATERIAL_FAILS (valid, "keyMaterial already set");
369
-
370
- /* Test NULL input. */
371
- REFRESH;
372
- ASSERT_KEY_MATERIAL_FAILS (NULL, "option must be non-NULL");
373
-
374
- /* Test empty input. */
375
- REFRESH;
376
- ASSERT_KEY_MATERIAL_FAILS (TEST_BIN (0), "option must be non-NULL");
377
-
378
- /* Test empty key material. */
379
- REFRESH;
380
- ASSERT_KEY_MATERIAL_FAILS (
381
- TEST_BSON (pattern, "", ""),
382
- "keyMaterial should have length 96, but has length 0");
383
-
384
- /* Test too short key material. */
385
- REFRESH;
386
- ASSERT_KEY_MATERIAL_FAILS (
387
- TEST_BSON (pattern,
388
- "dG9vc2hvcnQ=", /* "tooshort" */
389
- ""),
390
- "keyMaterial should have length 96, but has length 8");
391
-
392
- /* Test too long key material. */
393
- REFRESH;
394
- ASSERT_KEY_MATERIAL_FAILS (
395
- TEST_BSON (
396
- pattern,
397
- /* "0123456789abcdef", repeated 6 times, followed by "toolong". */
398
- "MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyM"
399
- "zQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmdG9vbG9uZw"
400
- "==",
401
- ""),
402
- "keyMaterial should have length 96, but has length 103");
403
-
404
- /* Test invalid keyMaterial options. */
405
- REFRESH;
406
- ASSERT_KEY_MATERIAL_FAILS (TEST_BSON ("{}"), "invalid bson");
407
-
408
- REFRESH;
409
- ASSERT_KEY_MATERIAL_FAILS (TEST_BSON ("{'a': 1}"),
410
- "keyMaterial must have field 'keyMaterial'");
411
-
412
- REFRESH;
413
- ASSERT_KEY_MATERIAL_FAILS (TEST_BSON ("{'keyMaterial': 1}"),
414
- "keyMaterial must be binary data");
415
-
416
- /* Test extra key. */
417
- REFRESH;
418
- ASSERT_KEY_MATERIAL_FAILS (TEST_BSON (pattern, material, ", 'a': 1"),
298
+ static void _test_setopt_key_material(_mongocrypt_tester_t *tester) {
299
+ /* "0123456789abcef", repeated 6 times. */
300
+ const char *const material = "MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1"
301
+ "Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVm";
302
+ const char *const pattern = "{'keyMaterial': {'$binary': {'base64': '%s', 'subType': '00'}}%s}";
303
+ mongocrypt_binary_t *const valid = TEST_BSON(pattern, material, "");
304
+
305
+ mongocrypt_t *crypt = _mongocrypt_tester_mongocrypt(TESTER_MONGOCRYPT_DEFAULT);
306
+ mongocrypt_ctx_t *ctx = NULL;
307
+
308
+ /* Test double setting. */
309
+ REFRESH;
310
+ ASSERT_KEY_MATERIAL_OK(valid);
311
+ ASSERT_KEY_MATERIAL_FAILS(valid, "keyMaterial already set");
312
+
313
+ /* Test NULL input. */
314
+ REFRESH;
315
+ ASSERT_KEY_MATERIAL_FAILS(NULL, "option must be non-NULL");
316
+
317
+ /* Test empty input. */
318
+ REFRESH;
319
+ ASSERT_KEY_MATERIAL_FAILS(TEST_BIN(0), "option must be non-NULL");
320
+
321
+ /* Test empty key material. */
322
+ REFRESH;
323
+ ASSERT_KEY_MATERIAL_FAILS(TEST_BSON(pattern, "", ""), "keyMaterial should have length 96, but has length 0");
324
+
325
+ /* Test too short key material. */
326
+ REFRESH;
327
+ ASSERT_KEY_MATERIAL_FAILS(TEST_BSON(pattern,
328
+ "dG9vc2hvcnQ=", /* "tooshort" */
329
+ ""),
330
+ "keyMaterial should have length 96, but has length 8");
331
+
332
+ /* Test too long key material. */
333
+ REFRESH;
334
+ ASSERT_KEY_MATERIAL_FAILS(TEST_BSON(pattern,
335
+ /* "0123456789abcdef", repeated 6 times, followed by "toolong". */
336
+ "MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyM"
337
+ "zQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmdG9vbG9uZw"
338
+ "==",
339
+ ""),
340
+ "keyMaterial should have length 96, but has length 103");
341
+
342
+ /* Test invalid keyMaterial options. */
343
+ REFRESH;
344
+ ASSERT_KEY_MATERIAL_FAILS(TEST_BSON("{}"), "invalid bson");
345
+
346
+ REFRESH;
347
+ ASSERT_KEY_MATERIAL_FAILS(TEST_BSON("{'a': 1}"), "keyMaterial must have field 'keyMaterial'");
348
+
349
+ REFRESH;
350
+ ASSERT_KEY_MATERIAL_FAILS(TEST_BSON("{'keyMaterial': 1}"), "keyMaterial must be binary data");
351
+
352
+ /* Test extra key. */
353
+ REFRESH;
354
+ ASSERT_KEY_MATERIAL_FAILS(TEST_BSON(pattern, material, ", 'a': 1"),
419
355
  "unrecognized field, only keyMaterial expected");
420
356
 
421
- /* Test error propagation. */
422
- REFRESH;
423
- ASSERT (!_mongocrypt_ctx_fail_w_msg (ctx, "test"));
424
- ASSERT_KEY_MATERIAL_FAILS (valid, "test");
357
+ /* Test error propagation. */
358
+ REFRESH;
359
+ ASSERT(!_mongocrypt_ctx_fail_w_msg(ctx, "test"));
360
+ ASSERT_KEY_MATERIAL_FAILS(valid, "test");
425
361
 
426
- mongocrypt_ctx_destroy (ctx);
427
- mongocrypt_destroy (crypt);
362
+ mongocrypt_ctx_destroy(ctx);
363
+ mongocrypt_destroy(crypt);
428
364
  }
429
365
 
366
+ static void _test_setopt_algorithm(_mongocrypt_tester_t *tester) {
367
+ mongocrypt_t *crypt;
368
+ mongocrypt_ctx_t *ctx = NULL;
430
369
 
431
- static void
432
- _test_setopt_algorithm (_mongocrypt_tester_t *tester)
433
- {
434
- mongocrypt_t *crypt;
435
- mongocrypt_ctx_t *ctx = NULL;
370
+ crypt = _mongocrypt_tester_mongocrypt(TESTER_MONGOCRYPT_DEFAULT);
436
371
 
437
- crypt = _mongocrypt_tester_mongocrypt (TESTER_MONGOCRYPT_DEFAULT);
372
+ REFRESH;
373
+ ASSERT_ALGORITHM_FAILS(DET, -2, "invalid algorithm length");
438
374
 
439
- REFRESH;
440
- ASSERT_ALGORITHM_FAILS (DET, -2, "invalid algorithm length");
375
+ REFRESH;
376
+ ASSERT_ALGORITHM_OK(DET, 43);
441
377
 
442
- REFRESH;
443
- ASSERT_ALGORITHM_OK (DET, 43);
378
+ REFRESH;
379
+ ASSERT_ALGORITHM_FAILS(DET, 42, "unsupported algorithm");
444
380
 
445
- REFRESH;
446
- ASSERT_ALGORITHM_FAILS (DET, 42, "unsupported algorithm");
381
+ /* Check for prior bug. It's "Random", not "Randomized" */
382
+ REFRESH;
383
+ ASSERT_ALGORITHM_FAILS(RAND "ized", -1, "unsupported algorithm");
447
384
 
448
- /* Check for prior bug. It's "Random", not "Randomized" */
449
- REFRESH;
450
- ASSERT_ALGORITHM_FAILS (RAND "ized", -1, "unsupported algorithm");
385
+ /* Test double setting. */
386
+ REFRESH;
387
+ ASSERT_ALGORITHM_OK(DET, -1);
388
+ ASSERT_ALGORITHM_FAILS(DET, -1, "already set algorithm");
451
389
 
452
- /* Test double setting. */
453
- REFRESH;
454
- ASSERT_ALGORITHM_OK (DET, -1);
455
- ASSERT_ALGORITHM_FAILS (DET, -1, "already set algorithm");
390
+ /* Test NULL input */
391
+ REFRESH;
392
+ ASSERT_ALGORITHM_FAILS(NULL, 0, "passed null algorithm");
456
393
 
457
- /* Test NULL input */
458
- REFRESH;
459
- ASSERT_ALGORITHM_FAILS (NULL, 0, "passed null algorithm");
394
+ REFRESH;
395
+ _mongocrypt_ctx_fail_w_msg(ctx, "test");
396
+ ASSERT_ALGORITHM_FAILS(RAND, -1, "test")
460
397
 
461
- REFRESH;
462
- _mongocrypt_ctx_fail_w_msg (ctx, "test");
463
- ASSERT_ALGORITHM_FAILS (RAND, -1, "test")
398
+ /* Test case insensitive. */
399
+ REFRESH;
400
+ ASSERT_ALGORITHM_OK("aEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", -1);
401
+ REFRESH;
402
+ ASSERT_ALGORITHM_OK("aEAD_AES_256_CBC_HMAC_SHA_512-Random", -1);
403
+ REFRESH;
404
+ ASSERT_ALGORITHM_OK("indexed", -1);
405
+ REFRESH;
406
+ ASSERT_ALGORITHM_OK("unindexed", -1);
464
407
 
465
- /* Test case insensitive. */
466
- REFRESH;
467
- ASSERT_ALGORITHM_OK ("aEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", -1);
468
- REFRESH;
469
- ASSERT_ALGORITHM_OK ("aEAD_AES_256_CBC_HMAC_SHA_512-Random", -1);
470
- REFRESH;
471
- ASSERT_ALGORITHM_OK ("indexed", -1);
472
- REFRESH;
473
- ASSERT_ALGORITHM_OK ("unindexed", -1);
474
-
475
- mongocrypt_ctx_destroy (ctx);
476
- mongocrypt_destroy (crypt);
408
+ mongocrypt_ctx_destroy(ctx);
409
+ mongocrypt_destroy(crypt);
477
410
  }
478
411
 
479
- static void
480
- _test_setopt_query_type (_mongocrypt_tester_t *tester)
481
- {
482
- mongocrypt_t *crypt;
483
- mongocrypt_ctx_t *ctx = NULL;
412
+ static void _test_setopt_query_type(_mongocrypt_tester_t *tester) {
413
+ mongocrypt_t *crypt;
414
+ mongocrypt_ctx_t *ctx = NULL;
484
415
 
485
- crypt = _mongocrypt_tester_mongocrypt (TESTER_MONGOCRYPT_DEFAULT);
416
+ crypt = _mongocrypt_tester_mongocrypt(TESTER_MONGOCRYPT_DEFAULT);
486
417
 
487
- /* Test valid input. */
488
- REFRESH;
489
- ASSERT_QUERY_TYPE_OK (MONGOCRYPT_QUERY_TYPE_EQUALITY_STR,
490
- (int) strlen (MONGOCRYPT_QUERY_TYPE_EQUALITY_STR));
418
+ /* Test valid input. */
419
+ REFRESH;
420
+ ASSERT_QUERY_TYPE_OK(MONGOCRYPT_QUERY_TYPE_EQUALITY_STR, (int)strlen(MONGOCRYPT_QUERY_TYPE_EQUALITY_STR));
491
421
 
492
- /* Test invalid length. */
493
- REFRESH;
494
- ASSERT_QUERY_TYPE_FAILS ("foo", -2, "Invalid query_type string length");
422
+ /* Test invalid length. */
423
+ REFRESH;
424
+ ASSERT_QUERY_TYPE_FAILS("foo", -2, "Invalid query_type string length");
495
425
 
496
- /* Test double setting. */
497
- REFRESH;
498
- ASSERT_QUERY_TYPE_OK (MONGOCRYPT_QUERY_TYPE_EQUALITY_STR, -1);
499
- ASSERT_QUERY_TYPE_OK (MONGOCRYPT_QUERY_TYPE_EQUALITY_STR, -1);
426
+ /* Test double setting. */
427
+ REFRESH;
428
+ ASSERT_QUERY_TYPE_OK(MONGOCRYPT_QUERY_TYPE_EQUALITY_STR, -1);
429
+ ASSERT_QUERY_TYPE_OK(MONGOCRYPT_QUERY_TYPE_EQUALITY_STR, -1);
500
430
 
501
- /* Test NULL input */
502
- REFRESH;
503
- ASSERT_QUERY_TYPE_FAILS (NULL, 0, "Invalid null query_type string");
431
+ /* Test NULL input */
432
+ REFRESH;
433
+ ASSERT_QUERY_TYPE_FAILS(NULL, 0, "Invalid null query_type string");
504
434
 
505
- /* Test with failed context. */
506
- REFRESH;
507
- _mongocrypt_ctx_fail_w_msg (ctx, "test");
508
- ASSERT_QUERY_TYPE_FAILS (MONGOCRYPT_QUERY_TYPE_EQUALITY_STR, -1, "test")
435
+ /* Test with failed context. */
436
+ REFRESH;
437
+ _mongocrypt_ctx_fail_w_msg(ctx, "test");
438
+ ASSERT_QUERY_TYPE_FAILS(MONGOCRYPT_QUERY_TYPE_EQUALITY_STR, -1, "test")
509
439
 
510
- /* Test case insensitive. */
511
- REFRESH;
512
- ASSERT_QUERY_TYPE_OK ("Equality", -1);
440
+ /* Test case insensitive. */
441
+ REFRESH;
442
+ ASSERT_QUERY_TYPE_OK("Equality", -1);
513
443
 
514
- mongocrypt_ctx_destroy (ctx);
515
- mongocrypt_destroy (crypt);
444
+ mongocrypt_ctx_destroy(ctx);
445
+ mongocrypt_destroy(crypt);
516
446
  }
517
447
 
518
-
519
448
  /* Test required and prohibited options on a datakey context. */
520
- static void
521
- _test_setopt_for_datakey (_mongocrypt_tester_t *tester)
522
- {
523
- mongocrypt_t *crypt;
524
- mongocrypt_ctx_t *ctx = NULL;
525
- mongocrypt_binary_t *uuid;
526
-
527
- crypt = _mongocrypt_tester_mongocrypt (TESTER_MONGOCRYPT_DEFAULT);
528
- uuid = TEST_BIN (16);
529
-
530
- /* Test required and prohibited options. */
531
- REFRESH;
532
- ASSERT_DATAKEY_INIT_FAILS ("master key required");
533
-
534
- REFRESH;
535
- ASSERT_MASTERKEY_AWS_OK ("region", -1, "cmk", -1);
536
- ASSERT_DATAKEY_INIT_OK;
537
-
538
- REFRESH;
539
- ASSERT_KEY_ENCRYPTION_KEY_OK (
540
- TEST_BSON ("{'provider': 'azure', 'keyName': '', "
541
- "'keyVaultEndpoint': 'example.com' }"));
542
- ASSERT_DATAKEY_INIT_OK;
543
-
544
- /* Test optional key alt names. */
545
- REFRESH;
546
- ASSERT_MASTERKEY_AWS_OK ("region", -1, "cmk", -1);
547
- ASSERT_KEY_ALT_NAME_OK (TEST_BSON ("{'keyAltName': 'abc'}"));
548
- ASSERT_DATAKEY_INIT_OK;
549
-
550
- /* Multiple key alt names are okay. */
551
- REFRESH;
552
- ASSERT_MASTERKEY_AWS_OK ("region", -1, "cmk", -1);
553
- ASSERT_KEY_ALT_NAME_OK (TEST_BSON ("{'keyAltName': 'abc'}"));
554
- ASSERT_KEY_ALT_NAME_OK (TEST_BSON ("{'keyAltName': 'def'}"));
555
- ASSERT_DATAKEY_INIT_OK;
556
-
557
- /* But duplicates are not. */
558
- REFRESH;
559
- ASSERT_MASTERKEY_AWS_OK ("region", -1, "cmk", -1);
560
- ASSERT_KEY_ALT_NAME_OK (TEST_BSON ("{'keyAltName': 'abc'}"));
561
- ASSERT_KEY_ALT_NAME_FAILS (TEST_BSON ("{'keyAltName': 'abc'}"),
562
- "duplicate keyAltNames found");
563
-
564
- /* Key Material is okay. */
565
- REFRESH;
566
- ASSERT_MASTERKEY_AWS_OK ("region", -1, "cmk", -1);
567
- ASSERT_KEY_MATERIAL_OK (
568
- TEST_BSON ("{'keyMaterial': {'$binary': {'base64': "
569
- "'MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJj"
570
- "ZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5Y"
571
- "WJjZGVm', 'subType': '00'}}}"));
572
- ASSERT_DATAKEY_INIT_OK;
573
-
574
- /* Test each prohibited option. */
575
- REFRESH;
576
- ASSERT_MASTERKEY_AWS_OK ("region", -1, "cmk", -1);
577
- ASSERT_KEY_ID_OK (uuid);
578
- ASSERT_DATAKEY_INIT_FAILS ("key id and alt name prohibited");
579
-
580
- REFRESH;
581
- ASSERT_MASTERKEY_AWS_OK ("region", -1, "cmk", -1);
582
- ASSERT_ALGORITHM_OK (MONGOCRYPT_ALGORITHM_DETERMINISTIC_STR, -1);
583
- ASSERT_DATAKEY_INIT_FAILS ("algorithm prohibited");
584
-
585
- /* Test setting options after init. */
586
- REFRESH;
587
- ASSERT_MASTERKEY_AWS_OK ("region", -1, "cmk", -1);
588
- ASSERT_DATAKEY_INIT_OK;
589
- ASSERT_MASTERKEY_AWS_FAILS (
590
- "region", -1, "cmk", -1, "cannot set options after init");
591
-
592
- REFRESH;
593
- ASSERT_MASTERKEY_AWS_OK ("region", -1, "cmk", -1);
594
- ASSERT_ENDPOINT_OK ("example.com:80", -1);
595
- ASSERT_DATAKEY_INIT_OK;
596
-
597
- REFRESH;
598
- ASSERT_MASTERKEY_LOCAL_OK;
599
- ASSERT_ENDPOINT_FAILS ("example.com:80", -1, "endpoint prohibited");
600
-
601
- mongocrypt_ctx_destroy (ctx);
602
- mongocrypt_destroy (crypt);
449
+ static void _test_setopt_for_datakey(_mongocrypt_tester_t *tester) {
450
+ mongocrypt_t *crypt;
451
+ mongocrypt_ctx_t *ctx = NULL;
452
+ mongocrypt_binary_t *uuid;
453
+
454
+ crypt = _mongocrypt_tester_mongocrypt(TESTER_MONGOCRYPT_DEFAULT);
455
+ uuid = TEST_BIN(16);
456
+
457
+ /* Test required and prohibited options. */
458
+ REFRESH;
459
+ ASSERT_DATAKEY_INIT_FAILS("master key required");
460
+
461
+ REFRESH;
462
+ ASSERT_MASTERKEY_AWS_OK("region", -1, "cmk", -1);
463
+ ASSERT_DATAKEY_INIT_OK;
464
+
465
+ REFRESH;
466
+ ASSERT_KEY_ENCRYPTION_KEY_OK(TEST_BSON("{'provider': 'azure', 'keyName': '', "
467
+ "'keyVaultEndpoint': 'example.com' }"));
468
+ ASSERT_DATAKEY_INIT_OK;
469
+
470
+ /* Test optional key alt names. */
471
+ REFRESH;
472
+ ASSERT_MASTERKEY_AWS_OK("region", -1, "cmk", -1);
473
+ ASSERT_KEY_ALT_NAME_OK(TEST_BSON("{'keyAltName': 'abc'}"));
474
+ ASSERT_DATAKEY_INIT_OK;
475
+
476
+ /* Multiple key alt names are okay. */
477
+ REFRESH;
478
+ ASSERT_MASTERKEY_AWS_OK("region", -1, "cmk", -1);
479
+ ASSERT_KEY_ALT_NAME_OK(TEST_BSON("{'keyAltName': 'abc'}"));
480
+ ASSERT_KEY_ALT_NAME_OK(TEST_BSON("{'keyAltName': 'def'}"));
481
+ ASSERT_DATAKEY_INIT_OK;
482
+
483
+ /* But duplicates are not. */
484
+ REFRESH;
485
+ ASSERT_MASTERKEY_AWS_OK("region", -1, "cmk", -1);
486
+ ASSERT_KEY_ALT_NAME_OK(TEST_BSON("{'keyAltName': 'abc'}"));
487
+ ASSERT_KEY_ALT_NAME_FAILS(TEST_BSON("{'keyAltName': 'abc'}"), "duplicate keyAltNames found");
488
+
489
+ /* Key Material is okay. */
490
+ REFRESH;
491
+ ASSERT_MASTERKEY_AWS_OK("region", -1, "cmk", -1);
492
+ ASSERT_KEY_MATERIAL_OK(TEST_BSON("{'keyMaterial': {'$binary': {'base64': "
493
+ "'MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJj"
494
+ "ZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5Y"
495
+ "WJjZGVm', 'subType': '00'}}}"));
496
+ ASSERT_DATAKEY_INIT_OK;
497
+
498
+ /* Test each prohibited option. */
499
+ REFRESH;
500
+ ASSERT_MASTERKEY_AWS_OK("region", -1, "cmk", -1);
501
+ ASSERT_KEY_ID_OK(uuid);
502
+ ASSERT_DATAKEY_INIT_FAILS("key id and alt name prohibited");
503
+
504
+ REFRESH;
505
+ ASSERT_MASTERKEY_AWS_OK("region", -1, "cmk", -1);
506
+ ASSERT_ALGORITHM_OK(MONGOCRYPT_ALGORITHM_DETERMINISTIC_STR, -1);
507
+ ASSERT_DATAKEY_INIT_FAILS("algorithm prohibited");
508
+
509
+ /* Test setting options after init. */
510
+ REFRESH;
511
+ ASSERT_MASTERKEY_AWS_OK("region", -1, "cmk", -1);
512
+ ASSERT_DATAKEY_INIT_OK;
513
+ ASSERT_MASTERKEY_AWS_FAILS("region", -1, "cmk", -1, "cannot set options after init");
514
+
515
+ REFRESH;
516
+ ASSERT_MASTERKEY_AWS_OK("region", -1, "cmk", -1);
517
+ ASSERT_ENDPOINT_OK("example.com:80", -1);
518
+ ASSERT_DATAKEY_INIT_OK;
519
+
520
+ REFRESH;
521
+ ASSERT_MASTERKEY_LOCAL_OK;
522
+ ASSERT_ENDPOINT_FAILS("example.com:80", -1, "endpoint prohibited");
523
+
524
+ mongocrypt_ctx_destroy(ctx);
525
+ mongocrypt_destroy(crypt);
603
526
  }
604
527
 
605
-
606
- static void
607
- _test_setopt_for_encrypt (_mongocrypt_tester_t *tester)
608
- {
609
- mongocrypt_t *crypt;
610
- mongocrypt_ctx_t *ctx = NULL;
611
- mongocrypt_binary_t *uuid, *cmd;
612
-
613
- crypt = _mongocrypt_tester_mongocrypt (TESTER_MONGOCRYPT_DEFAULT);
614
- cmd = TEST_FILE ("./test/example/cmd.json");
615
- uuid = TEST_BIN (16);
616
-
617
- /* Test required and prohibited options. */
618
- REFRESH;
619
- ASSERT_ENCRYPT_INIT_OK ("a", -1, cmd);
620
-
621
- REFRESH;
622
- ASSERT_MASTERKEY_AWS_OK ("region", -1, "cmk", -1);
623
- ENCRYPT_INIT_FAILS ("a", -1, cmd, "master key prohibited");
624
-
625
- REFRESH;
626
- ASSERT_MASTERKEY_LOCAL_OK;
627
- ENCRYPT_INIT_FAILS ("a", -1, cmd, "master key prohibited");
628
-
629
- REFRESH;
630
- ASSERT_KEY_ENCRYPTION_KEY_OK (
631
- TEST_BSON ("{'provider': 'azure', 'keyName': '', "
632
- "'keyVaultEndpoint': 'example.com' }"));
633
- ENCRYPT_INIT_FAILS ("a", -1, cmd, "master key prohibited");
634
-
635
- REFRESH;
636
- ASSERT_KEY_ID_OK (uuid);
637
- ENCRYPT_INIT_FAILS ("a", -1, cmd, "key id and alt name prohibited");
638
-
639
- REFRESH;
640
- ASSERT_KEY_ALT_NAME_OK (TEST_BSON ("{'keyAltName': 'abc'}"));
641
- ENCRYPT_INIT_FAILS ("a", -1, cmd, "key id and alt name prohibited");
642
-
643
- REFRESH;
644
- ASSERT_KEY_MATERIAL_OK (
645
- TEST_BSON ("{'keyMaterial': {'$binary': {'base64': "
646
- "'MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJj"
647
- "ZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5Y"
648
- "WJjZGVm', 'subType': '00'}}}"));
649
- ENCRYPT_INIT_FAILS ("a", -1, cmd, "key material prohibited");
650
-
651
- REFRESH;
652
- ASSERT_ALGORITHM_OK (DET, -1);
653
- ENCRYPT_INIT_FAILS ("a", -1, cmd, "algorithm prohibited");
654
-
655
- REFRESH;
656
- ENCRYPT_INIT_FAILS ("a", -1, NULL, "invalid command");
657
-
658
- /* Test setting options after init. */
659
- REFRESH;
660
- ASSERT_ENCRYPT_INIT_OK ("a", -1, cmd);
661
- ASSERT_MASTERKEY_LOCAL_FAILS ("cannot set options after init");
662
-
663
- mongocrypt_ctx_destroy (ctx);
664
- mongocrypt_destroy (crypt);
528
+ static void _test_setopt_for_encrypt(_mongocrypt_tester_t *tester) {
529
+ mongocrypt_t *crypt;
530
+ mongocrypt_ctx_t *ctx = NULL;
531
+ mongocrypt_binary_t *uuid, *cmd;
532
+
533
+ crypt = _mongocrypt_tester_mongocrypt(TESTER_MONGOCRYPT_DEFAULT);
534
+ cmd = TEST_FILE("./test/example/cmd.json");
535
+ uuid = TEST_BIN(16);
536
+
537
+ /* Test required and prohibited options. */
538
+ REFRESH;
539
+ ASSERT_ENCRYPT_INIT_OK("a", -1, cmd);
540
+
541
+ REFRESH;
542
+ ASSERT_MASTERKEY_AWS_OK("region", -1, "cmk", -1);
543
+ ENCRYPT_INIT_FAILS("a", -1, cmd, "master key prohibited");
544
+
545
+ REFRESH;
546
+ ASSERT_MASTERKEY_LOCAL_OK;
547
+ ENCRYPT_INIT_FAILS("a", -1, cmd, "master key prohibited");
548
+
549
+ REFRESH;
550
+ ASSERT_KEY_ENCRYPTION_KEY_OK(TEST_BSON("{'provider': 'azure', 'keyName': '', "
551
+ "'keyVaultEndpoint': 'example.com' }"));
552
+ ENCRYPT_INIT_FAILS("a", -1, cmd, "master key prohibited");
553
+
554
+ REFRESH;
555
+ ASSERT_KEY_ID_OK(uuid);
556
+ ENCRYPT_INIT_FAILS("a", -1, cmd, "key id and alt name prohibited");
557
+
558
+ REFRESH;
559
+ ASSERT_KEY_ALT_NAME_OK(TEST_BSON("{'keyAltName': 'abc'}"));
560
+ ENCRYPT_INIT_FAILS("a", -1, cmd, "key id and alt name prohibited");
561
+
562
+ REFRESH;
563
+ ASSERT_KEY_MATERIAL_OK(TEST_BSON("{'keyMaterial': {'$binary': {'base64': "
564
+ "'MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJj"
565
+ "ZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5Y"
566
+ "WJjZGVm', 'subType': '00'}}}"));
567
+ ENCRYPT_INIT_FAILS("a", -1, cmd, "key material prohibited");
568
+
569
+ REFRESH;
570
+ ASSERT_ALGORITHM_OK(DET, -1);
571
+ ENCRYPT_INIT_FAILS("a", -1, cmd, "algorithm prohibited");
572
+
573
+ REFRESH;
574
+ ENCRYPT_INIT_FAILS("a", -1, NULL, "invalid command");
575
+
576
+ /* Test setting options after init. */
577
+ REFRESH;
578
+ ASSERT_ENCRYPT_INIT_OK("a", -1, cmd);
579
+ ASSERT_MASTERKEY_LOCAL_FAILS("cannot set options after init");
580
+
581
+ mongocrypt_ctx_destroy(ctx);
582
+ mongocrypt_destroy(crypt);
665
583
  }
666
584
 
667
-
668
- static void
669
- _test_setopt_for_explicit_encrypt (_mongocrypt_tester_t *tester)
670
- {
671
- mongocrypt_t *crypt;
672
- mongocrypt_ctx_t *ctx = NULL;
673
- mongocrypt_binary_t *bson, *uuid, *rangeopts;
674
-
675
- crypt = _mongocrypt_tester_mongocrypt (TESTER_MONGOCRYPT_DEFAULT);
676
- uuid = TEST_BIN (16);
677
- bson = TEST_BSON ("{'v': 'hello'}");
678
- rangeopts =
679
- TEST_BSON ("{'min': 0, 'max': 1, 'sparsity': {'$numberLong': '1'}}");
680
-
681
- /* Test required and prohibited options. */
682
- REFRESH;
683
- ASSERT_KEY_ID_OK (uuid);
684
- ASSERT_ALGORITHM_OK (RAND, -1);
685
- ASSERT_EX_ENCRYPT_INIT_OK (bson);
686
-
687
- /* Just keyAltName is ok */
688
- REFRESH;
689
- ASSERT_KEY_ALT_NAME_OK (TEST_BSON ("{'keyAltName': 'abc'}"));
690
- ASSERT_ALGORITHM_OK (RAND, -1);
691
- ASSERT_EX_ENCRYPT_INIT_OK (bson);
692
-
693
- /* Two keyAltNames is invalid */
694
- REFRESH;
695
- ASSERT_KEY_ALT_NAME_OK (TEST_BSON ("{'keyAltName': 'abc'}"));
696
- ASSERT_KEY_ALT_NAME_OK (TEST_BSON ("{'keyAltName': 'def'}"));
697
- ASSERT_ALGORITHM_OK (RAND, -1);
698
- ASSERT_EX_ENCRYPT_INIT_FAILS (bson,
699
- "must not specify multiple key alt names");
700
-
701
- /* Both keyAltName and keyId is invalid */
702
- REFRESH;
703
- ASSERT_KEY_ID_OK (uuid);
704
- ASSERT_KEY_ALT_NAME_OK (TEST_BSON ("{'keyAltName': 'abc'}"));
705
- ASSERT_ALGORITHM_OK (RAND, -1);
706
- ASSERT_EX_ENCRYPT_INIT_FAILS (bson,
707
- "cannot have both key id and key alt name");
708
-
709
- REFRESH;
710
- ASSERT_KEY_ID_OK (uuid);
711
- ASSERT_ALGORITHM_OK (RAND, -1);
712
- ASSERT_MASTERKEY_AWS_OK ("region", -1, "cmk", -1);
713
- ASSERT_EX_ENCRYPT_INIT_FAILS (bson, "master key prohibited");
714
-
715
- REFRESH;
716
- ASSERT_KEY_ALT_NAME_OK (TEST_BSON ("{'keyAltName': 'abc'}"));
717
- ASSERT_ALGORITHM_OK (RAND, -1);
718
- ASSERT_KEY_MATERIAL_OK (
719
- TEST_BSON ("{'keyMaterial': {'$binary': {'base64': "
720
- "'MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJj"
721
- "ZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5Y"
722
- "WJjZGVm', 'subType': '00'}}}"));
723
- ASSERT_EX_ENCRYPT_INIT_FAILS (bson, "key material prohibited");
724
-
725
- REFRESH;
726
- ASSERT_KEY_ID_OK (uuid);
727
- ASSERT_ALGORITHM_OK (RAND, -1);
728
- ASSERT_MASTERKEY_LOCAL_OK;
729
- ASSERT_EX_ENCRYPT_INIT_FAILS (bson, "master key prohibited");
730
-
731
- REFRESH;
732
- ASSERT_KEY_ID_OK (uuid);
733
- ASSERT_ALGORITHM_OK (RAND, -1);
734
- ASSERT_KEY_ENCRYPTION_KEY_OK (
735
- TEST_BSON ("{'provider': 'azure', 'keyName': '', "
736
- "'keyVaultEndpoint': 'example.com' }"));
737
- ASSERT_EX_ENCRYPT_INIT_FAILS (bson, "master key prohibited");
738
-
739
- REFRESH;
740
- ASSERT_KEY_ID_OK (uuid);
741
- ASSERT_EX_ENCRYPT_INIT_FAILS (bson, "algorithm or index type required");
742
-
743
- REFRESH;
744
- ASSERT_ALGORITHM_OK (RAND, -1);
745
- ASSERT_EX_ENCRYPT_INIT_FAILS (bson, "key id or key alt name required")
746
-
747
- REFRESH;
748
- ASSERT_KEY_ID_OK (uuid);
749
- ASSERT_ALGORITHM_OK (DET, -1);
750
- ASSERT_EX_ENCRYPT_INIT_OK (bson);
751
-
752
- /* Just key alt name is ok */
753
- REFRESH;
754
- ASSERT_KEY_ALT_NAME_OK (TEST_BSON ("{'keyAltName': 'abc'}"));
755
- ASSERT_ALGORITHM_OK (RAND, -1);
756
- ASSERT_MASTERKEY_AWS_OK ("region", -1, "cmk", -1);
757
- ASSERT_EX_ENCRYPT_INIT_FAILS (bson, "master key prohibited");
758
-
759
- REFRESH;
760
- ASSERT_KEY_ID_OK (uuid);
761
- ASSERT_ALGORITHM_OK (DET, -1);
762
- ASSERT_EX_ENCRYPT_INIT_OK (bson);
763
-
764
- /* Test setting options after init. */
765
- REFRESH;
766
- ASSERT_KEY_ID_OK (uuid);
767
- ASSERT_ALGORITHM_OK (RAND, -1);
768
- ASSERT_EX_ENCRYPT_INIT_OK (bson);
769
- ASSERT_ALGORITHM_FAILS (RAND, -1, "cannot set options after init");
770
-
771
- /* Test that an option failure validated at the time of 'setopt' persists
772
- * upon init. */
773
- REFRESH;
774
- ASSERT_KEY_ID_OK (uuid);
775
- ASSERT_ALGORITHM_FAILS ("bad-algo", -1, "unsupported algorithm");
776
- ASSERT_EX_ENCRYPT_INIT_FAILS (bson, "unsupported algorithm");
777
-
778
- /* It is an error to set the FLE 1 keyAltName option with any of the FLE 2
779
- * options (index_type, index_key_id, contention_factor, query_type, or
780
- * range opts). */
781
- {
782
- REFRESH;
783
- ASSERT_KEY_ALT_NAME_OK (TEST_BSON ("{'keyAltName': 'abc'}"));
784
- ASSERT_OK (mongocrypt_ctx_setopt_algorithm (
785
- ctx, MONGOCRYPT_ALGORITHM_UNINDEXED_STR, -1),
786
- ctx);
787
- ASSERT_EX_ENCRYPT_INIT_FAILS (
788
- bson, "cannot set both key alt name and index type");
789
-
790
- REFRESH;
791
- ASSERT_KEY_ALT_NAME_OK (TEST_BSON ("{'keyAltName': 'abc'}"));
792
- ASSERT_OK (mongocrypt_ctx_setopt_index_key_id (ctx, uuid), ctx);
793
- ASSERT_EX_ENCRYPT_INIT_FAILS (
794
- bson, "cannot set both key alt name and index key id");
795
-
796
- REFRESH;
797
- ASSERT_KEY_ALT_NAME_OK (TEST_BSON ("{'keyAltName': 'abc'}"));
798
- ASSERT_OK (mongocrypt_ctx_setopt_contention_factor (ctx, 123), ctx);
799
- ASSERT_EX_ENCRYPT_INIT_FAILS (
800
- bson, "cannot set both key alt name and contention factor");
801
-
802
- REFRESH;
803
- ASSERT_KEY_ALT_NAME_OK (TEST_BSON ("{'keyAltName': 'abc'}"));
804
- ASSERT_OK (mongocrypt_ctx_setopt_query_type (
805
- ctx, MONGOCRYPT_QUERY_TYPE_EQUALITY_STR, -1),
806
- ctx);
807
- ASSERT_EX_ENCRYPT_INIT_FAILS (
808
- bson, "cannot set both key alt name and query type");
809
-
810
- REFRESH;
811
- ASSERT_KEY_ALT_NAME_OK (TEST_BSON ("{'keyAltName': 'abc'}"));
812
- ASSERT_OK (mongocrypt_ctx_setopt_algorithm_range (ctx, rangeopts), ctx);
813
- ASSERT_EX_ENCRYPT_INIT_FAILS (
814
- bson, "cannot set both key alt name and range opts");
815
- }
816
-
817
- /* It is an error to set the FLE 1 algorithm option with any of the FLE 2
818
- * options (index_type, index_key_id, contention_factor, query_type, or
819
- * range opts). */
820
- {
821
- REFRESH;
822
- /* Set key ID to get past the 'either key id or key alt name required'
823
- * error */
824
- ASSERT_KEY_ID_OK (uuid);
825
- ASSERT_ALGORITHM_OK (RAND, -1);
826
- ASSERT_OK (mongocrypt_ctx_setopt_index_key_id (ctx, uuid), ctx);
827
- ASSERT_EX_ENCRYPT_INIT_FAILS (
828
- bson, "cannot set both algorithm and index key id");
829
-
830
- REFRESH;
831
- /* Set key ID to get past the 'either key id or key alt name required'
832
- * error */
833
- ASSERT_KEY_ID_OK (uuid);
834
- ASSERT_ALGORITHM_OK (RAND, -1);
835
- ASSERT_OK (mongocrypt_ctx_setopt_contention_factor (ctx, 123), ctx);
836
- ASSERT_EX_ENCRYPT_INIT_FAILS (
837
- bson, "cannot set both algorithm and contention factor");
838
- REFRESH;
839
- /* Set key ID to get past the 'either key id or key alt name required'
840
- * error */
841
- ASSERT_KEY_ID_OK (uuid);
842
- ASSERT_ALGORITHM_OK (RAND, -1);
843
- ASSERT_OK (mongocrypt_ctx_setopt_query_type (
844
- ctx, MONGOCRYPT_QUERY_TYPE_EQUALITY_STR, -1),
845
- ctx);
846
- ASSERT_EX_ENCRYPT_INIT_FAILS (bson,
847
- "cannot set both algorithm and query type");
848
- REFRESH;
849
- /* Set key ID to get past the 'either key id or key alt name required'
850
- * error */
851
- ASSERT_KEY_ID_OK (uuid);
852
- ASSERT_ALGORITHM_OK (RAND, -1);
853
- ASSERT_OK (mongocrypt_ctx_setopt_algorithm_range (ctx, rangeopts), ctx);
854
- ASSERT_EX_ENCRYPT_INIT_FAILS (bson,
855
- "cannot set both algorithm and range opts");
856
- }
857
-
858
- /* Require either index_type or algorithm */
859
- {
860
- REFRESH;
861
- /* Set key ID to get past the 'either key id or key alt name required'
862
- * error */
863
- ASSERT_KEY_ID_OK (uuid);
864
- ASSERT_EX_ENCRYPT_INIT_FAILS (bson, "algorithm or index type required");
865
- }
866
-
867
- /* It is an error to set contention_factor with index_type ==
868
- * MONGOCRYPT_INDEX_TYPE_NONE */
869
- {
870
- REFRESH;
871
- /* Set key ID to get past the 'either key id or key alt name required'
872
- * error */
873
- ASSERT_KEY_ID_OK (uuid);
874
- ASSERT_OK (mongocrypt_ctx_setopt_contention_factor (ctx, 0), ctx);
875
- ASSERT_OK (mongocrypt_ctx_setopt_algorithm (
876
- ctx, MONGOCRYPT_ALGORITHM_UNINDEXED_STR, -1),
877
- ctx);
878
- ASSERT_EX_ENCRYPT_INIT_FAILS (
879
- bson, "cannot set contention factor with no index type");
880
- }
881
-
882
- /* It is an error to set range opts with index_type ==
883
- * MONGOCRYPT_INDEX_TYPE_NONE */
884
- {
885
- REFRESH;
886
- /* Set key ID to get past the 'either key id or key alt name required'
887
- * error */
888
- ASSERT_KEY_ID_OK (uuid);
889
- ASSERT_OK (mongocrypt_ctx_setopt_algorithm_range (ctx, rangeopts), ctx);
890
- ASSERT_OK (mongocrypt_ctx_setopt_algorithm (
891
- ctx, MONGOCRYPT_ALGORITHM_UNINDEXED_STR, -1),
892
- ctx);
893
- ASSERT_EX_ENCRYPT_INIT_FAILS (bson,
894
- "cannot set range opts with no index type");
895
- }
896
-
897
- /* It is an error to set range opts with index_type ==
898
- * MONGOCRYPT_INDEX_TYPE_EQUALITY */
899
- {
900
- REFRESH;
901
- /* Set key ID to get past the 'either key id or key alt name required'
902
- * error */
903
- ASSERT_KEY_ID_OK (uuid);
904
- ASSERT_OK (mongocrypt_ctx_setopt_algorithm_range (ctx, rangeopts), ctx);
905
- ASSERT_OK (mongocrypt_ctx_setopt_algorithm (
906
- ctx, MONGOCRYPT_ALGORITHM_INDEXED_STR, -1),
907
- ctx);
908
- ASSERT_EX_ENCRYPT_INIT_FAILS (
909
- bson, "cannot set range opts with equality index type");
910
- }
911
-
912
- /* It is an error to set query_type with index_type ==
913
- * MONGOCRYPT_INDEX_TYPE_NONE */
914
- {
915
- REFRESH;
916
- /* Set key ID to get past the 'either key id or key alt name required'
917
- * error */
918
- ASSERT_KEY_ID_OK (uuid);
919
- ASSERT_OK (mongocrypt_ctx_setopt_query_type (
920
- ctx, MONGOCRYPT_QUERY_TYPE_EQUALITY_STR, -1),
921
- ctx);
922
- ASSERT_OK (mongocrypt_ctx_setopt_algorithm (
923
- ctx, MONGOCRYPT_ALGORITHM_UNINDEXED_STR, -1),
924
- ctx);
925
- ASSERT_EX_ENCRYPT_INIT_FAILS (bson,
926
- "cannot set query type with no index type");
927
- }
928
-
929
- /* Contention factor is required for "Indexed" algorithm. */
930
- {
931
- REFRESH;
932
- /* Set key ID to get past the 'either key id or key alt name required'
933
- * error */
934
- ASSERT_KEY_ID_OK (uuid);
935
- ASSERT_OK (mongocrypt_ctx_setopt_algorithm (
936
- ctx, MONGOCRYPT_ALGORITHM_INDEXED_STR, -1),
937
- ctx);
938
- ASSERT_EX_ENCRYPT_INIT_FAILS (bson, "contention factor is required");
939
- }
940
-
941
- /* Contention factor is required for "rangePreview" algorithm. */
942
- {
943
- REFRESH;
944
- /* Set key ID to get past the 'either key id or key alt name required'
945
- * error */
946
- ASSERT_KEY_ID_OK (uuid);
947
- ASSERT_OK (mongocrypt_ctx_setopt_algorithm_range (ctx, rangeopts), ctx);
948
- ASSERT_OK (mongocrypt_ctx_setopt_algorithm (
949
- ctx, MONGOCRYPT_ALGORITHM_RANGEPREVIEW_STR, -1),
950
- ctx);
951
- ASSERT_EX_ENCRYPT_INIT_FAILS (bson, "contention factor is required");
952
- }
953
-
954
- /* Range opts is required for "rangePreview" algorithm. */
955
- {
956
- REFRESH;
957
- /* Set key ID to get past the 'either key id or key alt name required'
958
- * error */
959
- ASSERT_KEY_ID_OK (uuid);
960
- ASSERT_OK (mongocrypt_ctx_setopt_contention_factor (ctx, 0), ctx);
961
- ASSERT_OK (mongocrypt_ctx_setopt_algorithm (
962
- ctx, MONGOCRYPT_ALGORITHM_RANGEPREVIEW_STR, -1),
963
- ctx);
964
- ASSERT_EX_ENCRYPT_INIT_FAILS (bson, "range opts are required");
965
- }
966
-
967
- /* Negative sparsity is prohibited. */
968
- {
969
- REFRESH;
970
- /* Set key ID to get past the 'either key id or key alt name required'
971
- * error */
972
- ASSERT_KEY_ID_OK (uuid);
973
- ASSERT_OK (
974
- mongocrypt_ctx_setopt_algorithm_range (
975
- ctx,
976
- TEST_BSON (
977
- "{'min': 0, 'max': 1, 'sparsity': { '$numberLong': '-1'}}")),
978
- ctx);
979
- ASSERT_OK (mongocrypt_ctx_setopt_contention_factor (ctx, 0), ctx);
980
- ASSERT_OK (mongocrypt_ctx_setopt_algorithm (
981
- ctx, MONGOCRYPT_ALGORITHM_RANGEPREVIEW_STR, -1),
982
- ctx);
983
- ASSERT_EX_ENCRYPT_INIT_FAILS (bson, "sparsity must be non-negative");
984
- }
985
-
986
- /* Error if query_type == "rangePreview" and algorithm != "rangePreview". */
987
- {
988
- REFRESH;
989
- ASSERT_KEY_ID_OK (uuid);
990
- ASSERT_ALGORITHM_OK (MONGOCRYPT_ALGORITHM_INDEXED_STR, -1);
991
- ASSERT_QUERY_TYPE_OK (MONGOCRYPT_QUERY_TYPE_RANGEPREVIEW_STR, -1);
992
- ASSERT_OK (mongocrypt_ctx_setopt_contention_factor (ctx, 0), ctx);
993
- ASSERT_EX_ENCRYPT_INIT_FAILS (bson, "must match index_type");
994
- }
995
-
996
- /* Error if query_type == "rangePreview" for
997
- * mongocrypt_ctx_explicit_encrypt_init. */
998
- {
999
- REFRESH;
1000
- ASSERT_KEY_ID_OK (uuid);
1001
- ASSERT_ALGORITHM_OK (MONGOCRYPT_ALGORITHM_RANGEPREVIEW_STR, -1);
1002
- ASSERT_QUERY_TYPE_OK (MONGOCRYPT_QUERY_TYPE_RANGEPREVIEW_STR, -1);
1003
- ASSERT_OK (
1004
- mongocrypt_ctx_setopt_algorithm_range (
1005
- ctx,
1006
- TEST_BSON (
1007
- "{'min': 0, 'max': 1, 'sparsity': {'$numberLong': '1'}}")),
1008
- ctx);
1009
- ASSERT_OK (mongocrypt_ctx_setopt_contention_factor (ctx, 0), ctx);
1010
- ASSERT_EX_ENCRYPT_INIT_FAILS (
1011
- bson,
1012
- "Encrypt may not be used for range queries. Use EncryptExpression.");
1013
- }
1014
-
1015
- /* Error if query_type is unset for
1016
- * mongocrypt_ctx_explicit_encrypt_expression_init. */
1017
- {
1018
- REFRESH;
1019
- ASSERT_KEY_ID_OK (uuid);
1020
- ASSERT_ALGORITHM_OK (MONGOCRYPT_ALGORITHM_RANGEPREVIEW_STR, -1);
1021
- ASSERT_OK (
1022
- mongocrypt_ctx_setopt_algorithm_range (
1023
- ctx,
1024
- TEST_BSON (
1025
- "{'min': 0, 'max': 1, 'sparsity': {'$numberLong': '1'}}")),
1026
- ctx);
1027
- ASSERT_OK (mongocrypt_ctx_setopt_contention_factor (ctx, 0), ctx);
1028
- ASSERT_EX_ENCRYPT_EXPRESSION_INIT_FAILS (
1029
- bson, "EncryptExpression may only be used for range queries.");
1030
- }
1031
-
1032
- mongocrypt_ctx_destroy (ctx);
1033
- mongocrypt_destroy (crypt);
585
+ static void _test_setopt_for_explicit_encrypt(_mongocrypt_tester_t *tester) {
586
+ mongocrypt_t *crypt;
587
+ mongocrypt_ctx_t *ctx = NULL;
588
+ mongocrypt_binary_t *bson, *uuid, *rangeopts;
589
+
590
+ crypt = _mongocrypt_tester_mongocrypt(TESTER_MONGOCRYPT_DEFAULT);
591
+ uuid = TEST_BIN(16);
592
+ bson = TEST_BSON("{'v': 'hello'}");
593
+ rangeopts = TEST_BSON("{'min': 0, 'max': 1, 'sparsity': {'$numberLong': '1'}}");
594
+
595
+ /* Test required and prohibited options. */
596
+ REFRESH;
597
+ ASSERT_KEY_ID_OK(uuid);
598
+ ASSERT_ALGORITHM_OK(RAND, -1);
599
+ ASSERT_EX_ENCRYPT_INIT_OK(bson);
600
+
601
+ /* Just keyAltName is ok */
602
+ REFRESH;
603
+ ASSERT_KEY_ALT_NAME_OK(TEST_BSON("{'keyAltName': 'abc'}"));
604
+ ASSERT_ALGORITHM_OK(RAND, -1);
605
+ ASSERT_EX_ENCRYPT_INIT_OK(bson);
606
+
607
+ /* Two keyAltNames is invalid */
608
+ REFRESH;
609
+ ASSERT_KEY_ALT_NAME_OK(TEST_BSON("{'keyAltName': 'abc'}"));
610
+ ASSERT_KEY_ALT_NAME_OK(TEST_BSON("{'keyAltName': 'def'}"));
611
+ ASSERT_ALGORITHM_OK(RAND, -1);
612
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "must not specify multiple key alt names");
613
+
614
+ /* Both keyAltName and keyId is invalid */
615
+ REFRESH;
616
+ ASSERT_KEY_ID_OK(uuid);
617
+ ASSERT_KEY_ALT_NAME_OK(TEST_BSON("{'keyAltName': 'abc'}"));
618
+ ASSERT_ALGORITHM_OK(RAND, -1);
619
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "cannot have both key id and key alt name");
620
+
621
+ REFRESH;
622
+ ASSERT_KEY_ID_OK(uuid);
623
+ ASSERT_ALGORITHM_OK(RAND, -1);
624
+ ASSERT_MASTERKEY_AWS_OK("region", -1, "cmk", -1);
625
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "master key prohibited");
626
+
627
+ REFRESH;
628
+ ASSERT_KEY_ALT_NAME_OK(TEST_BSON("{'keyAltName': 'abc'}"));
629
+ ASSERT_ALGORITHM_OK(RAND, -1);
630
+ ASSERT_KEY_MATERIAL_OK(TEST_BSON("{'keyMaterial': {'$binary': {'base64': "
631
+ "'MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJj"
632
+ "ZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5Y"
633
+ "WJjZGVm', 'subType': '00'}}}"));
634
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "key material prohibited");
635
+
636
+ REFRESH;
637
+ ASSERT_KEY_ID_OK(uuid);
638
+ ASSERT_ALGORITHM_OK(RAND, -1);
639
+ ASSERT_MASTERKEY_LOCAL_OK;
640
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "master key prohibited");
641
+
642
+ REFRESH;
643
+ ASSERT_KEY_ID_OK(uuid);
644
+ ASSERT_ALGORITHM_OK(RAND, -1);
645
+ ASSERT_KEY_ENCRYPTION_KEY_OK(TEST_BSON("{'provider': 'azure', 'keyName': '', "
646
+ "'keyVaultEndpoint': 'example.com' }"));
647
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "master key prohibited");
648
+
649
+ REFRESH;
650
+ ASSERT_KEY_ID_OK(uuid);
651
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "algorithm or index type required");
652
+
653
+ REFRESH;
654
+ ASSERT_ALGORITHM_OK(RAND, -1);
655
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "key id or key alt name required")
656
+
657
+ REFRESH;
658
+ ASSERT_KEY_ID_OK(uuid);
659
+ ASSERT_ALGORITHM_OK(DET, -1);
660
+ ASSERT_EX_ENCRYPT_INIT_OK(bson);
661
+
662
+ /* Just key alt name is ok */
663
+ REFRESH;
664
+ ASSERT_KEY_ALT_NAME_OK(TEST_BSON("{'keyAltName': 'abc'}"));
665
+ ASSERT_ALGORITHM_OK(RAND, -1);
666
+ ASSERT_MASTERKEY_AWS_OK("region", -1, "cmk", -1);
667
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "master key prohibited");
668
+
669
+ REFRESH;
670
+ ASSERT_KEY_ID_OK(uuid);
671
+ ASSERT_ALGORITHM_OK(DET, -1);
672
+ ASSERT_EX_ENCRYPT_INIT_OK(bson);
673
+
674
+ /* Test setting options after init. */
675
+ REFRESH;
676
+ ASSERT_KEY_ID_OK(uuid);
677
+ ASSERT_ALGORITHM_OK(RAND, -1);
678
+ ASSERT_EX_ENCRYPT_INIT_OK(bson);
679
+ ASSERT_ALGORITHM_FAILS(RAND, -1, "cannot set options after init");
680
+
681
+ /* Test that an option failure validated at the time of 'setopt' persists
682
+ * upon init. */
683
+ REFRESH;
684
+ ASSERT_KEY_ID_OK(uuid);
685
+ ASSERT_ALGORITHM_FAILS("bad-algo", -1, "unsupported algorithm");
686
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "unsupported algorithm");
687
+
688
+ /* It is an error to set the FLE 1 keyAltName option with any of the FLE 2
689
+ * options (index_type, index_key_id, contention_factor, query_type, or
690
+ * range opts). */
691
+ {
692
+ REFRESH;
693
+ ASSERT_KEY_ALT_NAME_OK(TEST_BSON("{'keyAltName': 'abc'}"));
694
+ ASSERT_OK(mongocrypt_ctx_setopt_algorithm(ctx, MONGOCRYPT_ALGORITHM_UNINDEXED_STR, -1), ctx);
695
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "cannot set both key alt name and index type");
696
+
697
+ REFRESH;
698
+ ASSERT_KEY_ALT_NAME_OK(TEST_BSON("{'keyAltName': 'abc'}"));
699
+ ASSERT_OK(mongocrypt_ctx_setopt_index_key_id(ctx, uuid), ctx);
700
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "cannot set both key alt name and index key id");
701
+
702
+ REFRESH;
703
+ ASSERT_KEY_ALT_NAME_OK(TEST_BSON("{'keyAltName': 'abc'}"));
704
+ ASSERT_OK(mongocrypt_ctx_setopt_contention_factor(ctx, 123), ctx);
705
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "cannot set both key alt name and contention factor");
706
+
707
+ REFRESH;
708
+ ASSERT_KEY_ALT_NAME_OK(TEST_BSON("{'keyAltName': 'abc'}"));
709
+ ASSERT_OK(mongocrypt_ctx_setopt_query_type(ctx, MONGOCRYPT_QUERY_TYPE_EQUALITY_STR, -1), ctx);
710
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "cannot set both key alt name and query type");
711
+
712
+ REFRESH;
713
+ ASSERT_KEY_ALT_NAME_OK(TEST_BSON("{'keyAltName': 'abc'}"));
714
+ ASSERT_OK(mongocrypt_ctx_setopt_algorithm_range(ctx, rangeopts), ctx);
715
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "cannot set both key alt name and range opts");
716
+ }
717
+
718
+ /* It is an error to set the FLE 1 algorithm option with any of the FLE 2
719
+ * options (index_type, index_key_id, contention_factor, query_type, or
720
+ * range opts). */
721
+ {
722
+ REFRESH;
723
+ /* Set key ID to get past the 'either key id or key alt name required'
724
+ * error */
725
+ ASSERT_KEY_ID_OK(uuid);
726
+ ASSERT_ALGORITHM_OK(RAND, -1);
727
+ ASSERT_OK(mongocrypt_ctx_setopt_index_key_id(ctx, uuid), ctx);
728
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "cannot set both algorithm and index key id");
729
+
730
+ REFRESH;
731
+ /* Set key ID to get past the 'either key id or key alt name required'
732
+ * error */
733
+ ASSERT_KEY_ID_OK(uuid);
734
+ ASSERT_ALGORITHM_OK(RAND, -1);
735
+ ASSERT_OK(mongocrypt_ctx_setopt_contention_factor(ctx, 123), ctx);
736
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "cannot set both algorithm and contention factor");
737
+ REFRESH;
738
+ /* Set key ID to get past the 'either key id or key alt name required'
739
+ * error */
740
+ ASSERT_KEY_ID_OK(uuid);
741
+ ASSERT_ALGORITHM_OK(RAND, -1);
742
+ ASSERT_OK(mongocrypt_ctx_setopt_query_type(ctx, MONGOCRYPT_QUERY_TYPE_EQUALITY_STR, -1), ctx);
743
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "cannot set both algorithm and query type");
744
+ REFRESH;
745
+ /* Set key ID to get past the 'either key id or key alt name required'
746
+ * error */
747
+ ASSERT_KEY_ID_OK(uuid);
748
+ ASSERT_ALGORITHM_OK(RAND, -1);
749
+ ASSERT_OK(mongocrypt_ctx_setopt_algorithm_range(ctx, rangeopts), ctx);
750
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "cannot set both algorithm and range opts");
751
+ }
752
+
753
+ /* Require either index_type or algorithm */
754
+ {
755
+ REFRESH;
756
+ /* Set key ID to get past the 'either key id or key alt name required'
757
+ * error */
758
+ ASSERT_KEY_ID_OK(uuid);
759
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "algorithm or index type required");
760
+ }
761
+
762
+ /* It is an error to set contention_factor with index_type ==
763
+ * MONGOCRYPT_INDEX_TYPE_NONE */
764
+ {
765
+ REFRESH;
766
+ /* Set key ID to get past the 'either key id or key alt name required'
767
+ * error */
768
+ ASSERT_KEY_ID_OK(uuid);
769
+ ASSERT_OK(mongocrypt_ctx_setopt_contention_factor(ctx, 0), ctx);
770
+ ASSERT_OK(mongocrypt_ctx_setopt_algorithm(ctx, MONGOCRYPT_ALGORITHM_UNINDEXED_STR, -1), ctx);
771
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "cannot set contention factor with no index type");
772
+ }
773
+
774
+ /* It is an error to set range opts with index_type ==
775
+ * MONGOCRYPT_INDEX_TYPE_NONE */
776
+ {
777
+ REFRESH;
778
+ /* Set key ID to get past the 'either key id or key alt name required'
779
+ * error */
780
+ ASSERT_KEY_ID_OK(uuid);
781
+ ASSERT_OK(mongocrypt_ctx_setopt_algorithm_range(ctx, rangeopts), ctx);
782
+ ASSERT_OK(mongocrypt_ctx_setopt_algorithm(ctx, MONGOCRYPT_ALGORITHM_UNINDEXED_STR, -1), ctx);
783
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "cannot set range opts with no index type");
784
+ }
785
+
786
+ /* It is an error to set range opts with index_type ==
787
+ * MONGOCRYPT_INDEX_TYPE_EQUALITY */
788
+ {
789
+ REFRESH;
790
+ /* Set key ID to get past the 'either key id or key alt name required'
791
+ * error */
792
+ ASSERT_KEY_ID_OK(uuid);
793
+ ASSERT_OK(mongocrypt_ctx_setopt_algorithm_range(ctx, rangeopts), ctx);
794
+ ASSERT_OK(mongocrypt_ctx_setopt_algorithm(ctx, MONGOCRYPT_ALGORITHM_INDEXED_STR, -1), ctx);
795
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "cannot set range opts with equality index type");
796
+ }
797
+
798
+ /* It is an error to set query_type with index_type ==
799
+ * MONGOCRYPT_INDEX_TYPE_NONE */
800
+ {
801
+ REFRESH;
802
+ /* Set key ID to get past the 'either key id or key alt name required'
803
+ * error */
804
+ ASSERT_KEY_ID_OK(uuid);
805
+ ASSERT_OK(mongocrypt_ctx_setopt_query_type(ctx, MONGOCRYPT_QUERY_TYPE_EQUALITY_STR, -1), ctx);
806
+ ASSERT_OK(mongocrypt_ctx_setopt_algorithm(ctx, MONGOCRYPT_ALGORITHM_UNINDEXED_STR, -1), ctx);
807
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "cannot set query type with no index type");
808
+ }
809
+
810
+ /* Contention factor is required for "Indexed" algorithm. */
811
+ {
812
+ REFRESH;
813
+ /* Set key ID to get past the 'either key id or key alt name required'
814
+ * error */
815
+ ASSERT_KEY_ID_OK(uuid);
816
+ ASSERT_OK(mongocrypt_ctx_setopt_algorithm(ctx, MONGOCRYPT_ALGORITHM_INDEXED_STR, -1), ctx);
817
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "contention factor is required");
818
+ }
819
+
820
+ /* Contention factor is required for "range" algorithm. */
821
+ {
822
+ REFRESH;
823
+ /* Set key ID to get past the 'either key id or key alt name required'
824
+ * error */
825
+ ASSERT_KEY_ID_OK(uuid);
826
+ ASSERT_OK(mongocrypt_ctx_setopt_algorithm_range(ctx, rangeopts), ctx);
827
+ ASSERT_OK(mongocrypt_ctx_setopt_algorithm(ctx, MONGOCRYPT_ALGORITHM_RANGE_STR, -1), ctx);
828
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "contention factor is required");
829
+ }
830
+
831
+ /* Range opts is required for "range" algorithm. */
832
+ {
833
+ REFRESH;
834
+ /* Set key ID to get past the 'either key id or key alt name required'
835
+ * error */
836
+ ASSERT_KEY_ID_OK(uuid);
837
+ ASSERT_OK(mongocrypt_ctx_setopt_contention_factor(ctx, 0), ctx);
838
+ ASSERT_OK(mongocrypt_ctx_setopt_algorithm(ctx, MONGOCRYPT_ALGORITHM_RANGE_STR, -1), ctx);
839
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "range opts are required");
840
+ }
841
+
842
+ /* Sparsity is optional for rangeV2. */
843
+ {
844
+ // Create a crypt with rangeV2 enabled.
845
+ mongocrypt_destroy(crypt);
846
+ crypt = _mongocrypt_tester_mongocrypt(TESTER_MONGOCRYPT_DEFAULT | TESTER_MONGOCRYPT_WITH_RANGE_V2);
847
+ REFRESH_CTX;
848
+ /* Set key ID to get past the 'either key id or key alt name required'
849
+ * error */
850
+ ASSERT_KEY_ID_OK(uuid);
851
+ ASSERT_OK(mongocrypt_ctx_setopt_algorithm_range(ctx, TEST_BSON("{'min': 0, 'max': 1}")), ctx);
852
+ ASSERT_OK(mongocrypt_ctx_setopt_contention_factor(ctx, 0), ctx);
853
+ ASSERT_OK(mongocrypt_ctx_setopt_algorithm(ctx, MONGOCRYPT_ALGORITHM_RANGE_STR, -1), ctx);
854
+ ASSERT(ctx->opts.rangeopts.set);
855
+ ASSERT_CMPINT64(ctx->opts.rangeopts.value.sparsity, ==, mc_FLERangeSparsityDefault);
856
+ ASSERT_EX_ENCRYPT_INIT_OK(bson);
857
+ }
858
+
859
+ /* Negative sparsity is prohibited. */
860
+ {
861
+ REFRESH;
862
+ /* Set key ID to get past the 'either key id or key alt name required'
863
+ * error */
864
+ ASSERT_KEY_ID_OK(uuid);
865
+ ASSERT_OK(mongocrypt_ctx_setopt_algorithm_range(
866
+ ctx,
867
+ TEST_BSON("{'min': 0, 'max': 1, 'sparsity': { '$numberLong': '-1'}}")),
868
+ ctx);
869
+ ASSERT_OK(mongocrypt_ctx_setopt_contention_factor(ctx, 0), ctx);
870
+ ASSERT_OK(mongocrypt_ctx_setopt_algorithm(ctx, MONGOCRYPT_ALGORITHM_RANGE_STR, -1), ctx);
871
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "sparsity must be non-negative");
872
+ }
873
+
874
+ /* Error if query_type == "range" and algorithm != "range". */
875
+ {
876
+ REFRESH;
877
+ ASSERT_KEY_ID_OK(uuid);
878
+ ASSERT_ALGORITHM_OK(MONGOCRYPT_ALGORITHM_INDEXED_STR, -1);
879
+ ASSERT_QUERY_TYPE_OK(MONGOCRYPT_QUERY_TYPE_RANGE_STR, -1);
880
+ ASSERT_OK(mongocrypt_ctx_setopt_contention_factor(ctx, 0), ctx);
881
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "must match index_type");
882
+ }
883
+
884
+ /* Error if query_type == "range" for
885
+ * mongocrypt_ctx_explicit_encrypt_init. */
886
+ {
887
+ REFRESH;
888
+ ASSERT_KEY_ID_OK(uuid);
889
+ ASSERT_ALGORITHM_OK(MONGOCRYPT_ALGORITHM_RANGE_STR, -1);
890
+ ASSERT_QUERY_TYPE_OK(MONGOCRYPT_QUERY_TYPE_RANGE_STR, -1);
891
+ ASSERT_OK(
892
+ mongocrypt_ctx_setopt_algorithm_range(ctx,
893
+ TEST_BSON("{'min': 0, 'max': 1, 'sparsity': {'$numberLong': '1'}}")),
894
+ ctx);
895
+ ASSERT_OK(mongocrypt_ctx_setopt_contention_factor(ctx, 0), ctx);
896
+ ASSERT_EX_ENCRYPT_INIT_FAILS(bson, "Encrypt may not be used for range queries. Use EncryptExpression.");
897
+ }
898
+
899
+ // Can't use "rangePreview" algorithm or query type with range V2.
900
+ {
901
+ mongocrypt_destroy(crypt);
902
+ crypt = _mongocrypt_tester_mongocrypt(TESTER_MONGOCRYPT_WITH_RANGE_V2);
903
+ REFRESH_CTX;
904
+ ASSERT_KEY_ID_OK(uuid);
905
+ ASSERT_FAILS(mongocrypt_ctx_setopt_algorithm(ctx, MONGOCRYPT_ALGORITHM_RANGEPREVIEW_DEPRECATED_STR, -1),
906
+ ctx,
907
+ "'rangePreview' is deprecated");
908
+
909
+ mongocrypt_destroy(crypt);
910
+ crypt = _mongocrypt_tester_mongocrypt(TESTER_MONGOCRYPT_WITH_RANGE_V2);
911
+ REFRESH_CTX;
912
+ ASSERT_KEY_ID_OK(uuid);
913
+ ASSERT_FAILS(mongocrypt_ctx_setopt_query_type(ctx, MONGOCRYPT_QUERY_TYPE_RANGEPREVIEW_DEPRECATED_STR, -1),
914
+ ctx,
915
+ "'rangePreview' is deprecated");
916
+ }
917
+
918
+ /* Error if query type == "rangePreview" and algorithm == "range" for range V1. */
919
+ // Explanation: Algorithm "rangePreview" accepts both query type "rangePreview" (for compatibility) and "range" (new
920
+ // behavior), but algorithm "range" only accepts query type "range". This is because if we are using the new
921
+ // algorithm type, we don't need to support the deprecated name for compatibility.
922
+ {
923
+ REFRESH;
924
+ ASSERT_KEY_ID_OK(uuid);
925
+ ASSERT_OK(mongocrypt_ctx_setopt_algorithm_range(ctx, rangeopts), ctx);
926
+ ASSERT_ALGORITHM_OK(MONGOCRYPT_ALGORITHM_RANGE_STR, -1);
927
+ ASSERT_QUERY_TYPE_OK(MONGOCRYPT_QUERY_TYPE_RANGEPREVIEW_DEPRECATED_STR, -1);
928
+ ASSERT_OK(mongocrypt_ctx_setopt_contention_factor(ctx, 0), ctx);
929
+ ASSERT_EX_ENCRYPT_EXPRESSION_INIT_FAILS(bson, "must match index_type");
930
+ }
931
+
932
+ /* If query type == "range" and algorithm == "rangePreview", succeeds for range V1 */
933
+ {
934
+ REFRESH;
935
+ ASSERT_KEY_ID_OK(uuid);
936
+ ASSERT_OK(mongocrypt_ctx_setopt_algorithm_range(ctx, rangeopts), ctx);
937
+ ASSERT_ALGORITHM_OK(MONGOCRYPT_ALGORITHM_RANGEPREVIEW_DEPRECATED_STR, -1);
938
+ ASSERT_QUERY_TYPE_OK(MONGOCRYPT_QUERY_TYPE_RANGE_STR, -1);
939
+ ASSERT_OK(mongocrypt_ctx_setopt_contention_factor(ctx, 0), ctx);
940
+ ASSERT_EX_ENCRYPT_EXPRESSION_INIT_OK(bson);
941
+ }
942
+
943
+ /* If query type == algorithm == "rangePreview", succeeds for range V1. */
944
+ {
945
+ REFRESH;
946
+ ASSERT_KEY_ID_OK(uuid);
947
+ ASSERT_OK(mongocrypt_ctx_setopt_algorithm_range(ctx, rangeopts), ctx);
948
+ ASSERT_ALGORITHM_OK(MONGOCRYPT_ALGORITHM_RANGEPREVIEW_DEPRECATED_STR, -1);
949
+ ASSERT_QUERY_TYPE_OK(MONGOCRYPT_QUERY_TYPE_RANGEPREVIEW_DEPRECATED_STR, -1);
950
+ ASSERT_OK(mongocrypt_ctx_setopt_contention_factor(ctx, 0), ctx);
951
+ ASSERT_EX_ENCRYPT_EXPRESSION_INIT_OK(bson);
952
+ }
953
+
954
+ /* If query type == algorithm == "range", succeeds for both V2 and V1. */
955
+ {
956
+ REFRESH;
957
+ ASSERT_KEY_ID_OK(uuid);
958
+ ASSERT_OK(mongocrypt_ctx_setopt_algorithm_range(ctx, rangeopts), ctx);
959
+ ASSERT_ALGORITHM_OK(MONGOCRYPT_ALGORITHM_RANGE_STR, -1);
960
+ ASSERT_QUERY_TYPE_OK(MONGOCRYPT_QUERY_TYPE_RANGE_STR, -1);
961
+ ASSERT_OK(mongocrypt_ctx_setopt_contention_factor(ctx, 0), ctx);
962
+ ASSERT_EX_ENCRYPT_EXPRESSION_INIT_OK(bson);
963
+
964
+ mongocrypt_destroy(crypt);
965
+ crypt = _mongocrypt_tester_mongocrypt(TESTER_MONGOCRYPT_WITH_RANGE_V2);
966
+ REFRESH_CTX;
967
+ ASSERT_KEY_ID_OK(uuid);
968
+ ASSERT_OK(mongocrypt_ctx_setopt_algorithm_range(ctx, rangeopts), ctx);
969
+ ASSERT_ALGORITHM_OK(MONGOCRYPT_ALGORITHM_RANGE_STR, -1);
970
+ ASSERT_QUERY_TYPE_OK(MONGOCRYPT_QUERY_TYPE_RANGE_STR, -1);
971
+ ASSERT_OK(mongocrypt_ctx_setopt_contention_factor(ctx, 0), ctx);
972
+ ASSERT_EX_ENCRYPT_EXPRESSION_INIT_OK(bson);
973
+ }
974
+
975
+ /* Error if query_type is unset for
976
+ * mongocrypt_ctx_explicit_encrypt_expression_init. */
977
+ {
978
+ REFRESH;
979
+ ASSERT_KEY_ID_OK(uuid);
980
+ ASSERT_ALGORITHM_OK(MONGOCRYPT_ALGORITHM_RANGE_STR, -1);
981
+ ASSERT_OK(
982
+ mongocrypt_ctx_setopt_algorithm_range(ctx,
983
+ TEST_BSON("{'min': 0, 'max': 1, 'sparsity': {'$numberLong': '1'}}")),
984
+ ctx);
985
+ ASSERT_OK(mongocrypt_ctx_setopt_contention_factor(ctx, 0), ctx);
986
+ ASSERT_EX_ENCRYPT_EXPRESSION_INIT_FAILS(bson, "EncryptExpression may only be used for range queries.");
987
+ }
988
+
989
+ mongocrypt_ctx_destroy(ctx);
990
+ mongocrypt_destroy(crypt);
1034
991
  }
1035
992
 
993
+ static void _test_setopt_for_decrypt(_mongocrypt_tester_t *tester) {
994
+ mongocrypt_t *crypt;
995
+ mongocrypt_ctx_t *ctx = NULL;
996
+ mongocrypt_binary_t *bson, *uuid;
997
+
998
+ crypt = _mongocrypt_tester_mongocrypt(TESTER_MONGOCRYPT_DEFAULT);
999
+ uuid = TEST_BIN(16);
1000
+ bson = TEST_BSON("{'a': 1}");
1001
+
1002
+ /* Test required and prohibited options. */
1003
+ REFRESH;
1004
+ ASSERT_DECRYPT_INIT_OK(bson);
1005
+
1006
+ REFRESH;
1007
+ ASSERT_MASTERKEY_AWS_OK("region", -1, "cmk", -1);
1008
+ ASSERT_DECRYPT_INIT_FAILS(bson, "master key prohibited");
1009
+
1010
+ REFRESH;
1011
+ ASSERT_MASTERKEY_LOCAL_OK;
1012
+ ASSERT_DECRYPT_INIT_FAILS(bson, "master key prohibited");
1013
+
1014
+ REFRESH;
1015
+ ASSERT_KEY_ENCRYPTION_KEY_OK(TEST_BSON("{'provider': 'azure', 'keyName': '', "
1016
+ "'keyVaultEndpoint': 'example.com' }"));
1017
+ ASSERT_DECRYPT_INIT_FAILS(bson, "master key prohibited");
1018
+
1019
+ REFRESH;
1020
+ ASSERT_KEY_ID_OK(uuid);
1021
+ ASSERT_DECRYPT_INIT_FAILS(bson, "key id and alt name prohibited");
1022
+
1023
+ REFRESH;
1024
+ ASSERT_KEY_ALT_NAME_OK(TEST_BSON("{'keyAltName': 'abc'}"));
1025
+ ASSERT_DECRYPT_INIT_FAILS(bson, "key id and alt name prohibited");
1026
+
1027
+ REFRESH;
1028
+ ASSERT_KEY_MATERIAL_OK(TEST_BSON("{'keyMaterial': {'$binary': {'base64': "
1029
+ "'MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJj"
1030
+ "ZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5Y"
1031
+ "WJjZGVm', 'subType': '00'}}}"));
1032
+ ASSERT_DECRYPT_INIT_FAILS(bson, "key material prohibited");
1033
+
1034
+ REFRESH;
1035
+ ASSERT_ALGORITHM_OK(DET, -1);
1036
+ ASSERT_DECRYPT_INIT_FAILS(bson, "algorithm prohibited");
1037
+
1038
+ /* Test setting options after init. */
1039
+ REFRESH;
1040
+ ASSERT_DECRYPT_INIT_OK(bson);
1041
+ ASSERT_MASTERKEY_LOCAL_FAILS("cannot set options after init");
1042
+
1043
+ mongocrypt_ctx_destroy(ctx);
1044
+ mongocrypt_destroy(crypt);
1045
+ }
1036
1046
 
1037
- static void
1038
- _test_setopt_for_decrypt (_mongocrypt_tester_t *tester)
1039
- {
1040
- mongocrypt_t *crypt;
1041
- mongocrypt_ctx_t *ctx = NULL;
1042
- mongocrypt_binary_t *bson, *uuid;
1043
-
1044
- crypt = _mongocrypt_tester_mongocrypt (TESTER_MONGOCRYPT_DEFAULT);
1045
- uuid = TEST_BIN (16);
1046
- bson = TEST_BSON ("{'a': 1}");
1047
-
1048
- /* Test required and prohibited options. */
1049
- REFRESH;
1050
- ASSERT_DECRYPT_INIT_OK (bson);
1051
-
1052
- REFRESH;
1053
- ASSERT_MASTERKEY_AWS_OK ("region", -1, "cmk", -1);
1054
- ASSERT_DECRYPT_INIT_FAILS (bson, "master key prohibited");
1055
-
1056
- REFRESH;
1057
- ASSERT_MASTERKEY_LOCAL_OK;
1058
- ASSERT_DECRYPT_INIT_FAILS (bson, "master key prohibited");
1059
-
1060
- REFRESH;
1061
- ASSERT_KEY_ENCRYPTION_KEY_OK (
1062
- TEST_BSON ("{'provider': 'azure', 'keyName': '', "
1063
- "'keyVaultEndpoint': 'example.com' }"));
1064
- ASSERT_DECRYPT_INIT_FAILS (bson, "master key prohibited");
1065
-
1066
- REFRESH;
1067
- ASSERT_KEY_ID_OK (uuid);
1068
- ASSERT_DECRYPT_INIT_FAILS (bson, "key id and alt name prohibited");
1069
-
1070
- REFRESH;
1071
- ASSERT_KEY_ALT_NAME_OK (TEST_BSON ("{'keyAltName': 'abc'}"));
1072
- ASSERT_DECRYPT_INIT_FAILS (bson, "key id and alt name prohibited");
1073
-
1074
- REFRESH;
1075
- ASSERT_KEY_MATERIAL_OK (
1076
- TEST_BSON ("{'keyMaterial': {'$binary': {'base64': "
1077
- "'MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJj"
1078
- "ZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5Y"
1079
- "WJjZGVm', 'subType': '00'}}}"));
1080
- ASSERT_DECRYPT_INIT_FAILS (bson, "key material prohibited");
1081
-
1082
- REFRESH;
1083
- ASSERT_ALGORITHM_OK (DET, -1);
1084
- ASSERT_DECRYPT_INIT_FAILS (bson, "algorithm prohibited");
1085
-
1086
- /* Test setting options after init. */
1087
- REFRESH;
1088
- ASSERT_DECRYPT_INIT_OK (bson);
1089
- ASSERT_MASTERKEY_LOCAL_FAILS ("cannot set options after init");
1090
-
1091
- mongocrypt_ctx_destroy (ctx);
1092
- mongocrypt_destroy (crypt);
1047
+ static void _test_setopt_for_explicit_decrypt(_mongocrypt_tester_t *tester) {
1048
+ mongocrypt_t *crypt;
1049
+ mongocrypt_ctx_t *ctx = NULL;
1050
+ mongocrypt_binary_t *bson, *uuid;
1051
+
1052
+ crypt = _mongocrypt_tester_mongocrypt(TESTER_MONGOCRYPT_DEFAULT);
1053
+ uuid = TEST_BIN(16);
1054
+ bson = TEST_FILE("./test/data/explicit-decryption-input.json");
1055
+
1056
+ /* Test required and prohibited options. */
1057
+ REFRESH;
1058
+ ASSERT_EX_DECRYPT_INIT_OK(bson);
1059
+
1060
+ REFRESH;
1061
+ ASSERT_MASTERKEY_AWS_OK("region", -1, "cmk", -1);
1062
+ ASSERT_EX_DECRYPT_INIT_FAILS(bson, "master key prohibited");
1063
+
1064
+ REFRESH;
1065
+ ASSERT_MASTERKEY_LOCAL_OK;
1066
+ ASSERT_EX_DECRYPT_INIT_FAILS(bson, "master key prohibited");
1067
+
1068
+ REFRESH;
1069
+ ASSERT_KEY_ENCRYPTION_KEY_OK(TEST_BSON("{'provider': 'azure', 'keyName': '', "
1070
+ "'keyVaultEndpoint': 'example.com' }"));
1071
+ ASSERT_EX_DECRYPT_INIT_FAILS(bson, "master key prohibited");
1072
+
1073
+ REFRESH;
1074
+ ASSERT_KEY_ID_OK(uuid);
1075
+ ASSERT_EX_DECRYPT_INIT_FAILS(bson, "key id and alt name prohibited");
1076
+
1077
+ REFRESH;
1078
+ ASSERT_KEY_ALT_NAME_OK(TEST_BSON("{'keyAltName': 'abc'}"));
1079
+ ASSERT_DECRYPT_INIT_FAILS(bson, "key id and alt name prohibited");
1080
+
1081
+ REFRESH;
1082
+ ASSERT_KEY_MATERIAL_OK(TEST_BSON("{'keyMaterial': {'$binary': {'base64': "
1083
+ "'MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJj"
1084
+ "ZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5Y"
1085
+ "WJjZGVm', 'subType': '00'}}}"));
1086
+ ASSERT_DECRYPT_INIT_FAILS(bson, "key material prohibited");
1087
+
1088
+ REFRESH;
1089
+ ASSERT_ALGORITHM_OK(DET, -1);
1090
+ ASSERT_EX_DECRYPT_INIT_FAILS(bson, "algorithm prohibited");
1091
+
1092
+ // Range opts are prohibited.
1093
+ REFRESH;
1094
+ ASSERT_OK(
1095
+ mongocrypt_ctx_setopt_algorithm_range(ctx, TEST_BSON("{'min': 0, 'max': 1, 'sparsity': {'$numberLong': '1'}}")),
1096
+ ctx);
1097
+ ASSERT_EX_DECRYPT_INIT_FAILS(bson, "range opts are prohibited");
1098
+
1099
+ mongocrypt_ctx_destroy(ctx);
1100
+ mongocrypt_destroy(crypt);
1093
1101
  }
1094
1102
 
1103
+ static void _test_setopt_failure_uninitialized(_mongocrypt_tester_t *tester) {
1104
+ mongocrypt_t *crypt;
1105
+ mongocrypt_ctx_t *ctx = NULL;
1106
+ mongocrypt_status_t *status;
1095
1107
 
1096
- static void
1097
- _test_setopt_for_explicit_decrypt (_mongocrypt_tester_t *tester)
1098
- {
1099
- mongocrypt_t *crypt;
1100
- mongocrypt_ctx_t *ctx = NULL;
1101
- mongocrypt_binary_t *bson, *uuid;
1102
-
1103
- crypt = _mongocrypt_tester_mongocrypt (TESTER_MONGOCRYPT_DEFAULT);
1104
- uuid = TEST_BIN (16);
1105
- bson = TEST_FILE ("./test/data/explicit-decryption-input.json");
1106
-
1107
- /* Test required and prohibited options. */
1108
- REFRESH;
1109
- ASSERT_EX_DECRYPT_INIT_OK (bson);
1110
-
1111
- REFRESH;
1112
- ASSERT_MASTERKEY_AWS_OK ("region", -1, "cmk", -1);
1113
- ASSERT_EX_DECRYPT_INIT_FAILS (bson, "master key prohibited");
1114
-
1115
- REFRESH;
1116
- ASSERT_MASTERKEY_LOCAL_OK;
1117
- ASSERT_EX_DECRYPT_INIT_FAILS (bson, "master key prohibited");
1118
-
1119
- REFRESH;
1120
- ASSERT_KEY_ENCRYPTION_KEY_OK (
1121
- TEST_BSON ("{'provider': 'azure', 'keyName': '', "
1122
- "'keyVaultEndpoint': 'example.com' }"));
1123
- ASSERT_EX_DECRYPT_INIT_FAILS (bson, "master key prohibited");
1124
-
1125
- REFRESH;
1126
- ASSERT_KEY_ID_OK (uuid);
1127
- ASSERT_EX_DECRYPT_INIT_FAILS (bson, "key id and alt name prohibited");
1128
-
1129
- REFRESH;
1130
- ASSERT_KEY_ALT_NAME_OK (TEST_BSON ("{'keyAltName': 'abc'}"));
1131
- ASSERT_DECRYPT_INIT_FAILS (bson, "key id and alt name prohibited");
1132
-
1133
- REFRESH;
1134
- ASSERT_KEY_MATERIAL_OK (
1135
- TEST_BSON ("{'keyMaterial': {'$binary': {'base64': "
1136
- "'MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJj"
1137
- "ZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5Y"
1138
- "WJjZGVm', 'subType': '00'}}}"));
1139
- ASSERT_DECRYPT_INIT_FAILS (bson, "key material prohibited");
1140
-
1141
- REFRESH;
1142
- ASSERT_ALGORITHM_OK (DET, -1);
1143
- ASSERT_EX_DECRYPT_INIT_FAILS (bson, "algorithm prohibited");
1144
-
1145
- // Range opts are prohibited.
1146
- REFRESH;
1147
- ASSERT_OK (
1148
- mongocrypt_ctx_setopt_algorithm_range (
1149
- ctx,
1150
- TEST_BSON ("{'min': 0, 'max': 1, 'sparsity': {'$numberLong': '1'}}")),
1151
- ctx);
1152
- ASSERT_EX_DECRYPT_INIT_FAILS (bson, "range opts are prohibited");
1153
-
1154
- mongocrypt_ctx_destroy (ctx);
1155
- mongocrypt_destroy (crypt);
1156
- }
1108
+ crypt = _mongocrypt_tester_mongocrypt(TESTER_MONGOCRYPT_DEFAULT);
1109
+ status = mongocrypt_status_new();
1157
1110
 
1111
+ REFRESH;
1112
+ ASSERT_KEY_ALT_NAME_FAILS(TEST_BSON("{'fake': 'abc'}"), "keyAltName must have field 'keyAltName'");
1113
+ /* Though mongocrypt_ctx_t is uninitialized, we should still get failure
1114
+ * status. */
1115
+ ASSERT_FAILS_STATUS(mongocrypt_ctx_status(ctx, status), status, "keyAltName must have field 'keyAltName'");
1158
1116
 
1159
- static void
1160
- _test_setopt_failure_uninitialized (_mongocrypt_tester_t *tester)
1161
- {
1162
- mongocrypt_t *crypt;
1163
- mongocrypt_ctx_t *ctx = NULL;
1164
- mongocrypt_status_t *status;
1165
-
1166
- crypt = _mongocrypt_tester_mongocrypt (TESTER_MONGOCRYPT_DEFAULT);
1167
- status = mongocrypt_status_new ();
1168
-
1169
- REFRESH;
1170
- ASSERT_KEY_ALT_NAME_FAILS (TEST_BSON ("{'fake': 'abc'}"),
1171
- "keyAltName must have field 'keyAltName'");
1172
- /* Though mongocrypt_ctx_t is uninitialized, we should still get failure
1173
- * status. */
1174
- ASSERT_FAILS_STATUS (mongocrypt_ctx_status (ctx, status),
1175
- status,
1176
- "keyAltName must have field 'keyAltName'");
1177
-
1178
- mongocrypt_ctx_destroy (ctx);
1179
- mongocrypt_destroy (crypt);
1180
- mongocrypt_status_destroy (status);
1117
+ mongocrypt_ctx_destroy(ctx);
1118
+ mongocrypt_destroy(crypt);
1119
+ mongocrypt_status_destroy(status);
1181
1120
  }
1182
1121
 
1122
+ static void _test_setopt_endpoint(_mongocrypt_tester_t *tester) {
1123
+ mongocrypt_t *crypt;
1124
+ mongocrypt_ctx_t *ctx = NULL;
1183
1125
 
1184
- static void
1185
- _test_setopt_endpoint (_mongocrypt_tester_t *tester)
1186
- {
1187
- mongocrypt_t *crypt;
1188
- mongocrypt_ctx_t *ctx = NULL;
1126
+ crypt = _mongocrypt_tester_mongocrypt(TESTER_MONGOCRYPT_DEFAULT);
1189
1127
 
1190
- crypt = _mongocrypt_tester_mongocrypt (TESTER_MONGOCRYPT_DEFAULT);
1128
+ REFRESH;
1129
+ ASSERT_ENDPOINT_FAILS("example.com", -2, "Invalid endpoint");
1191
1130
 
1192
- REFRESH;
1193
- ASSERT_ENDPOINT_FAILS ("example.com", -2, "Invalid endpoint");
1131
+ REFRESH;
1132
+ ASSERT_ENDPOINT_OK("example.com", -1);
1133
+ BSON_ASSERT(0 == strcmp(ctx->opts.kek.provider.aws.endpoint->host_and_port, "example.com"));
1194
1134
 
1195
- REFRESH;
1196
- ASSERT_ENDPOINT_OK ("example.com", -1);
1197
- BSON_ASSERT (0 == strcmp (ctx->opts.kek.provider.aws.endpoint->host_and_port,
1198
- "example.com"));
1135
+ /* Including a port is ok. */
1136
+ REFRESH;
1137
+ ASSERT_ENDPOINT_OK("example.com:80", -1);
1138
+ BSON_ASSERT(0 == strcmp(ctx->opts.kek.provider.aws.endpoint->host_and_port, "example.com:80"));
1199
1139
 
1200
- /* Including a port is ok. */
1201
- REFRESH;
1202
- ASSERT_ENDPOINT_OK ("example.com:80", -1);
1203
- BSON_ASSERT (0 == strcmp (ctx->opts.kek.provider.aws.endpoint->host_and_port,
1204
- "example.com:80"));
1140
+ /* Test double setting. */
1141
+ REFRESH;
1142
+ ASSERT_ENDPOINT_OK("example.com", -1);
1143
+ ASSERT_ENDPOINT_FAILS("example.com", -1, "already set masterkey endpoint");
1205
1144
 
1206
- /* Test double setting. */
1207
- REFRESH;
1208
- ASSERT_ENDPOINT_OK ("example.com", -1);
1209
- ASSERT_ENDPOINT_FAILS ("example.com", -1, "already set masterkey endpoint");
1145
+ /* Test NULL input */
1146
+ REFRESH;
1147
+ ASSERT_ENDPOINT_FAILS(NULL, 0, "Invalid endpoint");
1210
1148
 
1211
- /* Test NULL input */
1212
- REFRESH;
1213
- ASSERT_ENDPOINT_FAILS (NULL, 0, "Invalid endpoint");
1149
+ REFRESH;
1150
+ _mongocrypt_ctx_fail_w_msg(ctx, "test");
1151
+ ASSERT_ENDPOINT_FAILS(RAND, -1, "test")
1214
1152
 
1215
- REFRESH;
1216
- _mongocrypt_ctx_fail_w_msg (ctx, "test");
1217
- ASSERT_ENDPOINT_FAILS (RAND, -1, "test")
1218
-
1219
- mongocrypt_ctx_destroy (ctx);
1220
- mongocrypt_destroy (crypt);
1153
+ mongocrypt_ctx_destroy(ctx);
1154
+ mongocrypt_destroy(crypt);
1221
1155
  }
1222
1156
 
1223
- static void
1224
- _test_createdatakey_with_wrong_kms_provider_helper (
1225
- _mongocrypt_tester_t *tester, mongocrypt_binary_t *kms_provider)
1226
- {
1227
- mongocrypt_t *crypt;
1228
- mongocrypt_ctx_t *ctx;
1229
- const char *const kek = "{"
1230
- "'provider': 'azure',"
1231
- "'keyName': 'foo',"
1232
- "'keyVaultEndpoint': 'example.com'"
1233
- "}";
1234
-
1235
- crypt = mongocrypt_new ();
1236
- ASSERT_OK (mongocrypt_setopt_kms_providers (crypt, kms_provider), crypt);
1237
- mongocrypt_setopt_use_need_kms_credentials_state (crypt);
1238
- ASSERT_OK (mongocrypt_init (crypt), crypt);
1239
- ctx = mongocrypt_ctx_new (crypt);
1240
- ASSERT_OK (mongocrypt_ctx_setopt_key_encryption_key (ctx, TEST_BSON (kek)),
1241
- ctx);
1242
- ASSERT_FAILS (mongocrypt_ctx_datakey_init (ctx),
1243
- ctx,
1244
- "kms provider required by datakey is not configured");
1245
-
1246
- mongocrypt_ctx_destroy (ctx);
1247
- mongocrypt_destroy (crypt);
1157
+ static void _test_createdatakey_with_wrong_kms_provider_helper(_mongocrypt_tester_t *tester,
1158
+ mongocrypt_binary_t *kms_provider) {
1159
+ mongocrypt_t *crypt;
1160
+ mongocrypt_ctx_t *ctx;
1161
+ const char *const kek = "{"
1162
+ "'provider': 'azure',"
1163
+ "'keyName': 'foo',"
1164
+ "'keyVaultEndpoint': 'example.com'"
1165
+ "}";
1166
+
1167
+ crypt = mongocrypt_new();
1168
+ ASSERT_OK(mongocrypt_setopt_kms_providers(crypt, kms_provider), crypt);
1169
+ mongocrypt_setopt_use_need_kms_credentials_state(crypt);
1170
+ ASSERT_OK(_mongocrypt_init_for_test(crypt), crypt);
1171
+ ctx = mongocrypt_ctx_new(crypt);
1172
+ ASSERT_OK(mongocrypt_ctx_setopt_key_encryption_key(ctx, TEST_BSON(kek)), ctx);
1173
+ ASSERT_FAILS(mongocrypt_ctx_datakey_init(ctx), ctx, "kms provider required by datakey is not configured");
1174
+
1175
+ mongocrypt_ctx_destroy(ctx);
1176
+ mongocrypt_destroy(crypt);
1248
1177
  }
1249
1178
 
1250
- static void
1251
- _test_setopt_createdatakey_wrong_kms_provider_configured (
1252
- _mongocrypt_tester_t *tester)
1253
- {
1254
- _test_createdatakey_with_wrong_kms_provider_helper (
1255
- tester, TEST_BSON ("{'gcp': { 'accessToken': '1234' } }"));
1179
+ static void _test_setopt_createdatakey_wrong_kms_provider_configured(_mongocrypt_tester_t *tester) {
1180
+ _test_createdatakey_with_wrong_kms_provider_helper(tester, TEST_BSON("{'gcp': { 'accessToken': '1234' } }"));
1256
1181
  }
1257
1182
 
1258
- static void
1259
- _test_setopt_createdatakey_wrong_kms_provider_empty (
1260
- _mongocrypt_tester_t *tester)
1261
- {
1262
- _test_createdatakey_with_wrong_kms_provider_helper (
1263
- tester, TEST_BSON ("{'gcp': {}}"));
1183
+ static void _test_setopt_createdatakey_wrong_kms_provider_empty(_mongocrypt_tester_t *tester) {
1184
+ _test_createdatakey_with_wrong_kms_provider_helper(tester, TEST_BSON("{'gcp': {}}"));
1264
1185
  }
1265
1186
 
1266
-
1267
- static void
1268
- _test_options (_mongocrypt_tester_t *tester)
1269
- {
1270
- /* Test individual options */
1271
- _test_setopt_masterkey_aws (tester);
1272
- _test_setopt_masterkey_local (tester);
1273
- _test_setopt_key_id (tester);
1274
- _test_setopt_algorithm (tester);
1275
- _test_setopt_key_alt_name (tester);
1276
- _test_setopt_key_material (tester);
1277
- _test_setopt_endpoint (tester);
1278
- _test_setopt_key_encryption_key_azure (tester);
1279
- _test_setopt_key_encryption_key_gcp (tester);
1280
- _test_setopt_query_type (tester);
1281
- _test_setopt_createdatakey_wrong_kms_provider_empty (tester);
1282
- _test_setopt_createdatakey_wrong_kms_provider_configured (tester);
1283
-
1284
- /* Test options on different contexts */
1285
- _test_setopt_for_datakey (tester);
1286
- _test_setopt_for_encrypt (tester);
1287
- _test_setopt_for_explicit_encrypt (tester);
1288
- _test_setopt_for_decrypt (tester);
1289
- _test_setopt_for_explicit_decrypt (tester);
1290
-
1291
- /* Test that failure to set an option on an uninitialized context is returned
1292
- * through mongocrypt_ctx_status */
1293
- _test_setopt_failure_uninitialized (tester);
1187
+ static void _test_options(_mongocrypt_tester_t *tester) {
1188
+ /* Test individual options */
1189
+ _test_setopt_masterkey_aws(tester);
1190
+ _test_setopt_masterkey_local(tester);
1191
+ _test_setopt_key_id(tester);
1192
+ _test_setopt_algorithm(tester);
1193
+ _test_setopt_key_alt_name(tester);
1194
+ _test_setopt_key_material(tester);
1195
+ _test_setopt_endpoint(tester);
1196
+ _test_setopt_key_encryption_key_azure(tester);
1197
+ _test_setopt_key_encryption_key_gcp(tester);
1198
+ _test_setopt_query_type(tester);
1199
+ _test_setopt_createdatakey_wrong_kms_provider_empty(tester);
1200
+ _test_setopt_createdatakey_wrong_kms_provider_configured(tester);
1201
+
1202
+ /* Test options on different contexts */
1203
+ _test_setopt_for_datakey(tester);
1204
+ _test_setopt_for_encrypt(tester);
1205
+ _test_setopt_for_explicit_encrypt(tester);
1206
+ _test_setopt_for_decrypt(tester);
1207
+ _test_setopt_for_explicit_decrypt(tester);
1208
+
1209
+ /* Test that failure to set an option on an uninitialized context is returned
1210
+ * through mongocrypt_ctx_status */
1211
+ _test_setopt_failure_uninitialized(tester);
1294
1212
  }
1295
1213
 
1296
-
1297
- void
1298
- _mongocrypt_tester_install_ctx_setopt (_mongocrypt_tester_t *tester)
1299
- {
1300
- INSTALL_TEST (_test_options);
1214
+ void _mongocrypt_tester_install_ctx_setopt(_mongocrypt_tester_t *tester) {
1215
+ INSTALL_TEST(_test_options);
1301
1216
  }