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
@@ -14,430 +14,483 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- #include "test-mongocrypt.h"
18
17
  #include "mc-fle2-payload-iev-private.h"
18
+ #include "test-mongocrypt.h"
19
+
20
+ static void test_FLE2IndexedEqualityEncryptedValue_parse(_mongocrypt_tester_t *tester) {
21
+ _mongocrypt_buffer_t input;
22
+ _mongocrypt_buffer_t expect_S_KeyId;
23
+ mc_FLE2IndexedEncryptedValue_t *iev;
24
+
25
+ /* Test successful parse. */
26
+ {
27
+ mongocrypt_status_t *status = mongocrypt_status_new();
28
+ _mongocrypt_buffer_copy_from_hex(&input,
29
+ "07123456781234987612341234567890120243bba14ddf42da823c33569f4689f465a"
30
+ "606d2cea84e6b7468167d90ee12e269b9bc8774d41b16eed047cad03ca43276222581"
31
+ "0a66a1dce187d8ce044fb3d2a9e9100f8824502a3825e12db71e328f4e4ebb80fac99"
32
+ "52661f54a98496381ed7a342c4a9bb22bf60be642ca7cc75c2a181ce99dd03a824a85"
33
+ "c6cc5fbd0fdc22a3b0316f5d1934d6b1f2a07be8d890250814c7e6b3e5f20bff1ebd0"
34
+ "8638c0faa47a784995f8dfe4c2947b43b4c97b4970539930da449edff2a23ca459653"
35
+ "6e7f339da76fc9c7c9d1c09619a77d49");
36
+ _mongocrypt_buffer_copy_from_hex(&expect_S_KeyId, "12345678123498761234123456789012");
37
+ iev = mc_FLE2IndexedEncryptedValue_new();
38
+ ASSERT_OK_STATUS(mc_FLE2IndexedEncryptedValue_parse(iev, &input, status), status);
39
+ const _mongocrypt_buffer_t *got = mc_FLE2IndexedEncryptedValue_get_S_KeyId(iev, status);
40
+ ASSERT_OR_PRINT(got != NULL, status);
41
+ ASSERT_CMPBUF(expect_S_KeyId, *got);
42
+ bson_type_t got_bson_type = mc_FLE2IndexedEncryptedValue_get_original_bson_type(iev, status);
43
+ ASSERT_OR_PRINT(got_bson_type == BSON_TYPE_UTF8, status);
44
+ mc_FLE2IndexedEncryptedValue_destroy(iev);
45
+ _mongocrypt_buffer_cleanup(&expect_S_KeyId);
46
+ _mongocrypt_buffer_cleanup(&input);
47
+ mongocrypt_status_destroy(status);
48
+ }
49
+
50
+ /* Test too-short input. */
51
+ {
52
+ mongocrypt_status_t *status = mongocrypt_status_new();
53
+ _mongocrypt_buffer_copy_from_hex(&input, "07123456781234");
54
+ iev = mc_FLE2IndexedEncryptedValue_new();
55
+ ASSERT_FAILS_STATUS(mc_FLE2IndexedEncryptedValue_parse(iev, &input, status),
56
+ status,
57
+ "expected byte length >= 17 got: 7");
58
+ mc_FLE2IndexedEncryptedValue_destroy(iev);
59
+ _mongocrypt_buffer_cleanup(&input);
60
+ mongocrypt_status_destroy(status);
61
+ }
62
+
63
+ /* Test incorrect fle_blob_subtype */
64
+ {
65
+ mongocrypt_status_t *status = mongocrypt_status_new();
66
+ _mongocrypt_buffer_copy_from_hex(&input,
67
+ "06123456781234987612341234567890120243bba14ddf42da823c33569f4689f465a"
68
+ "606d2cea84e6b7468167d90ee12e269b9bc8774d41b16eed047cad03ca43276222581"
69
+ "0a66a1dce187d8ce044fb3d2a9e9100f8824502a3825e12db71e328f4e4ebb80fac99"
70
+ "52661f54a98496381ed7a342c4a9bb22bf60be642ca7cc75c2a181ce99dd03a824a85"
71
+ "c6cc5fbd0fdc22a3b0316f5d1934d6b1f2a07be8d890250814c7e6b3e5f20bff1ebd0"
72
+ "8638c0faa47a784995f8dfe4c2947b43b4c97b4970539930da449edff2a23ca459653"
73
+ "6e7f339da76fc9c7c9d1c09619a77d49");
74
+ iev = mc_FLE2IndexedEncryptedValue_new();
75
+ ASSERT_FAILS_STATUS(mc_FLE2IndexedEncryptedValue_parse(iev, &input, status),
76
+ status,
77
+ "expected fle_blob_subtype 7 or 9 got: 6");
78
+ mc_FLE2IndexedEncryptedValue_destroy(iev);
79
+ _mongocrypt_buffer_cleanup(&input);
80
+ mongocrypt_status_destroy(status);
81
+ }
82
+
83
+ /* Test double parsing */
84
+ {
85
+ mongocrypt_status_t *status = mongocrypt_status_new();
86
+ _mongocrypt_buffer_copy_from_hex(&input,
87
+ "07123456781234987612341234567890120243bba14ddf42da823c33569f4689f465a"
88
+ "606d2cea84e6b7468167d90ee12e269b9bc8774d41b16eed047cad03ca43276222581"
89
+ "0a66a1dce187d8ce044fb3d2a9e9100f8824502a3825e12db71e328f4e4ebb80fac99"
90
+ "52661f54a98496381ed7a342c4a9bb22bf60be642ca7cc75c2a181ce99dd03a824a85"
91
+ "c6cc5fbd0fdc22a3b0316f5d1934d6b1f2a07be8d890250814c7e6b3e5f20bff1ebd0"
92
+ "8638c0faa47a784995f8dfe4c2947b43b4c97b4970539930da449edff2a23ca459653"
93
+ "6e7f339da76fc9c7c9d1c09619a77d49");
94
+ iev = mc_FLE2IndexedEncryptedValue_new();
95
+ ASSERT_OK_STATUS(mc_FLE2IndexedEncryptedValue_parse(iev, &input, status), status);
96
+ ASSERT_FAILS_STATUS(mc_FLE2IndexedEncryptedValue_parse(iev, &input, status),
97
+ status,
98
+ "must not be called twice");
99
+ mc_FLE2IndexedEncryptedValue_destroy(iev);
100
+ _mongocrypt_buffer_cleanup(&input);
101
+ mongocrypt_status_destroy(status);
102
+ }
103
+
104
+ /* Test attempting to get S_KeyId before parsing. */
105
+ {
106
+ mongocrypt_status_t *status = mongocrypt_status_new();
107
+ iev = mc_FLE2IndexedEncryptedValue_new();
108
+ const _mongocrypt_buffer_t *got = mc_FLE2IndexedEncryptedValue_get_S_KeyId(iev, status);
109
+ ASSERT_FAILS_STATUS(got != NULL, status, "must be called after mc_FLE2IndexedEncryptedValue_parse");
110
+ mc_FLE2IndexedEncryptedValue_destroy(iev);
111
+ mongocrypt_status_destroy(status);
112
+ }
113
+ }
19
114
 
20
- static void
21
- test_FLE2IndexedEqualityEncryptedValue_parse (_mongocrypt_tester_t *tester)
22
- {
23
- _mongocrypt_buffer_t input;
24
- _mongocrypt_buffer_t expect_S_KeyId;
25
- mc_FLE2IndexedEncryptedValue_t *iev;
26
-
27
- /* Test successful parse. */
28
- {
29
- mongocrypt_status_t *status = mongocrypt_status_new ();
30
- _mongocrypt_buffer_copy_from_hex (
31
- &input,
32
- "07123456781234987612341234567890120243bba14ddf42da823c33569f4689f465a"
33
- "606d2cea84e6b7468167d90ee12e269b9bc8774d41b16eed047cad03ca43276222581"
34
- "0a66a1dce187d8ce044fb3d2a9e9100f8824502a3825e12db71e328f4e4ebb80fac99"
35
- "52661f54a98496381ed7a342c4a9bb22bf60be642ca7cc75c2a181ce99dd03a824a85"
36
- "c6cc5fbd0fdc22a3b0316f5d1934d6b1f2a07be8d890250814c7e6b3e5f20bff1ebd0"
37
- "8638c0faa47a784995f8dfe4c2947b43b4c97b4970539930da449edff2a23ca459653"
38
- "6e7f339da76fc9c7c9d1c09619a77d49");
39
- _mongocrypt_buffer_copy_from_hex (&expect_S_KeyId,
40
- "12345678123498761234123456789012");
41
- iev = mc_FLE2IndexedEncryptedValue_new ();
42
- ASSERT_OK_STATUS (
43
- mc_FLE2IndexedEncryptedValue_parse (iev, &input, status), status);
44
- const _mongocrypt_buffer_t *got =
45
- mc_FLE2IndexedEncryptedValue_get_S_KeyId (iev, status);
46
- ASSERT_OR_PRINT (got != NULL, status);
47
- ASSERT_CMPBUF (expect_S_KeyId, *got);
48
- bson_type_t got_bson_type =
49
- mc_FLE2IndexedEncryptedValue_get_original_bson_type (iev, status);
50
- ASSERT_OR_PRINT (got_bson_type == BSON_TYPE_UTF8, status);
51
- mc_FLE2IndexedEncryptedValue_destroy (iev);
52
- _mongocrypt_buffer_cleanup (&expect_S_KeyId);
53
- _mongocrypt_buffer_cleanup (&input);
54
- mongocrypt_status_destroy (status);
55
- }
56
-
57
- /* Test too-short input. */
58
- {
59
- mongocrypt_status_t *status = mongocrypt_status_new ();
60
- _mongocrypt_buffer_copy_from_hex (&input, "07123456781234");
61
- iev = mc_FLE2IndexedEncryptedValue_new ();
62
- ASSERT_FAILS_STATUS (
63
- mc_FLE2IndexedEncryptedValue_parse (iev, &input, status),
64
- status,
65
- "expected byte length >= 17 got: 7");
66
- mc_FLE2IndexedEncryptedValue_destroy (iev);
67
- _mongocrypt_buffer_cleanup (&input);
68
- mongocrypt_status_destroy (status);
69
- }
70
-
71
- /* Test incorrect fle_blob_subtype */
72
- {
73
- mongocrypt_status_t *status = mongocrypt_status_new ();
74
- _mongocrypt_buffer_copy_from_hex (
75
- &input,
76
- "06123456781234987612341234567890120243bba14ddf42da823c33569f4689f465a"
77
- "606d2cea84e6b7468167d90ee12e269b9bc8774d41b16eed047cad03ca43276222581"
78
- "0a66a1dce187d8ce044fb3d2a9e9100f8824502a3825e12db71e328f4e4ebb80fac99"
79
- "52661f54a98496381ed7a342c4a9bb22bf60be642ca7cc75c2a181ce99dd03a824a85"
80
- "c6cc5fbd0fdc22a3b0316f5d1934d6b1f2a07be8d890250814c7e6b3e5f20bff1ebd0"
81
- "8638c0faa47a784995f8dfe4c2947b43b4c97b4970539930da449edff2a23ca459653"
82
- "6e7f339da76fc9c7c9d1c09619a77d49");
83
- iev = mc_FLE2IndexedEncryptedValue_new ();
84
- ASSERT_FAILS_STATUS (
85
- mc_FLE2IndexedEncryptedValue_parse (iev, &input, status),
86
- status,
87
- "expected fle_blob_subtype 7 or 9 got: 6");
88
- mc_FLE2IndexedEncryptedValue_destroy (iev);
89
- _mongocrypt_buffer_cleanup (&input);
90
- mongocrypt_status_destroy (status);
91
- }
92
-
93
- /* Test double parsing */
94
- {
95
- mongocrypt_status_t *status = mongocrypt_status_new ();
96
- _mongocrypt_buffer_copy_from_hex (
97
- &input,
98
- "07123456781234987612341234567890120243bba14ddf42da823c33569f4689f465a"
99
- "606d2cea84e6b7468167d90ee12e269b9bc8774d41b16eed047cad03ca43276222581"
100
- "0a66a1dce187d8ce044fb3d2a9e9100f8824502a3825e12db71e328f4e4ebb80fac99"
101
- "52661f54a98496381ed7a342c4a9bb22bf60be642ca7cc75c2a181ce99dd03a824a85"
102
- "c6cc5fbd0fdc22a3b0316f5d1934d6b1f2a07be8d890250814c7e6b3e5f20bff1ebd0"
103
- "8638c0faa47a784995f8dfe4c2947b43b4c97b4970539930da449edff2a23ca459653"
104
- "6e7f339da76fc9c7c9d1c09619a77d49");
105
- iev = mc_FLE2IndexedEncryptedValue_new ();
106
- ASSERT_OK_STATUS (
107
- mc_FLE2IndexedEncryptedValue_parse (iev, &input, status), status);
108
- ASSERT_FAILS_STATUS (
109
- mc_FLE2IndexedEncryptedValue_parse (iev, &input, status),
110
- status,
111
- "must not be called twice");
112
- mc_FLE2IndexedEncryptedValue_destroy (iev);
113
- _mongocrypt_buffer_cleanup (&input);
114
- mongocrypt_status_destroy (status);
115
- }
116
-
117
- /* Test attempting to get S_KeyId before parsing. */
118
- {
119
- mongocrypt_status_t *status = mongocrypt_status_new ();
120
- iev = mc_FLE2IndexedEncryptedValue_new ();
121
- const _mongocrypt_buffer_t *got =
122
- mc_FLE2IndexedEncryptedValue_get_S_KeyId (iev, status);
123
- ASSERT_FAILS_STATUS (
124
- got != NULL,
125
- status,
126
- "must be called after mc_FLE2IndexedEncryptedValue_parse");
127
- mc_FLE2IndexedEncryptedValue_destroy (iev);
128
- mongocrypt_status_destroy (status);
129
- }
115
+ static void test_FLE2IndexedEqualityEncryptedValueTokens_init_from_buf(_mongocrypt_tester_t *tester) {
116
+ uint64_t counter = 45;
117
+ _mongocrypt_buffer_t expected_edc_token;
118
+ _mongocrypt_buffer_t expected_esc_token;
119
+ _mongocrypt_buffer_t expected_ecc_token;
120
+ _mongocrypt_buffer_t input_token_set;
121
+
122
+ _mongocrypt_buffer_copy_from_hex(&expected_edc_token,
123
+ "97C8DFE394D80A4EE335E3F9FDC024D18BE4B92F9444FCA316FF9896D7BF455D");
124
+
125
+ _mongocrypt_buffer_copy_from_hex(&expected_esc_token,
126
+ "EBB22F74BE0FA4AD863188D3F33AF0B95CB4CA4ED0091E1A43513DB20E9D59AE");
127
+
128
+ _mongocrypt_buffer_copy_from_hex(&expected_ecc_token,
129
+ "A1DF0BB04C977BD4BC0B487FFFD2E3BBB96078354DE9F204EE5872BB10F01971");
130
+
131
+ _mongocrypt_buffer_copy_from_hex(&input_token_set,
132
+ "2D00000000000000"
133
+ "97C8DFE394D80A4EE335E3F9FDC024D18BE4B92F9444FCA316FF9896D7BF455D"
134
+ "EBB22F74BE0FA4AD863188D3F33AF0B95CB4CA4ED0091E1A43513DB20E9D59AE"
135
+ "A1DF0BB04C977BD4BC0B487FFFD2E3BBB96078354DE9F204EE5872BB10F01971");
136
+
137
+ /* Test function mc_FLE2IndexedEqualityEncryptedValueTokens_init_from_buffer.
138
+ */
139
+ {
140
+ mongocrypt_status_t *status = mongocrypt_status_new();
141
+ mc_FLE2IndexedEqualityEncryptedValueTokens *tokens = mc_FLE2IndexedEqualityEncryptedValueTokens_new();
142
+
143
+ ASSERT(mc_FLE2IndexedEqualityEncryptedValueTokens_init_from_buffer(tokens, &input_token_set, status));
144
+ ASSERT_CMPUINT64(counter, ==, tokens->counter);
145
+ ASSERT_CMPBUF(expected_edc_token, tokens->edc);
146
+ ASSERT_CMPBUF(expected_esc_token, tokens->esc);
147
+ ASSERT_CMPBUF(expected_ecc_token, tokens->ecc);
148
+
149
+ mc_FLE2IndexedEqualityEncryptedValueTokens_destroy(tokens);
150
+ mongocrypt_status_destroy(status);
151
+ }
152
+
153
+ _mongocrypt_buffer_cleanup(&input_token_set);
154
+ _mongocrypt_buffer_cleanup(&expected_ecc_token);
155
+ _mongocrypt_buffer_cleanup(&expected_esc_token);
156
+ _mongocrypt_buffer_cleanup(&expected_edc_token);
130
157
  }
131
158
 
132
- static void
133
- test_FLE2IndexedEqualityEncryptedValue_decrypt (_mongocrypt_tester_t *tester)
134
- {
135
- _mongocrypt_buffer_t input;
136
- _mongocrypt_buffer_t input_with_tokens;
137
- _mongocrypt_buffer_t expected_edc_token;
138
- _mongocrypt_buffer_t expected_esc_token;
139
- _mongocrypt_buffer_t expected_ecc_token;
140
- _mongocrypt_buffer_t correct_S_Key;
141
- _mongocrypt_buffer_t correct_K_Key;
142
- mc_FLE2IndexedEncryptedValue_t *iev;
143
- _mongocrypt_buffer_t expect_S_KeyId;
144
- _mongocrypt_buffer_t expect_K_KeyId;
145
- _mongocrypt_buffer_t expect_client_value;
146
- mongocrypt_t *crypt;
147
-
148
- if (!_aes_ctr_is_supported_by_os) {
149
- printf ("Common Crypto with no CTR support detected. Skipping.");
150
- return;
151
- }
152
-
153
- crypt = _mongocrypt_tester_mongocrypt (TESTER_MONGOCRYPT_DEFAULT);
154
-
155
- _mongocrypt_buffer_copy_from_hex (
156
- &input,
157
- "07123456781234987612341234567890120243bba14ddf42da823c33569f4689f465a606"
158
- "d2cea84e6b7468167d90ee12e269b9bc8774d41b16eed047cad03ca432762225810a66a1"
159
- "dce187d8ce044fb3d2a9e9100f8824502a3825e12db71e328f4e4ebb80fac9952661f54a"
160
- "98496381ed7a342c4a9bb22bf60be642ca7cc75c2a181ce99dd03a824a85c6cc5fbd0fdc"
161
- "22a3b0316f5d1934d6b1f2a07be8d890250814c7e6b3e5f20bff1ebd08638c0faa47a784"
162
- "995f8dfe4c2947b43b4c97b4970539930da449edff2a23ca4596536e7f339da76fc9c7c9"
163
- "d1c09619a77d49");
164
-
165
- _mongocrypt_buffer_copy_from_hex (
166
- &input_with_tokens,
167
- "07000000000000000000000000000000000297044B8E1B5CF4F9052EDB50236A343597C4"
168
- "18A74352F98357A77E0D4299C04151CBEC24A5D5349A5A5EAA1FE334154FEEB6C8E7BD63"
169
- "6089904F76950B2184D146792CBDF9179FFEDDB7D90FC257BB13DCB3E731182A447E2EF1"
170
- "BE7A2AF13DC9362701BABDE0B5E78CF4A92227D5B5D1E1556E75BAB5B4E9F5CEFEA3BA3E"
171
- "3D5D31D11B20619437A30550EFF5B602357567CF05058E4F84A103293F70302F3A506676"
172
- "42DD0325D194A197");
173
-
174
-
175
- _mongocrypt_buffer_copy_from_hex (
176
- &expected_edc_token,
177
- "97C8DFE394D80A4EE335E3F9FDC024D18BE4B92F9444FCA316FF9896D7BF455D");
178
-
179
-
180
- _mongocrypt_buffer_copy_from_hex (
181
- &expected_esc_token,
182
- "EBB22F74BE0FA4AD863188D3F33AF0B95CB4CA4ED0091E1A43513DB20E9D59AE");
183
-
184
-
185
- _mongocrypt_buffer_copy_from_hex (
186
- &expected_ecc_token,
187
- "A1DF0BB04C977BD4BC0B487FFFD2E3BBB96078354DE9F204EE5872BB10F01971");
188
-
189
- _mongocrypt_buffer_copy_from_hex (&expect_S_KeyId,
190
- "12345678123498761234123456789012");
191
- _mongocrypt_buffer_copy_from_hex (&expect_K_KeyId,
192
- "abcdefab123498761234123456789012");
193
- _mongocrypt_buffer_copy_from_hex (
194
- &correct_S_Key,
195
- "7dbfebc619aa68a659f64b8e23ccd21644ac326cb74a26840c3d2420176c40ae088294d0"
196
- "0ad6cae9684237b21b754cf503f085c25cd320bf035c3417416e1e6fe3d9219f79586582"
197
- "112740b2add88e1030d91926ae8afc13ee575cfb8bb965b7");
198
- _mongocrypt_buffer_copy_from_hex (
199
- &correct_K_Key,
200
- "a7ddbc4c8be00d51f68d9d8e485f351c8edc8d2206b24d8e0e1816d005fbe520e4891250"
201
- "47d647b0d8684bfbdbf09c304085ed086aba6c2b2b1677ccc91ced8847a733bf5e5682c8"
202
- "4b3ee7969e4a5fe0e0c21e5e3ee190595a55f83147d8de2a");
203
- ASSERT (_mongocrypt_buffer_copy_from_data_and_size (
204
- &expect_client_value,
205
- (const uint8_t *) "\x09\x00\x00\x00value123\x00",
206
- 13));
207
-
208
- /* Test success. */
209
- {
210
- mongocrypt_status_t *status = mongocrypt_status_new ();
211
- iev = mc_FLE2IndexedEncryptedValue_new ();
212
- ASSERT_OK_STATUS (
213
- mc_FLE2IndexedEncryptedValue_parse (iev, &input, status), status);
214
-
215
- const _mongocrypt_buffer_t *got =
216
- mc_FLE2IndexedEncryptedValue_get_S_KeyId (iev, status);
217
- ASSERT_OR_PRINT (got != NULL, status);
218
- ASSERT_CMPBUF (expect_S_KeyId, *got);
219
-
220
- ASSERT_OK_STATUS (mc_FLE2IndexedEncryptedValue_add_S_Key (
221
- crypt->crypto, iev, &correct_S_Key, status),
222
- status);
223
-
224
- got = mc_FLE2IndexedEncryptedValue_get_K_KeyId (iev, status);
225
- ASSERT_OR_PRINT (got != NULL, status);
226
- ASSERT_CMPBUF (expect_K_KeyId, *got);
227
-
228
- ASSERT_OK_STATUS (mc_FLE2IndexedEqualityEncryptedValue_add_K_Key (
229
- crypt->crypto, iev, &correct_K_Key, status),
230
- status);
231
- got = mc_FLE2IndexedEncryptedValue_get_ClientValue (iev, status);
232
- ASSERT_CMPBUF (expect_client_value, *got);
233
- mc_FLE2IndexedEncryptedValue_destroy (iev);
234
- mongocrypt_status_destroy (status);
235
- }
236
-
237
- /* Test success for IEV equality. */
238
- {
239
- mongocrypt_status_t *status = mongocrypt_status_new ();
240
- iev = mc_FLE2IndexedEncryptedValue_new ();
241
- mc_FLE2IndexedEqualityEncryptedValueTokens *tokens = mc_FLE2IndexedEqualityEncryptedValueTokens_new ();
242
-
243
- ASSERT_OK_STATUS (
244
- mc_FLE2IndexedEncryptedValue_parse (iev, &input_with_tokens, status), status);
245
-
246
- _mongocrypt_buffer_t TokenKey;
247
- ASSERT (_mongocrypt_buffer_from_subrange (&TokenKey,
159
+ static void test_FLE2IndexedEqualityEncryptedValue_decrypt(_mongocrypt_tester_t *tester) {
160
+ _mongocrypt_buffer_t input;
161
+ _mongocrypt_buffer_t input_with_tokens;
162
+ _mongocrypt_buffer_t expected_edc_token;
163
+ _mongocrypt_buffer_t expected_esc_token;
164
+ _mongocrypt_buffer_t expected_ecc_token;
165
+ _mongocrypt_buffer_t correct_S_Key;
166
+ _mongocrypt_buffer_t correct_K_Key;
167
+ mc_FLE2IndexedEncryptedValue_t *iev;
168
+ _mongocrypt_buffer_t expect_S_KeyId;
169
+ _mongocrypt_buffer_t expect_K_KeyId;
170
+ _mongocrypt_buffer_t expect_client_value;
171
+ mongocrypt_t *crypt;
172
+
173
+ if (!_aes_ctr_is_supported_by_os) {
174
+ printf("Common Crypto with no CTR support detected. Skipping.");
175
+ return;
176
+ }
177
+
178
+ crypt = _mongocrypt_tester_mongocrypt(TESTER_MONGOCRYPT_DEFAULT);
179
+
180
+ _mongocrypt_buffer_copy_from_hex(&input,
181
+ "07123456781234987612341234567890120243bba14ddf42da823c33569f4689f465a606"
182
+ "d2cea84e6b7468167d90ee12e269b9bc8774d41b16eed047cad03ca432762225810a66a1"
183
+ "dce187d8ce044fb3d2a9e9100f8824502a3825e12db71e328f4e4ebb80fac9952661f54a"
184
+ "98496381ed7a342c4a9bb22bf60be642ca7cc75c2a181ce99dd03a824a85c6cc5fbd0fdc"
185
+ "22a3b0316f5d1934d6b1f2a07be8d890250814c7e6b3e5f20bff1ebd08638c0faa47a784"
186
+ "995f8dfe4c2947b43b4c97b4970539930da449edff2a23ca4596536e7f339da76fc9c7c9"
187
+ "d1c09619a77d49");
188
+
189
+ _mongocrypt_buffer_copy_from_hex(&input_with_tokens,
190
+ "07000000000000000000000000000000000297044B8E1B5CF4F9052EDB50236A343597C4"
191
+ "18A74352F98357A77E0D4299C04151CBEC24A5D5349A5A5EAA1FE334154FEEB6C8E7BD63"
192
+ "6089904F76950B2184D146792CBDF9179FFEDDB7D90FC257BB13DCB3E731182A447E2EF1"
193
+ "BE7A2AF13DC9362701BABDE0B5E78CF4A92227D5B5D1E1556E75BAB5B4E9F5CEFEA3BA3E"
194
+ "3D5D31D11B20619437A30550EFF5B602357567CF05058E4F84A103293F70302F3A506676"
195
+ "42DD0325D194A197");
196
+
197
+ _mongocrypt_buffer_copy_from_hex(&expected_edc_token,
198
+ "97C8DFE394D80A4EE335E3F9FDC024D18BE4B92F9444FCA316FF9896D7BF455D");
199
+
200
+ _mongocrypt_buffer_copy_from_hex(&expected_esc_token,
201
+ "EBB22F74BE0FA4AD863188D3F33AF0B95CB4CA4ED0091E1A43513DB20E9D59AE");
202
+
203
+ _mongocrypt_buffer_copy_from_hex(&expected_ecc_token,
204
+ "A1DF0BB04C977BD4BC0B487FFFD2E3BBB96078354DE9F204EE5872BB10F01971");
205
+
206
+ _mongocrypt_buffer_copy_from_hex(&expect_S_KeyId, "12345678123498761234123456789012");
207
+ _mongocrypt_buffer_copy_from_hex(&expect_K_KeyId, "abcdefab123498761234123456789012");
208
+ _mongocrypt_buffer_copy_from_hex(&correct_S_Key,
209
+ "7dbfebc619aa68a659f64b8e23ccd21644ac326cb74a26840c3d2420176c40ae088294d0"
210
+ "0ad6cae9684237b21b754cf503f085c25cd320bf035c3417416e1e6fe3d9219f79586582"
211
+ "112740b2add88e1030d91926ae8afc13ee575cfb8bb965b7");
212
+ _mongocrypt_buffer_copy_from_hex(&correct_K_Key,
213
+ "a7ddbc4c8be00d51f68d9d8e485f351c8edc8d2206b24d8e0e1816d005fbe520e4891250"
214
+ "47d647b0d8684bfbdbf09c304085ed086aba6c2b2b1677ccc91ced8847a733bf5e5682c8"
215
+ "4b3ee7969e4a5fe0e0c21e5e3ee190595a55f83147d8de2a");
216
+ ASSERT(_mongocrypt_buffer_copy_from_data_and_size(&expect_client_value,
217
+ (const uint8_t *)"\x09\x00\x00\x00value123\x00",
218
+ 13));
219
+
220
+ /* Test success. */
221
+ {
222
+ mongocrypt_status_t *status = mongocrypt_status_new();
223
+ iev = mc_FLE2IndexedEncryptedValue_new();
224
+ ASSERT_OK_STATUS(mc_FLE2IndexedEncryptedValue_parse(iev, &input, status), status);
225
+
226
+ const _mongocrypt_buffer_t *got = mc_FLE2IndexedEncryptedValue_get_S_KeyId(iev, status);
227
+ ASSERT_OR_PRINT(got != NULL, status);
228
+ ASSERT_CMPBUF(expect_S_KeyId, *got);
229
+
230
+ ASSERT_OK_STATUS(mc_FLE2IndexedEncryptedValue_add_S_Key(crypt->crypto, iev, &correct_S_Key, status), status);
231
+
232
+ got = mc_FLE2IndexedEncryptedValue_get_K_KeyId(iev, status);
233
+ ASSERT_OR_PRINT(got != NULL, status);
234
+ ASSERT_CMPBUF(expect_K_KeyId, *got);
235
+
236
+ ASSERT_OK_STATUS(mc_FLE2IndexedEncryptedValue_add_K_Key(crypt->crypto, iev, &correct_K_Key, status), status);
237
+ got = mc_FLE2IndexedEncryptedValue_get_ClientValue(iev, status);
238
+ ASSERT_CMPBUF(expect_client_value, *got);
239
+ mc_FLE2IndexedEncryptedValue_destroy(iev);
240
+ mongocrypt_status_destroy(status);
241
+ }
242
+
243
+ /* Test success for IEV equality. */
244
+ {
245
+ mongocrypt_status_t *status = mongocrypt_status_new();
246
+ iev = mc_FLE2IndexedEncryptedValue_new();
247
+ mc_FLE2IndexedEqualityEncryptedValueTokens *tokens = mc_FLE2IndexedEqualityEncryptedValueTokens_new();
248
+
249
+ ASSERT_OK_STATUS(mc_FLE2IndexedEncryptedValue_parse(iev, &input_with_tokens, status), status);
250
+
251
+ _mongocrypt_buffer_t TokenKey;
252
+ ASSERT(_mongocrypt_buffer_from_subrange(&TokenKey,
253
+ &correct_S_Key,
254
+ correct_S_Key.len - MONGOCRYPT_TOKEN_KEY_LEN,
255
+ MONGOCRYPT_TOKEN_KEY_LEN));
256
+
257
+ mc_ServerDataEncryptionLevel1Token_t *token =
258
+ mc_ServerDataEncryptionLevel1Token_new(crypt->crypto, &TokenKey, status);
259
+
260
+ ASSERT(token);
261
+
262
+ ASSERT_OK_STATUS(mc_FLE2IndexedEncryptedValue_decrypt_equality(crypt->crypto, iev, token, tokens, status),
263
+ status);
264
+
265
+ ASSERT_CMPUINT64(123456, ==, tokens->counter);
266
+ ASSERT_CMPBUF(expected_edc_token, tokens->edc);
267
+ ASSERT_CMPBUF(expected_esc_token, tokens->esc);
268
+ ASSERT_CMPBUF(expected_ecc_token, tokens->ecc);
269
+
270
+ mc_ServerDataEncryptionLevel1Token_destroy(token);
271
+ mc_FLE2IndexedEqualityEncryptedValueTokens_destroy(tokens);
272
+ mc_FLE2IndexedEncryptedValue_destroy(iev);
273
+ mongocrypt_status_destroy(status);
274
+ }
275
+
276
+ /* Test that parse and write work correctly. */
277
+ {
278
+ mongocrypt_status_t *status = mongocrypt_status_new();
279
+ iev = mc_FLE2IndexedEncryptedValue_new();
280
+ mc_FLE2IndexedEqualityEncryptedValueTokens *tokens = mc_FLE2IndexedEqualityEncryptedValueTokens_new();
281
+
282
+ ASSERT_OK_STATUS(mc_FLE2IndexedEncryptedValue_parse(iev, &input_with_tokens, status), status);
283
+
284
+ _mongocrypt_buffer_t TokenKey;
285
+ ASSERT(_mongocrypt_buffer_from_subrange(&TokenKey,
248
286
  &correct_S_Key,
249
287
  correct_S_Key.len - MONGOCRYPT_TOKEN_KEY_LEN,
250
288
  MONGOCRYPT_TOKEN_KEY_LEN));
251
289
 
252
- mc_ServerDataEncryptionLevel1Token_t *token =
253
- mc_ServerDataEncryptionLevel1Token_new (crypt->crypto, &TokenKey, status);
254
-
255
- ASSERT (token);
256
-
257
- ASSERT_OK_STATUS (mc_FLE2IndexedEncryptedValue_decrypt_equality(
258
- crypt->crypto, iev, token, tokens, status),
259
- status);
260
-
261
- ASSERT_CMPBUF(expected_edc_token, tokens->edc);
262
- ASSERT_CMPBUF(expected_esc_token, tokens->esc);
263
- ASSERT_CMPBUF(expected_ecc_token, tokens->ecc);
264
- ASSERT_CMPUINT64(123456, ==, tokens->counter);
265
-
266
- mc_ServerDataEncryptionLevel1Token_destroy (token);
267
- mc_FLE2IndexedEqualityEncryptedValueTokens_destroy (tokens);
268
- mc_FLE2IndexedEncryptedValue_destroy (iev);
269
- mongocrypt_status_destroy (status);
270
- }
271
-
272
- /* Test an incorrect S_Key. */
273
- {
274
- mongocrypt_status_t *status = mongocrypt_status_new ();
275
- _mongocrypt_buffer_t incorrect_S_Key;
276
-
277
- _mongocrypt_buffer_init (&incorrect_S_Key);
278
- _mongocrypt_buffer_copy_to (&correct_S_Key, &incorrect_S_Key);
279
- /* The last 32 bytes of S_Key are used to generate
280
- * ServerDataEncryptionLevel1Token. Change last byte to make S_Key
281
- * incorrect. */
282
- incorrect_S_Key.data[incorrect_S_Key.len - 1] = 0;
283
- iev = mc_FLE2IndexedEncryptedValue_new ();
284
- ASSERT_OK_STATUS (
285
- mc_FLE2IndexedEncryptedValue_parse (iev, &input, status), status);
286
- /* Since S_Key is used for non-AEAD encryption, decryption does not return
287
- * an error. The output is garbled. It fails to parse the decrypted Inner
288
- * struct. */
289
- ASSERT_FAILS_STATUS (mc_FLE2IndexedEncryptedValue_add_S_Key (
290
- crypt->crypto, iev, &incorrect_S_Key, status),
291
- status,
292
- "expected byte length");
293
- mc_FLE2IndexedEncryptedValue_destroy (iev);
294
- _mongocrypt_buffer_cleanup (&incorrect_S_Key);
295
- mongocrypt_status_destroy (status);
296
- }
297
-
298
- /* Test an incorrect K_Key. */
299
- {
300
- _mongocrypt_buffer_t incorrect_K_Key;
301
- mongocrypt_status_t *status = mongocrypt_status_new ();
302
-
303
- _mongocrypt_buffer_init (&incorrect_K_Key);
304
- _mongocrypt_buffer_copy_to (&correct_K_Key, &incorrect_K_Key);
305
- /* The second 32 bytes of K_Key is used for the mac key. Modify one byte
306
- * to get a decryption error. */
307
- incorrect_K_Key.data[32] = 0;
308
- iev = mc_FLE2IndexedEncryptedValue_new ();
309
- ASSERT_OK_STATUS (
310
- mc_FLE2IndexedEncryptedValue_parse (iev, &input, status), status);
311
- ASSERT_OK_STATUS (mc_FLE2IndexedEncryptedValue_add_S_Key (
312
- crypt->crypto, iev, &correct_S_Key, status),
313
- status);
314
- ASSERT_FAILS_STATUS (mc_FLE2IndexedEqualityEncryptedValue_add_K_Key (
315
- crypt->crypto, iev, &incorrect_K_Key, status),
316
- status,
317
- "decryption error");
318
- mc_FLE2IndexedEncryptedValue_destroy (iev);
319
- _mongocrypt_buffer_cleanup (&incorrect_K_Key);
320
- mongocrypt_status_destroy (status);
321
- }
322
-
323
- _mongocrypt_buffer_cleanup (&expect_client_value);
324
- _mongocrypt_buffer_cleanup (&correct_K_Key);
325
- _mongocrypt_buffer_cleanup (&expect_K_KeyId);
326
- _mongocrypt_buffer_cleanup (&correct_S_Key);
327
- _mongocrypt_buffer_cleanup (&expect_S_KeyId);
328
- _mongocrypt_buffer_cleanup (&expected_ecc_token);
329
- _mongocrypt_buffer_cleanup (&expected_esc_token);
330
- _mongocrypt_buffer_cleanup (&expected_edc_token);
331
- _mongocrypt_buffer_cleanup (&input_with_tokens);
332
- _mongocrypt_buffer_cleanup (&input);
333
- mongocrypt_destroy (crypt);
290
+ mc_ServerDataEncryptionLevel1Token_t *token =
291
+ mc_ServerDataEncryptionLevel1Token_new(crypt->crypto, &TokenKey, status);
292
+
293
+ ASSERT(token);
294
+
295
+ ASSERT_OK_STATUS(mc_FLE2IndexedEncryptedValue_decrypt_equality(crypt->crypto, iev, token, tokens, status),
296
+ status);
297
+
298
+ _mongocrypt_buffer_t write_buffer;
299
+ _mongocrypt_buffer_init_size(&write_buffer, input_with_tokens.len);
300
+
301
+ const bson_type_t bson_type = mc_FLE2IndexedEncryptedValue_get_original_bson_type(iev, status);
302
+ const _mongocrypt_buffer_t *S_KeyId = mc_FLE2IndexedEncryptedValue_get_S_KeyId(iev, status);
303
+ const _mongocrypt_buffer_t *ClientEncryptedValue =
304
+ mc_FLE2IndexedEncryptedValue_get_ClientEncryptedValue(iev, status);
305
+
306
+ ASSERT(mc_FLE2IndexedEncryptedValue_write(crypt->crypto,
307
+ bson_type,
308
+ S_KeyId,
309
+ ClientEncryptedValue,
310
+ token,
311
+ tokens,
312
+ &write_buffer,
313
+ status));
314
+
315
+ mc_FLE2IndexedEncryptedValue_t *iev2;
316
+ iev2 = mc_FLE2IndexedEncryptedValue_new();
317
+
318
+ ASSERT_OK_STATUS(mc_FLE2IndexedEncryptedValue_parse(iev2, &write_buffer, status), status);
319
+
320
+ mc_FLE2IndexedEqualityEncryptedValueTokens *tokens2 = mc_FLE2IndexedEqualityEncryptedValueTokens_new();
321
+
322
+ ASSERT_OK_STATUS(mc_FLE2IndexedEncryptedValue_decrypt_equality(crypt->crypto, iev2, token, tokens2, status),
323
+ status);
324
+
325
+ ASSERT_CMPUINT64(tokens->counter, ==, tokens2->counter);
326
+ ASSERT_CMPBUF(tokens->edc, tokens2->edc);
327
+ ASSERT_CMPBUF(tokens->esc, tokens2->esc);
328
+ ASSERT_CMPBUF(tokens->ecc, tokens2->ecc);
329
+
330
+ _mongocrypt_buffer_cleanup(&write_buffer);
331
+ mc_ServerDataEncryptionLevel1Token_destroy(token);
332
+ mc_FLE2IndexedEqualityEncryptedValueTokens_destroy(tokens);
333
+ mc_FLE2IndexedEqualityEncryptedValueTokens_destroy(tokens2);
334
+ mc_FLE2IndexedEncryptedValue_destroy(iev);
335
+ mc_FLE2IndexedEncryptedValue_destroy(iev2);
336
+ mongocrypt_status_destroy(status);
337
+ }
338
+
339
+ /* Test an incorrect S_Key. */
340
+ {
341
+ mongocrypt_status_t *status = mongocrypt_status_new();
342
+ _mongocrypt_buffer_t incorrect_S_Key;
343
+
344
+ _mongocrypt_buffer_init(&incorrect_S_Key);
345
+ _mongocrypt_buffer_copy_to(&correct_S_Key, &incorrect_S_Key);
346
+ /* The last 32 bytes of S_Key are used to generate
347
+ * ServerDataEncryptionLevel1Token. Change last byte to make S_Key
348
+ * incorrect. */
349
+ incorrect_S_Key.data[incorrect_S_Key.len - 1] = 0;
350
+ iev = mc_FLE2IndexedEncryptedValue_new();
351
+ ASSERT_OK_STATUS(mc_FLE2IndexedEncryptedValue_parse(iev, &input, status), status);
352
+ /* Since S_Key is used for non-AEAD encryption, decryption does not return
353
+ * an error. The output is garbled. It fails to parse the decrypted Inner
354
+ * struct. */
355
+ ASSERT_FAILS_STATUS(mc_FLE2IndexedEncryptedValue_add_S_Key(crypt->crypto, iev, &incorrect_S_Key, status),
356
+ status,
357
+ "expected byte length");
358
+ mc_FLE2IndexedEncryptedValue_destroy(iev);
359
+ _mongocrypt_buffer_cleanup(&incorrect_S_Key);
360
+ mongocrypt_status_destroy(status);
361
+ }
362
+
363
+ /* Test an incorrect K_Key. */
364
+ {
365
+ _mongocrypt_buffer_t incorrect_K_Key;
366
+ mongocrypt_status_t *status = mongocrypt_status_new();
367
+
368
+ _mongocrypt_buffer_init(&incorrect_K_Key);
369
+ _mongocrypt_buffer_copy_to(&correct_K_Key, &incorrect_K_Key);
370
+ /* The second 32 bytes of K_Key is used for the mac key. Modify one byte
371
+ * to get a decryption error. */
372
+ incorrect_K_Key.data[32] = 0;
373
+ iev = mc_FLE2IndexedEncryptedValue_new();
374
+ ASSERT_OK_STATUS(mc_FLE2IndexedEncryptedValue_parse(iev, &input, status), status);
375
+ ASSERT_OK_STATUS(mc_FLE2IndexedEncryptedValue_add_S_Key(crypt->crypto, iev, &correct_S_Key, status), status);
376
+ ASSERT_FAILS_STATUS(mc_FLE2IndexedEncryptedValue_add_K_Key(crypt->crypto, iev, &incorrect_K_Key, status),
377
+ status,
378
+ "HMAC validation failure");
379
+ mc_FLE2IndexedEncryptedValue_destroy(iev);
380
+ _mongocrypt_buffer_cleanup(&incorrect_K_Key);
381
+ mongocrypt_status_destroy(status);
382
+ }
383
+
384
+ _mongocrypt_buffer_cleanup(&expect_client_value);
385
+ _mongocrypt_buffer_cleanup(&correct_K_Key);
386
+ _mongocrypt_buffer_cleanup(&expect_K_KeyId);
387
+ _mongocrypt_buffer_cleanup(&correct_S_Key);
388
+ _mongocrypt_buffer_cleanup(&expect_S_KeyId);
389
+ _mongocrypt_buffer_cleanup(&expected_ecc_token);
390
+ _mongocrypt_buffer_cleanup(&expected_esc_token);
391
+ _mongocrypt_buffer_cleanup(&expected_edc_token);
392
+ _mongocrypt_buffer_cleanup(&input_with_tokens);
393
+ _mongocrypt_buffer_cleanup(&input);
394
+ mongocrypt_destroy(crypt);
334
395
  }
335
396
 
336
- static void
337
- test_FLE2IndexedRangeEncryptedValue_parse (_mongocrypt_tester_t *tester)
338
- {
339
- _mongocrypt_buffer_t input;
340
- _mongocrypt_buffer_t expect_S_KeyId;
341
- mc_FLE2IndexedEncryptedValue_t *iev;
342
-
343
- /* Test successful parse. */
344
- {
345
- mongocrypt_status_t *status = mongocrypt_status_new ();
346
- _mongocrypt_buffer_copy_from_hex (
347
- &input,
348
- "091234567812349876123412345678901210b0f174222d077efed93219cdb7fcadfa6"
349
- "be2c9d17c114c346253be6a60b7205f1d5f627f1a64594678a15b756a258a0b324d01"
350
- "222b74c7d61089010440fc4f7135e70b1e2dd5faae398edc446a880164c31ee43d01d"
351
- "530f78118d49e799aaf548700fb7e5874c9247f49b913c23214df653588ce81bf802b"
352
- "884e2c988f3b61dd15ed9ee40e80f1eda7f1f6f33ffa1f4d599be97d8719f8fdf6b1f"
353
- "20b6f705d5d3e732eb9327395dbde6c83c44f5a6d3ad1f1e3c6d18b8499eab0184e1b"
354
- "67a4072b377f44b9877225acb4a3ad111e6e469a37a79ef4c063bc404f50b50a09a7f"
355
- "ecded2bb7d1d2bf6e4e7d855be534eea2de750fc2a31dd770de3e86cd1a7f38ab715a"
356
- "8393b82b0f0fe0419fa26156cf1c9d9554344a9a4655f6a7f6d223d4216ee5da18613"
357
- "e1a7735fb2fd1e29cab13584e5cb43f50c618736f6715b3924ef7a8f89a9c0e6a5a05"
358
- "ff8a89872aa5cd3129a025c64345fd69e1299626c5c50ec52646857d8cc80c8c40d9d"
359
- "ea5cf055e9778fe57043bcce3ff6c29da16ee843f5390c3765aaec69618435fe390c5"
360
- "b8ae51b0a5f5f7cbd94e5aad1f6e188402f5fa7a104ccb694cea7feafadccce5e4afb"
361
- "749190e9101f962ab599a0f5f0f379ca3772361afb057b2b2ba7f4d435f65ebe2ce75"
362
- "00047143fd14e6199be078ca83c49b9e8e1387e5b36b723444c80cd18ce1454273f81"
363
- "5f3c7697d34f75ecae102750d50db03f530d382072fd004999cf915982b9ee8582baf"
364
- "e6f9a4a4df0896b8b246fd0f191858af865c2e40ddce6bb27cae92180bc83c3e2f783"
365
- "2518f771711acf2321ea0fabbf0b7bd256b1a3620e86f5170dcf3d5af6abb614cece5"
366
- "16de4536b03cb978546322f5ab55d25980a20aee6f46fefb06f4542637f607ae64688"
367
- "2940060e162e85c876c94e8ef55b072e2937c4e192c0851925b74cc8763e780f19956"
368
- "65e2896e98f3edafd3c81414e95346e3e679497263511a2090e0cd931db5412d19d7e"
369
- "6fb6670925dfd4e41c7a89a40eb44407bbf20f61d7e6b376fca2013201f727b0e71b6"
370
- "569361609f557b584c0c672b420823902a5d3fb965a1ce90887f37eed0fff358189ab"
371
- "f7921bb881deff1db4a0787d85e1875042e7090ea15d858e06f48594672a66cfdfd2a"
372
- "c67e457b639f40f47312cb71a16f7d21d3ef828b439cbdaf6b3d89345bc5aa2a1f736"
373
- "a483fb5efa45288a103bbabc2d7f73eda875621f1c6e2eaeb3c839cbd5b339f87cf36"
374
- "8d4eef413fb7d5ad5969e0cc6c557509e99cfbf7741cd92c8b5a8c26d723ac7d8c420"
375
- "5c9dc14f202e247f4e14af221aa4b31e1a29f61a79cfc9afc7cdf83cf8e005f646b78"
376
- "c3feea7a27be4f8b28a06555a80e85de397c61f15d2140309317b918141556f6912d8"
377
- "9bfe122c605fe780dec62eded3eacbdac1b90de2b280d745ccc73a9513be82f980326"
378
- "0ee7119b86f19aeef270d64241472e48aa0c5165aee80e9e522c81090531aeb957ff7"
379
- "0a445791043a242c1964cbd3801a24631dd6411e8ba56ef4c562d7c9085abf86671ca"
380
- "ce021348e7bb99490c277e4d0cc0feaacc5763bb166c6cfe6fad03585ef268c5730cf"
381
- "cc81a358ba5c90c44cc603776d0e5213f985c5d8e8643e7261bf38abf3bb123c0603d"
382
- "3124e9f4c14466ded55777f94c35a235464a9a352039d8c1a13480915cc03b69eaa90"
383
- "360db7c7a67a1500c179e7d191f73d16852206a1ee3787d4ff37381e4b61a7531cc08"
384
- "918c1176580f71e0ff05235b90d44d027ce0841842aae22aa5777c029b415f6a8eebb"
385
- "adf4fb08e8699ff7f3568dee78245368cd83b630f7bae1f8acc35bdcb0e3c89157d43"
386
- "6797845a41aaf5413f0058af7de89ae1c0346bc6752f365c5bb5af13963558864de20"
387
- "cbd49970d807110abc01df10e1f01bc5ef1727afed36f1be02f02e2c4bcd26d6e10bf"
388
- "e048bf2685e996fbad0e55b977a8382845a3e06202aa080ce594afd130a46df1642dd"
389
- "689ace1eb9fea08fbe92bbf5538c9093a3f5f0c8366c4d7c89b7be2dd58db2a9f4d55"
390
- "ef20e64be540bea405f1fda9e2b38ec96b0673b0a8c974ababd2c2b86abd78c3d1e9a"
391
- "ba8fadc92d4d7a4dade928293a9cc10437509c2e6c1c2d4e5935b7ba2ef0e07d0d282"
392
- "b993a232771b4833a57a09fc0b4cd96ba67989801c7bc6bc3b0de3af20449ca05a82e"
393
- "8638ce306f225ff7a46bc5cff944f1beca387ca555397430a1b64c7586dffec5cd25b"
394
- "31b5ab15cd52f6b7655cbfe79d8bd8ad1327381276ecccf9befb4ea5de1fc90fb08b5"
395
- "abee55bee2c333cbb9d41e28698aa9194659dea552e410589bd703c6032d71da178ce"
396
- "4a8a476ac74086ba27f8d75b185071cab5062a79d55d8a1c12ebecbf0841100dc7514"
397
- "555f789b70b46a0876795a66088c96aecfa0ae4a4068d2d9c1756ecde82db49d06a13"
398
- "c734270c85a4be5be44b7646a36e6ca5f3e9fbf35d6b849901844d9ad9c67c1d93465"
399
- "d16c7fa3f576bf1fbdaa71b20eae7609290c7eda5f9ec31702702fea9b3b53e9a06e0"
400
- "34f5058efd58d3129a78976c86ed47c849aae5a62a1c949f176133bcf7c7e1dd088f3"
401
- "d65b313312f822ca81ee4b9f70e4781459da6172885cb8d1c0ce5564d00aff776f09b"
402
- "de5f47ed030e8893db768c40775db76b29a3cfd37fd8edf7c0c686e8e13ca57a74898"
403
- "11a5bb0ceaf415f4fdd7725e5273cd3dcaaab00f585e877652e3566449535bfb1a2f7"
404
- "daff5a90dc00e0977b639560238cbe5f20c7de4014d1473c83a602c7f86a727e29776"
405
- "fabc87fbfe67550867084d0a34e8e3ac54bdd9134b0fbd46521591f955ccc36b4a5c1"
406
- "5122a7b7d022e0b2c9addbc56f0adda8af808c1515a88dcc83294dc51c36dfde69a40"
407
- "6e1784d6901ca2a2e80ce1b23aceba63c9091a96aab34026766647c36380dba6edc3e"
408
- "71e04df9481272c0793f9c0d22ea7502f53927b875be5141372820dd63bf309182cf8"
409
- "f31809fe4960f7008b43ebd7b6b858273d7946082e00314b06b4dc57f3227a5db42ae"
410
- "967a6b23efe55ed46f100a06252734519f09ed45537fc92f6334f7845ed7cd9ce584a"
411
- "c4f61e6e3767a7695ae28d8f93265771cfe014b6bb89c911dbc64f522830a56d252b9"
412
- "b0923059b9d998fe706d03618863bc40bf6056914e9eed311e9bbc32a06f7d919fd87"
413
- "884faa054491f3dbfcf20cfabbf4d53fdcd51f576793d3c4e78530df23ddc4bfdf7ae"
414
- "92f17bd6c108e9659dd9f76ea604650c6cc04ab29202c15b699a1bc1456210815b5a8"
415
- "ef33d8559c8c8250ab0f55e8c5d77a1017944890e44b59e1887391ffb16922169ef1f"
416
- "820003f92b5747bef6e6fcdcc08397db5a3345c136896c3a38ff7dbc3a2a2d0f15633"
417
- "612d3f7f758c304e9be67758cf6e6e0b402250b5d82");
418
- _mongocrypt_buffer_copy_from_hex (&expect_S_KeyId,
419
- "12345678123498761234123456789012");
420
- iev = mc_FLE2IndexedEncryptedValue_new ();
421
- ASSERT_OK_STATUS (
422
- mc_FLE2IndexedEncryptedValue_parse (iev, &input, status), status);
423
- const _mongocrypt_buffer_t *got =
424
- mc_FLE2IndexedEncryptedValue_get_S_KeyId (iev, status);
425
- ASSERT_OR_PRINT (got != NULL, status);
426
- ASSERT_CMPBUF (expect_S_KeyId, *got);
427
- bson_type_t got_bson_type =
428
- mc_FLE2IndexedEncryptedValue_get_original_bson_type (iev, status);
429
- ASSERT_OR_PRINT (got_bson_type == BSON_TYPE_INT32, status);
430
- mc_FLE2IndexedEncryptedValue_destroy (iev);
431
- _mongocrypt_buffer_cleanup (&expect_S_KeyId);
432
- _mongocrypt_buffer_cleanup (&input);
433
- mongocrypt_status_destroy (status);
434
- }
397
+ static void test_FLE2IndexedRangeEncryptedValue_parse(_mongocrypt_tester_t *tester) {
398
+ _mongocrypt_buffer_t input;
399
+ _mongocrypt_buffer_t expect_S_KeyId;
400
+ mc_FLE2IndexedEncryptedValue_t *iev;
401
+
402
+ /* Test successful parse. */
403
+ {
404
+ mongocrypt_status_t *status = mongocrypt_status_new();
405
+ _mongocrypt_buffer_copy_from_hex(&input,
406
+ "091234567812349876123412345678901210b0f174222d077efed93219cdb7fcadfa6"
407
+ "be2c9d17c114c346253be6a60b7205f1d5f627f1a64594678a15b756a258a0b324d01"
408
+ "222b74c7d61089010440fc4f7135e70b1e2dd5faae398edc446a880164c31ee43d01d"
409
+ "530f78118d49e799aaf548700fb7e5874c9247f49b913c23214df653588ce81bf802b"
410
+ "884e2c988f3b61dd15ed9ee40e80f1eda7f1f6f33ffa1f4d599be97d8719f8fdf6b1f"
411
+ "20b6f705d5d3e732eb9327395dbde6c83c44f5a6d3ad1f1e3c6d18b8499eab0184e1b"
412
+ "67a4072b377f44b9877225acb4a3ad111e6e469a37a79ef4c063bc404f50b50a09a7f"
413
+ "ecded2bb7d1d2bf6e4e7d855be534eea2de750fc2a31dd770de3e86cd1a7f38ab715a"
414
+ "8393b82b0f0fe0419fa26156cf1c9d9554344a9a4655f6a7f6d223d4216ee5da18613"
415
+ "e1a7735fb2fd1e29cab13584e5cb43f50c618736f6715b3924ef7a8f89a9c0e6a5a05"
416
+ "ff8a89872aa5cd3129a025c64345fd69e1299626c5c50ec52646857d8cc80c8c40d9d"
417
+ "ea5cf055e9778fe57043bcce3ff6c29da16ee843f5390c3765aaec69618435fe390c5"
418
+ "b8ae51b0a5f5f7cbd94e5aad1f6e188402f5fa7a104ccb694cea7feafadccce5e4afb"
419
+ "749190e9101f962ab599a0f5f0f379ca3772361afb057b2b2ba7f4d435f65ebe2ce75"
420
+ "00047143fd14e6199be078ca83c49b9e8e1387e5b36b723444c80cd18ce1454273f81"
421
+ "5f3c7697d34f75ecae102750d50db03f530d382072fd004999cf915982b9ee8582baf"
422
+ "e6f9a4a4df0896b8b246fd0f191858af865c2e40ddce6bb27cae92180bc83c3e2f783"
423
+ "2518f771711acf2321ea0fabbf0b7bd256b1a3620e86f5170dcf3d5af6abb614cece5"
424
+ "16de4536b03cb978546322f5ab55d25980a20aee6f46fefb06f4542637f607ae64688"
425
+ "2940060e162e85c876c94e8ef55b072e2937c4e192c0851925b74cc8763e780f19956"
426
+ "65e2896e98f3edafd3c81414e95346e3e679497263511a2090e0cd931db5412d19d7e"
427
+ "6fb6670925dfd4e41c7a89a40eb44407bbf20f61d7e6b376fca2013201f727b0e71b6"
428
+ "569361609f557b584c0c672b420823902a5d3fb965a1ce90887f37eed0fff358189ab"
429
+ "f7921bb881deff1db4a0787d85e1875042e7090ea15d858e06f48594672a66cfdfd2a"
430
+ "c67e457b639f40f47312cb71a16f7d21d3ef828b439cbdaf6b3d89345bc5aa2a1f736"
431
+ "a483fb5efa45288a103bbabc2d7f73eda875621f1c6e2eaeb3c839cbd5b339f87cf36"
432
+ "8d4eef413fb7d5ad5969e0cc6c557509e99cfbf7741cd92c8b5a8c26d723ac7d8c420"
433
+ "5c9dc14f202e247f4e14af221aa4b31e1a29f61a79cfc9afc7cdf83cf8e005f646b78"
434
+ "c3feea7a27be4f8b28a06555a80e85de397c61f15d2140309317b918141556f6912d8"
435
+ "9bfe122c605fe780dec62eded3eacbdac1b90de2b280d745ccc73a9513be82f980326"
436
+ "0ee7119b86f19aeef270d64241472e48aa0c5165aee80e9e522c81090531aeb957ff7"
437
+ "0a445791043a242c1964cbd3801a24631dd6411e8ba56ef4c562d7c9085abf86671ca"
438
+ "ce021348e7bb99490c277e4d0cc0feaacc5763bb166c6cfe6fad03585ef268c5730cf"
439
+ "cc81a358ba5c90c44cc603776d0e5213f985c5d8e8643e7261bf38abf3bb123c0603d"
440
+ "3124e9f4c14466ded55777f94c35a235464a9a352039d8c1a13480915cc03b69eaa90"
441
+ "360db7c7a67a1500c179e7d191f73d16852206a1ee3787d4ff37381e4b61a7531cc08"
442
+ "918c1176580f71e0ff05235b90d44d027ce0841842aae22aa5777c029b415f6a8eebb"
443
+ "adf4fb08e8699ff7f3568dee78245368cd83b630f7bae1f8acc35bdcb0e3c89157d43"
444
+ "6797845a41aaf5413f0058af7de89ae1c0346bc6752f365c5bb5af13963558864de20"
445
+ "cbd49970d807110abc01df10e1f01bc5ef1727afed36f1be02f02e2c4bcd26d6e10bf"
446
+ "e048bf2685e996fbad0e55b977a8382845a3e06202aa080ce594afd130a46df1642dd"
447
+ "689ace1eb9fea08fbe92bbf5538c9093a3f5f0c8366c4d7c89b7be2dd58db2a9f4d55"
448
+ "ef20e64be540bea405f1fda9e2b38ec96b0673b0a8c974ababd2c2b86abd78c3d1e9a"
449
+ "ba8fadc92d4d7a4dade928293a9cc10437509c2e6c1c2d4e5935b7ba2ef0e07d0d282"
450
+ "b993a232771b4833a57a09fc0b4cd96ba67989801c7bc6bc3b0de3af20449ca05a82e"
451
+ "8638ce306f225ff7a46bc5cff944f1beca387ca555397430a1b64c7586dffec5cd25b"
452
+ "31b5ab15cd52f6b7655cbfe79d8bd8ad1327381276ecccf9befb4ea5de1fc90fb08b5"
453
+ "abee55bee2c333cbb9d41e28698aa9194659dea552e410589bd703c6032d71da178ce"
454
+ "4a8a476ac74086ba27f8d75b185071cab5062a79d55d8a1c12ebecbf0841100dc7514"
455
+ "555f789b70b46a0876795a66088c96aecfa0ae4a4068d2d9c1756ecde82db49d06a13"
456
+ "c734270c85a4be5be44b7646a36e6ca5f3e9fbf35d6b849901844d9ad9c67c1d93465"
457
+ "d16c7fa3f576bf1fbdaa71b20eae7609290c7eda5f9ec31702702fea9b3b53e9a06e0"
458
+ "34f5058efd58d3129a78976c86ed47c849aae5a62a1c949f176133bcf7c7e1dd088f3"
459
+ "d65b313312f822ca81ee4b9f70e4781459da6172885cb8d1c0ce5564d00aff776f09b"
460
+ "de5f47ed030e8893db768c40775db76b29a3cfd37fd8edf7c0c686e8e13ca57a74898"
461
+ "11a5bb0ceaf415f4fdd7725e5273cd3dcaaab00f585e877652e3566449535bfb1a2f7"
462
+ "daff5a90dc00e0977b639560238cbe5f20c7de4014d1473c83a602c7f86a727e29776"
463
+ "fabc87fbfe67550867084d0a34e8e3ac54bdd9134b0fbd46521591f955ccc36b4a5c1"
464
+ "5122a7b7d022e0b2c9addbc56f0adda8af808c1515a88dcc83294dc51c36dfde69a40"
465
+ "6e1784d6901ca2a2e80ce1b23aceba63c9091a96aab34026766647c36380dba6edc3e"
466
+ "71e04df9481272c0793f9c0d22ea7502f53927b875be5141372820dd63bf309182cf8"
467
+ "f31809fe4960f7008b43ebd7b6b858273d7946082e00314b06b4dc57f3227a5db42ae"
468
+ "967a6b23efe55ed46f100a06252734519f09ed45537fc92f6334f7845ed7cd9ce584a"
469
+ "c4f61e6e3767a7695ae28d8f93265771cfe014b6bb89c911dbc64f522830a56d252b9"
470
+ "b0923059b9d998fe706d03618863bc40bf6056914e9eed311e9bbc32a06f7d919fd87"
471
+ "884faa054491f3dbfcf20cfabbf4d53fdcd51f576793d3c4e78530df23ddc4bfdf7ae"
472
+ "92f17bd6c108e9659dd9f76ea604650c6cc04ab29202c15b699a1bc1456210815b5a8"
473
+ "ef33d8559c8c8250ab0f55e8c5d77a1017944890e44b59e1887391ffb16922169ef1f"
474
+ "820003f92b5747bef6e6fcdcc08397db5a3345c136896c3a38ff7dbc3a2a2d0f15633"
475
+ "612d3f7f758c304e9be67758cf6e6e0b402250b5d82");
476
+ _mongocrypt_buffer_copy_from_hex(&expect_S_KeyId, "12345678123498761234123456789012");
477
+ iev = mc_FLE2IndexedEncryptedValue_new();
478
+ ASSERT_OK_STATUS(mc_FLE2IndexedEncryptedValue_parse(iev, &input, status), status);
479
+ const _mongocrypt_buffer_t *got = mc_FLE2IndexedEncryptedValue_get_S_KeyId(iev, status);
480
+ ASSERT_OR_PRINT(got != NULL, status);
481
+ ASSERT_CMPBUF(expect_S_KeyId, *got);
482
+ bson_type_t got_bson_type = mc_FLE2IndexedEncryptedValue_get_original_bson_type(iev, status);
483
+ ASSERT_OR_PRINT(got_bson_type == BSON_TYPE_INT32, status);
484
+ mc_FLE2IndexedEncryptedValue_destroy(iev);
485
+ _mongocrypt_buffer_cleanup(&expect_S_KeyId);
486
+ _mongocrypt_buffer_cleanup(&input);
487
+ mongocrypt_status_destroy(status);
488
+ }
435
489
  }
436
490
 
437
- void
438
- _mongocrypt_tester_install_fle2_payloads (_mongocrypt_tester_t *tester)
439
- {
440
- INSTALL_TEST (test_FLE2IndexedEqualityEncryptedValue_parse);
441
- INSTALL_TEST (test_FLE2IndexedEqualityEncryptedValue_decrypt);
442
- INSTALL_TEST (test_FLE2IndexedRangeEncryptedValue_parse);
491
+ void _mongocrypt_tester_install_fle2_payloads(_mongocrypt_tester_t *tester) {
492
+ INSTALL_TEST(test_FLE2IndexedEqualityEncryptedValue_parse);
493
+ INSTALL_TEST(test_FLE2IndexedEqualityEncryptedValueTokens_init_from_buf);
494
+ INSTALL_TEST(test_FLE2IndexedEqualityEncryptedValue_decrypt);
495
+ INSTALL_TEST(test_FLE2IndexedRangeEncryptedValue_parse);
443
496
  }