libmongocrypt-helper 1.13.2.0.1001 → 1.14.0.0.1001
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/libmongocrypt/libmongocrypt/CHANGELOG.md +8 -0
- data/ext/libmongocrypt/libmongocrypt/CMakeLists.txt +5 -1
- data/ext/libmongocrypt/libmongocrypt/CODEOWNERS +4 -1
- data/ext/libmongocrypt/libmongocrypt/Earthfile +18 -17
- data/ext/libmongocrypt/libmongocrypt/README.md +8 -8
- data/ext/libmongocrypt/libmongocrypt/bindings/python/CHANGELOG.rst +7 -0
- data/ext/libmongocrypt/libmongocrypt/bindings/python/CONTRIBUTING.md +34 -0
- data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/asynchronous/state_machine.py +6 -2
- data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/binding.py +18 -2
- data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/mongocrypt.py +9 -1
- data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/options.py +14 -0
- data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/synchronous/state_machine.py +6 -2
- data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/version.py +1 -1
- data/ext/libmongocrypt/libmongocrypt/bindings/python/sbom.json +8 -8
- data/ext/libmongocrypt/libmongocrypt/bindings/python/scripts/libmongocrypt-version.txt +1 -0
- data/ext/libmongocrypt/libmongocrypt/bindings/python/{release.sh → scripts/release.sh} +9 -3
- data/ext/libmongocrypt/libmongocrypt/bindings/python/{synchro.py → scripts/synchro.py} +16 -9
- data/ext/libmongocrypt/libmongocrypt/bindings/python/scripts/synchro.sh +8 -0
- data/ext/libmongocrypt/libmongocrypt/bindings/python/scripts/update-version.sh +27 -0
- data/ext/libmongocrypt/libmongocrypt/bindings/python/scripts/update_binding.py +78 -0
- data/ext/libmongocrypt/libmongocrypt/bindings/python/test/test_mongocrypt.py +15 -0
- data/ext/libmongocrypt/libmongocrypt/doc/releasing.md +25 -18
- data/ext/libmongocrypt/libmongocrypt/etc/calc_release_version.py +39 -13
- data/ext/libmongocrypt/libmongocrypt/etc/calc_release_version_selftest.sh +1 -1
- data/ext/libmongocrypt/libmongocrypt/etc/cyclonedx.sbom.json +2 -2
- data/ext/libmongocrypt/libmongocrypt/kms-message/CMakeLists.txt +1 -1
- data/ext/libmongocrypt/libmongocrypt/kms-message/src/hexlify.c +5 -0
- data/ext/libmongocrypt/libmongocrypt/kms-message/src/hexlify.h +1 -1
- data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_azure_request.c +1 -1
- data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_gcp_request.c +1 -1
- data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_kmip_reader_writer.c +4 -2
- data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_kmip_request.c +1 -2
- data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_message_private.h +5 -1
- data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_request.c +1 -1
- data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_request_opt.c +1 -1
- data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_request_str.c +2 -8
- data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_request_str.h +9 -0
- data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_response_parser.c +0 -1
- data/ext/libmongocrypt/libmongocrypt/kms-message/src/sort.c +7 -3
- data/ext/libmongocrypt/libmongocrypt/kms-message/src/sort.h +2 -0
- data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kmip_reader_writer.c +8 -1
- data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_assert.h +5 -4
- data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_azure_online.c +1 -1
- data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_gcp_online.c +1 -1
- data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_kmip_request.c +4 -0
- data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_kmip_response.c +3 -0
- data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_kmip_response_parser.c +4 -0
- data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_online_util.c +1 -1
- data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_online_util.h +1 -1
- data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_request.c +39 -39
- data/ext/libmongocrypt/libmongocrypt/src/crypto/libcrypto.c +235 -65
- data/ext/libmongocrypt/libmongocrypt/src/crypto/none.c +1 -1
- data/ext/libmongocrypt/libmongocrypt/src/csfle-markup.cpp +4 -2
- data/ext/libmongocrypt/libmongocrypt/src/mc-dec128.h +2 -2
- data/ext/libmongocrypt/libmongocrypt/src/mc-dec128.test.cpp +2 -2
- data/ext/libmongocrypt/libmongocrypt/src/mc-efc-private.h +1 -4
- data/ext/libmongocrypt/libmongocrypt/src/mc-efc.c +9 -11
- data/ext/libmongocrypt/libmongocrypt/src/mc-fle-blob-subtype-private.h +1 -0
- data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-encryption-placeholder-private.h +10 -8
- data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-encryption-placeholder.c +167 -176
- data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-equality-payload-v2.c +6 -17
- data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-equality-payload.c +6 -17
- data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-range-payload-private-v2.h +1 -1
- data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-range-payload-v2.c +25 -26
- data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-range-payload.c +2 -1
- data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-text-payload-private.h +122 -0
- data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-text-payload.c +477 -0
- data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-insert-update-payload-private-v2.h +1 -3
- data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-insert-update-payload-v2.c +28 -43
- data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-insert-update-payload.c +6 -17
- data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-iev-v2.c +6 -5
- data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-iev.c +13 -10
- data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-uev-common.c +3 -2
- data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-rfds.c +7 -6
- data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-tag-and-encrypted-metadata-block.c +4 -3
- data/ext/libmongocrypt/libmongocrypt/src/mc-optional-private.h +1 -1
- data/ext/libmongocrypt/libmongocrypt/src/mc-parse-utils-private.h +27 -0
- data/ext/libmongocrypt/libmongocrypt/src/mc-parse-utils.c +48 -0
- data/ext/libmongocrypt/libmongocrypt/src/mc-range-edge-generation-private.h +5 -5
- data/ext/libmongocrypt/libmongocrypt/src/mc-range-edge-generation.c +15 -20
- data/ext/libmongocrypt/libmongocrypt/src/mc-range-encoding-private.h +4 -6
- data/ext/libmongocrypt/libmongocrypt/src/mc-range-encoding.c +9 -18
- data/ext/libmongocrypt/libmongocrypt/src/mc-range-mincover-generator.template.h +4 -5
- data/ext/libmongocrypt/libmongocrypt/src/mc-range-mincover-private.h +5 -9
- data/ext/libmongocrypt/libmongocrypt/src/mc-range-mincover.c +14 -19
- data/ext/libmongocrypt/libmongocrypt/src/mc-rangeopts-private.h +2 -4
- data/ext/libmongocrypt/libmongocrypt/src/mc-rangeopts.c +109 -119
- data/ext/libmongocrypt/libmongocrypt/src/mc-reader-private.h +2 -2
- data/ext/libmongocrypt/libmongocrypt/src/mc-reader.c +4 -2
- data/ext/libmongocrypt/libmongocrypt/src/mc-schema-broker-private.h +0 -3
- data/ext/libmongocrypt/libmongocrypt/src/mc-schema-broker.c +4 -14
- data/ext/libmongocrypt/libmongocrypt/src/mc-str-encode-string-sets-private.h +1 -1
- data/ext/libmongocrypt/libmongocrypt/src/mc-str-encode-string-sets.c +3 -3
- data/ext/libmongocrypt/libmongocrypt/src/mc-text-search-str-encode-private.h +8 -1
- data/ext/libmongocrypt/libmongocrypt/src/mc-text-search-str-encode.c +78 -2
- data/ext/libmongocrypt/libmongocrypt/src/mc-tokens-private.h +34 -16
- data/ext/libmongocrypt/libmongocrypt/src/mc-tokens.c +66 -74
- data/ext/libmongocrypt/libmongocrypt/src/mc-writer-private.h +1 -1
- data/ext/libmongocrypt/libmongocrypt/src/mc-writer.c +4 -2
- data/ext/libmongocrypt/libmongocrypt/src/mlib/error.h +1 -1
- data/ext/libmongocrypt/libmongocrypt/src/mlib/int128.h +12 -1
- data/ext/libmongocrypt/libmongocrypt/src/mlib/int128.test.cpp +5 -0
- data/ext/libmongocrypt/libmongocrypt/src/mlib/path.h +5 -5
- data/ext/libmongocrypt/libmongocrypt/src/mlib/path.test.c +2 -5
- data/ext/libmongocrypt/libmongocrypt/src/mlib/str.h +65 -58
- data/ext/libmongocrypt/libmongocrypt/src/mlib/str.test.c +3 -3
- data/ext/libmongocrypt/libmongocrypt/src/mlib/thread.h +1 -1
- data/ext/libmongocrypt/libmongocrypt/src/mlib/user-check.h +1 -1
- data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-cache-collinfo-private.h +1 -1
- data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-cache-collinfo.c +4 -0
- data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ciphertext-private.h +1 -1
- data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-crypto-private.h +4 -4
- data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-crypto.c +29 -25
- data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-datakey.c +3 -2
- data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-decrypt.c +6 -3
- data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-encrypt.c +48 -58
- data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-rewrap-many-datakey.c +12 -0
- data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx.c +5 -13
- data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-dll-private.h +19 -2
- data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-key-broker.c +9 -9
- data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-marking-private.h +3 -4
- data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-marking.c +285 -89
- data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-opts-private.h +0 -2
- data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-opts.c +0 -1
- data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-private.h +1 -1
- data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-util.c +4 -1
- data/ext/libmongocrypt/libmongocrypt/src/mongocrypt.c +47 -31
- data/ext/libmongocrypt/libmongocrypt/src/os_posix/os_dll.c +2 -0
- data/ext/libmongocrypt/libmongocrypt/src/os_posix/os_mutex.c +1 -1
- data/ext/libmongocrypt/libmongocrypt/src/os_win/os_dll.c +3 -1
- data/ext/libmongocrypt/libmongocrypt/src/os_win/os_mutex.c +1 -1
- data/ext/libmongocrypt/libmongocrypt/src/unicode/case-fold-map.c +1 -1
- data/ext/libmongocrypt/libmongocrypt/src/unicode/diacritic-fold-map.c +1 -1
- data/ext/libmongocrypt/libmongocrypt/src/unicode/fold.c +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/crypt_shared-stub.cpp +0 -14
- data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/encrypted-field-config-map.json +6 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2InsertUpdatePayloadV2-RangeV2.json +8 -0
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/date-v2/encrypted-field-map.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/date-v2/encrypted-payload.json +6 -4
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/date-v2/mongocryptd-reply.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-precision-v2/encrypted-field-map.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-precision-v2/encrypted-payload.json +6 -4
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-precision-v2/mongocryptd-reply.json +2 -2
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-v2/encrypted-field-map.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-v2/encrypted-payload.json +6 -4
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-v2/mongocryptd-reply.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double-precision-v2/encrypted-payload.json +14 -6
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double-v2/encrypted-field-map.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double-v2/encrypted-payload.json +6 -4
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double-v2/mongocryptd-reply.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int32-v2/encrypted-field-map.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int32-v2/encrypted-payload.json +6 -4
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int32-v2/mongocryptd-reply.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int64-v2/encrypted-field-map.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int64-v2/encrypted-payload.json +6 -4
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int64-v2/mongocryptd-reply.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range-explicit/double/encrypted-payload-v2.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range-explicit/double-precision/encrypted-payload-v2.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range-explicit/int32/encrypted-payload-v2.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range-explicit/int32-openinterval/encrypted-payload-v2.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/date-v2/encrypted-field-map.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/date-v2/encrypted-payload.json +6 -4
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/date-v2/mongocryptd-reply.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-precision-v2/encrypted-field-map.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-precision-v2/encrypted-payload.json +6 -4
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-precision-v2/mongocryptd-reply.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-v2/encrypted-field-map.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-v2/encrypted-payload.json +6 -4
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-v2/mongocryptd-reply.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double-precision-v2/encrypted-payload.json +14 -6
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double-v2/encrypted-field-map.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double-v2/encrypted-payload.json +6 -4
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double-v2/mongocryptd-reply.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int32-v2/encrypted-field-map.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int32-v2/encrypted-payload.json +3 -3
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int32-v2/mongocryptd-reply.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int64-v2/encrypted-field-map.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int64-v2/encrypted-payload.json +6 -4
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int64-v2/mongocryptd-reply.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/double/encrypted-payload-v2.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/double-precision/encrypted-payload-v2.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/int32/encrypted-payload-v2.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/sparsity-2/encrypted-payload-v2.json +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/data/tokens/mc.json +8 -0
- data/ext/libmongocrypt/libmongocrypt/test/data/tokens/server.json +8 -0
- data/ext/libmongocrypt/libmongocrypt/test/example-state-machine.c +5 -5
- data/ext/libmongocrypt/libmongocrypt/test/test-dll.cpp +11 -5
- data/ext/libmongocrypt/libmongocrypt/test/test-gcp-auth.c +2 -2
- data/ext/libmongocrypt/libmongocrypt/test/test-mc-efc.c +9 -11
- data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-encryption-placeholder.c +18 -29
- data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-find-equality-payload-v2.c +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-find-range-payload-v2.c +2 -18
- data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-find-text-payload.c +320 -0
- data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-payload-iup-v2.c +2 -17
- data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-payload-iup.c +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-rfds.c +8 -5
- data/ext/libmongocrypt/libmongocrypt/test/test-mc-range-edge-generation.c +6 -10
- data/ext/libmongocrypt/libmongocrypt/test/test-mc-range-encoding.c +29 -33
- data/ext/libmongocrypt/libmongocrypt/test/test-mc-range-mincover.c +12 -20
- data/ext/libmongocrypt/libmongocrypt/test/test-mc-rangeopts.c +5 -20
- data/ext/libmongocrypt/libmongocrypt/test/test-mc-reader.c +5 -5
- data/ext/libmongocrypt/libmongocrypt/test/test-mc-text-search-str-encode.c +147 -18
- data/ext/libmongocrypt/libmongocrypt/test/test-mc-tokens.c +35 -14
- data/ext/libmongocrypt/libmongocrypt/test/test-mc-writer.c +10 -10
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-assert-match-bson.c +3 -7
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-assert.h +36 -24
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-buffer.c +4 -4
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-cache.c +2 -2
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ciphertext.c +13 -13
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-cleanup.c +49 -55
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-compact.c +64 -67
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-crypto-hooks.c +18 -18
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-crypto-std-hooks.c +4 -0
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-crypto.c +4 -3
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-csfle-lib.c +13 -3
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-decrypt.c +31 -13
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-encrypt.c +35 -52
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-rewrap-many-datakey.c +28 -1
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-setopt.c +50 -91
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-datakey.c +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-dll.c +7 -4
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-endpoint.c +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-kek.c +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-key-cache.c +3 -5
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-kms-ctx.c +2 -2
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-local-kms.c +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-log.c +2 -2
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-marking.c +527 -225
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-status.c +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt.c +45 -56
- data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt.h +12 -3
- data/ext/libmongocrypt/libmongocrypt/test/test-named-kms-providers.c +11 -11
- data/ext/libmongocrypt/libmongocrypt/test/test-unicode-fold.c +6 -2
- data/ext/libmongocrypt/libmongocrypt/test/util/HELP.autogen +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/util/csfle.c +1 -1
- data/ext/libmongocrypt/libmongocrypt/test/util/util.c +5 -5
- data/ext/libmongocrypt/libmongocrypt/test/util/util.h +7 -6
- data/lib/libmongocrypt_helper/version.rb +2 -2
- metadata +17 -13
- data/ext/libmongocrypt/libmongocrypt/bindings/python/libmongocrypt-version.txt +0 -1
- data/ext/libmongocrypt/libmongocrypt/bindings/python/strip_header.py +0 -50
- data/ext/libmongocrypt/libmongocrypt/bindings/python/update-sbom.sh +0 -14
- data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/success/encrypted-payload.json +0 -29
- data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/encrypted-payload.json +0 -29
- data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2EqualityIndexedValueV2.json +0 -8
- data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2RangeIndexedValueV2.json +0 -8
- /data/ext/libmongocrypt/libmongocrypt/bindings/python/{build-manylinux-wheel.sh → scripts/build-manylinux-wheel.sh} +0 -0
- /data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/{FLE2InsertUpdatePayload-with-edges.json → FLE2InsertUpdatePayload-RangeV1.json} +0 -0
- /data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/{FLE2InsertUpdatePayload-with-edges-V2.json → FLE2InsertUpdatePayloadV2-RangeV1.json} +0 -0
@@ -73,8 +73,7 @@ static void _test_FLE2FindRangePayloadV2_roundtrip(_mongocrypt_tester_t *tester)
|
|
73
73
|
payload.secondOperator = expect_secondOperator;
|
74
74
|
|
75
75
|
bson_init(&out_bson);
|
76
|
-
|
77
|
-
mc_FLE2FindRangePayloadV2_serialize(&payload, &out_bson, use_range_v2);
|
76
|
+
mc_FLE2FindRangePayloadV2_serialize(&payload, &out_bson);
|
78
77
|
|
79
78
|
ASSERT_EQUAL_BSON(&in_bson, &out_bson);
|
80
79
|
|
@@ -100,26 +99,11 @@ static void _test_FLE2FindRangePayloadV2_includes_crypto_params(_mongocrypt_test
|
|
100
99
|
// Test crypto params from SERVER-91889 are included in "range" payload.
|
101
100
|
{
|
102
101
|
bson_t got = BSON_INITIALIZER;
|
103
|
-
|
104
|
-
ASSERT(mc_FLE2FindRangePayloadV2_serialize(&payload, &got, use_range_v2));
|
102
|
+
ASSERT(mc_FLE2FindRangePayloadV2_serialize(&payload, &got));
|
105
103
|
_assert_match_bson(&got, TMP_BSON(BSON_STR({"sp" : 1, "pn" : 2, "tf" : 3, "mn" : 4, "mx" : 5})));
|
106
104
|
bson_destroy(&got);
|
107
105
|
}
|
108
106
|
|
109
|
-
// Test crypto params from SERVER-91889 are excluded in "rangePreview" payload.
|
110
|
-
{
|
111
|
-
bson_t got = BSON_INITIALIZER;
|
112
|
-
const bool use_range_v2 = false;
|
113
|
-
ASSERT(mc_FLE2FindRangePayloadV2_serialize(&payload, &got, use_range_v2));
|
114
|
-
_assert_match_bson(&got, TMP_BSON(BSON_STR({
|
115
|
-
"sp" : {"$exists" : false},
|
116
|
-
"pn" : {"$exists" : false},
|
117
|
-
"tf" : {"$exists" : false},
|
118
|
-
"mn" : {"$exists" : false},
|
119
|
-
"mx" : {"$exists" : false}
|
120
|
-
})));
|
121
|
-
bson_destroy(&got);
|
122
|
-
}
|
123
107
|
mc_FLE2FindRangePayloadV2_cleanup(&payload);
|
124
108
|
}
|
125
109
|
|
@@ -0,0 +1,320 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright 2025-present MongoDB, Inc.
|
3
|
+
*
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
* you may not use this file except in compliance with the License.
|
6
|
+
* You may obtain a copy of the License at
|
7
|
+
*
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
*
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
* See the License for the specific language governing permissions and
|
14
|
+
* limitations under the License.
|
15
|
+
*/
|
16
|
+
|
17
|
+
#include <bson/bson.h>
|
18
|
+
|
19
|
+
#include "mc-fle2-find-text-payload-private.h"
|
20
|
+
#include "test-mongocrypt-assert-match-bson.h"
|
21
|
+
#include "test-mongocrypt-assert.h"
|
22
|
+
#include "test-mongocrypt.h"
|
23
|
+
|
24
|
+
#define VALIDATE_TOKEN_SET(p, e) \
|
25
|
+
ASSERT_CMPBUF((p)->edcDerivedToken, (e)->edcDerivedToken); \
|
26
|
+
ASSERT_CMPBUF((p)->escDerivedToken, (e)->escDerivedToken); \
|
27
|
+
ASSERT_CMPBUF((p)->serverDerivedFromDataToken, (e)->serverDerivedFromDataToken)
|
28
|
+
|
29
|
+
static void _validate_parsed_payload(_mongocrypt_tester_t *tester,
|
30
|
+
mc_FLE2FindTextPayload_t *expected,
|
31
|
+
mc_FLE2FindTextPayload_t *parsed) {
|
32
|
+
ASSERT(parsed->tokenSets.exact.set == expected->tokenSets.exact.set);
|
33
|
+
ASSERT(parsed->tokenSets.substring.set == expected->tokenSets.substring.set);
|
34
|
+
ASSERT(parsed->tokenSets.suffix.set == expected->tokenSets.suffix.set);
|
35
|
+
ASSERT(parsed->tokenSets.prefix.set == expected->tokenSets.prefix.set);
|
36
|
+
ASSERT(parsed->caseFold == expected->caseFold);
|
37
|
+
ASSERT(parsed->diacriticFold == expected->diacriticFold);
|
38
|
+
ASSERT(parsed->substringSpec.set == expected->substringSpec.set);
|
39
|
+
ASSERT(parsed->suffixSpec.set == expected->suffixSpec.set);
|
40
|
+
ASSERT(parsed->prefixSpec.set == expected->prefixSpec.set);
|
41
|
+
|
42
|
+
if (parsed->tokenSets.exact.set) {
|
43
|
+
VALIDATE_TOKEN_SET(&parsed->tokenSets.exact.value, &expected->tokenSets.exact.value);
|
44
|
+
}
|
45
|
+
if (parsed->tokenSets.substring.set) {
|
46
|
+
VALIDATE_TOKEN_SET(&parsed->tokenSets.substring.value, &expected->tokenSets.substring.value);
|
47
|
+
}
|
48
|
+
if (parsed->tokenSets.suffix.set) {
|
49
|
+
VALIDATE_TOKEN_SET(&parsed->tokenSets.suffix.value, &expected->tokenSets.suffix.value);
|
50
|
+
}
|
51
|
+
if (parsed->tokenSets.prefix.set) {
|
52
|
+
VALIDATE_TOKEN_SET(&parsed->tokenSets.prefix.value, &expected->tokenSets.prefix.value);
|
53
|
+
}
|
54
|
+
|
55
|
+
if (parsed->substringSpec.set) {
|
56
|
+
ASSERT_CMPUINT32(parsed->substringSpec.value.lb, ==, expected->substringSpec.value.lb);
|
57
|
+
ASSERT_CMPUINT32(parsed->substringSpec.value.ub, ==, expected->substringSpec.value.ub);
|
58
|
+
ASSERT_CMPUINT32(parsed->substringSpec.value.mlen, ==, expected->substringSpec.value.mlen);
|
59
|
+
}
|
60
|
+
if (parsed->suffixSpec.set) {
|
61
|
+
ASSERT_CMPUINT32(parsed->suffixSpec.value.lb, ==, expected->suffixSpec.value.lb);
|
62
|
+
ASSERT_CMPUINT32(parsed->suffixSpec.value.ub, ==, expected->suffixSpec.value.ub);
|
63
|
+
}
|
64
|
+
if (parsed->prefixSpec.set) {
|
65
|
+
ASSERT_CMPUINT32(parsed->prefixSpec.value.lb, ==, expected->prefixSpec.value.lb);
|
66
|
+
ASSERT_CMPUINT32(parsed->prefixSpec.value.ub, ==, expected->prefixSpec.value.ub);
|
67
|
+
}
|
68
|
+
}
|
69
|
+
|
70
|
+
#undef VALIDATE_TOKEN_SET
|
71
|
+
|
72
|
+
static void
|
73
|
+
_do_roundtrip_test(_mongocrypt_tester_t *tester, mc_FLE2FindTextPayload_t *spec, const char *expectedFailMsg) {
|
74
|
+
mongocrypt_status_t *status = mongocrypt_status_new();
|
75
|
+
|
76
|
+
bson_t out_bson;
|
77
|
+
bson_init(&out_bson);
|
78
|
+
ASSERT(mc_FLE2FindTextPayload_serialize(spec, &out_bson));
|
79
|
+
|
80
|
+
mc_FLE2FindTextPayload_t parsed;
|
81
|
+
mc_FLE2FindTextPayload_init(&parsed);
|
82
|
+
|
83
|
+
bool ret = mc_FLE2FindTextPayload_parse(&parsed, &out_bson, status);
|
84
|
+
if (expectedFailMsg) {
|
85
|
+
ASSERT_FAILS_STATUS(ret, status, expectedFailMsg);
|
86
|
+
} else {
|
87
|
+
ASSERT_OK_STATUS(ret, status);
|
88
|
+
_validate_parsed_payload(tester, spec, &parsed);
|
89
|
+
}
|
90
|
+
|
91
|
+
mc_FLE2FindTextPayload_cleanup(&parsed);
|
92
|
+
bson_destroy(&out_bson);
|
93
|
+
mongocrypt_status_destroy(status);
|
94
|
+
}
|
95
|
+
|
96
|
+
static void _do_parse_error_test(_mongocrypt_tester_t *tester, bson_t *to_parse, const char *expectedFailMsg) {
|
97
|
+
mongocrypt_status_t *status = mongocrypt_status_new();
|
98
|
+
mc_FLE2FindTextPayload_t parsed;
|
99
|
+
mc_FLE2FindTextPayload_init(&parsed);
|
100
|
+
bool ret = mc_FLE2FindTextPayload_parse(&parsed, to_parse, status);
|
101
|
+
ASSERT_FAILS_STATUS(ret, status, expectedFailMsg);
|
102
|
+
mc_FLE2FindTextPayload_cleanup(&parsed);
|
103
|
+
mongocrypt_status_destroy(status);
|
104
|
+
}
|
105
|
+
|
106
|
+
static const char *k_edcToken = "280edab4190763d1f4183d383f8830773859c3a74a13161094e6fd44e7390fed";
|
107
|
+
static const char *k_escToken = "c3c8980ed11e63ec199104bc9a0889322c9eb80d00eee0b5148dc83f7e78adb7";
|
108
|
+
static const char *k_svrToken = "8773322a2b9e6c08886db6bc65b46ffdd64651e8a49400a9e55ff5bc550d45bf";
|
109
|
+
|
110
|
+
// Tests mc_FLE2FindTextPayload_serialize() works correctly, and non-error cases
|
111
|
+
// for mc_FLE2FindTextPayload_parse().
|
112
|
+
static void _test_FLE2FindTextPayload_roundtrip(_mongocrypt_tester_t *tester) {
|
113
|
+
// Test exact token set + prefix spec present
|
114
|
+
{
|
115
|
+
mc_FLE2FindTextPayload_t payload;
|
116
|
+
mc_FLE2FindTextPayload_init(&payload);
|
117
|
+
payload.tokenSets.exact.set = true;
|
118
|
+
_mongocrypt_buffer_copy_from_hex(&payload.tokenSets.exact.value.edcDerivedToken, k_edcToken);
|
119
|
+
_mongocrypt_buffer_copy_from_hex(&payload.tokenSets.exact.value.escDerivedToken, k_escToken);
|
120
|
+
_mongocrypt_buffer_copy_from_hex(&payload.tokenSets.exact.value.serverDerivedFromDataToken, k_svrToken);
|
121
|
+
payload.caseFold = true;
|
122
|
+
payload.diacriticFold = false;
|
123
|
+
payload.maxContentionFactor = 43;
|
124
|
+
payload.prefixSpec.set = true;
|
125
|
+
payload.prefixSpec.value.lb = 2;
|
126
|
+
payload.prefixSpec.value.ub = 20;
|
127
|
+
_do_roundtrip_test(tester, &payload, NULL);
|
128
|
+
mc_FLE2FindTextPayload_cleanup(&payload);
|
129
|
+
}
|
130
|
+
|
131
|
+
// Test substring token set + substring spec present
|
132
|
+
{
|
133
|
+
mc_FLE2FindTextPayload_t payload;
|
134
|
+
mc_FLE2FindTextPayload_init(&payload);
|
135
|
+
payload.tokenSets.substring.set = true;
|
136
|
+
_mongocrypt_buffer_copy_from_hex(&payload.tokenSets.substring.value.edcDerivedToken, k_edcToken);
|
137
|
+
_mongocrypt_buffer_copy_from_hex(&payload.tokenSets.substring.value.escDerivedToken, k_escToken);
|
138
|
+
_mongocrypt_buffer_copy_from_hex(&payload.tokenSets.substring.value.serverDerivedFromDataToken, k_svrToken);
|
139
|
+
payload.caseFold = false;
|
140
|
+
payload.diacriticFold = true;
|
141
|
+
payload.maxContentionFactor = 12;
|
142
|
+
payload.substringSpec.set = true;
|
143
|
+
payload.substringSpec.value.lb = 3;
|
144
|
+
payload.substringSpec.value.ub = 30;
|
145
|
+
payload.substringSpec.value.mlen = 300;
|
146
|
+
_do_roundtrip_test(tester, &payload, NULL);
|
147
|
+
mc_FLE2FindTextPayload_cleanup(&payload);
|
148
|
+
}
|
149
|
+
|
150
|
+
// Test suffix token set + suffix & prefix specs present
|
151
|
+
{
|
152
|
+
mc_FLE2FindTextPayload_t payload;
|
153
|
+
mc_FLE2FindTextPayload_init(&payload);
|
154
|
+
payload.tokenSets.suffix.set = true;
|
155
|
+
_mongocrypt_buffer_copy_from_hex(&payload.tokenSets.suffix.value.edcDerivedToken, k_edcToken);
|
156
|
+
_mongocrypt_buffer_copy_from_hex(&payload.tokenSets.suffix.value.escDerivedToken, k_escToken);
|
157
|
+
_mongocrypt_buffer_copy_from_hex(&payload.tokenSets.suffix.value.serverDerivedFromDataToken, k_svrToken);
|
158
|
+
payload.caseFold = true;
|
159
|
+
payload.diacriticFold = true;
|
160
|
+
payload.maxContentionFactor = 21;
|
161
|
+
payload.suffixSpec.set = true;
|
162
|
+
payload.suffixSpec.value.lb = 4;
|
163
|
+
payload.suffixSpec.value.ub = 40;
|
164
|
+
payload.prefixSpec.set = true;
|
165
|
+
payload.prefixSpec.value.lb = 5;
|
166
|
+
payload.prefixSpec.value.ub = 50;
|
167
|
+
_do_roundtrip_test(tester, &payload, NULL);
|
168
|
+
mc_FLE2FindTextPayload_cleanup(&payload);
|
169
|
+
}
|
170
|
+
|
171
|
+
// Test prefix token set + all specs present
|
172
|
+
{
|
173
|
+
mc_FLE2FindTextPayload_t payload;
|
174
|
+
mc_FLE2FindTextPayload_init(&payload);
|
175
|
+
payload.tokenSets.prefix.set = true;
|
176
|
+
_mongocrypt_buffer_copy_from_hex(&payload.tokenSets.prefix.value.edcDerivedToken, k_edcToken);
|
177
|
+
_mongocrypt_buffer_copy_from_hex(&payload.tokenSets.prefix.value.escDerivedToken, k_escToken);
|
178
|
+
_mongocrypt_buffer_copy_from_hex(&payload.tokenSets.prefix.value.serverDerivedFromDataToken, k_svrToken);
|
179
|
+
payload.caseFold = false;
|
180
|
+
payload.diacriticFold = false;
|
181
|
+
payload.maxContentionFactor = 55;
|
182
|
+
payload.substringSpec.set = true;
|
183
|
+
payload.substringSpec.value.lb = 3;
|
184
|
+
payload.substringSpec.value.ub = 30;
|
185
|
+
payload.substringSpec.value.mlen = 300;
|
186
|
+
payload.suffixSpec.set = true;
|
187
|
+
payload.suffixSpec.value.lb = 4;
|
188
|
+
payload.suffixSpec.value.ub = 40;
|
189
|
+
payload.prefixSpec.set = true;
|
190
|
+
payload.prefixSpec.value.lb = 5;
|
191
|
+
payload.prefixSpec.value.ub = 50;
|
192
|
+
_do_roundtrip_test(tester, &payload, NULL);
|
193
|
+
mc_FLE2FindTextPayload_cleanup(&payload);
|
194
|
+
}
|
195
|
+
}
|
196
|
+
|
197
|
+
#define INT64_JSON "{'$numberLong': '5'}"
|
198
|
+
#define TOKEN_JSON "{'$binary': 'abcd', '$type': '0'}"
|
199
|
+
#define BADTOKEN_JSON "{'$binary': 'abcd', '$type': '2'}"
|
200
|
+
#define D_JSON "'d': " TOKEN_JSON
|
201
|
+
#define S_JSON "'s': " TOKEN_JSON
|
202
|
+
#define L_JSON "'l': " TOKEN_JSON
|
203
|
+
#define TOKENSET_JSON "{" D_JSON ", " S_JSON ", " L_JSON "}"
|
204
|
+
#define TS_JSON "'ts':{'e':" TOKENSET_JSON "}"
|
205
|
+
#define CM_JSON "'cm':" INT64_JSON
|
206
|
+
#define CF_JSON "'cf':false"
|
207
|
+
#define DF_JSON "'df':true"
|
208
|
+
|
209
|
+
// Tests error cases for mc_FLE2FindTextPayload_parse().
|
210
|
+
static void _test_FLE2FindTextPayload_parse_errors(_mongocrypt_tester_t *tester) {
|
211
|
+
// Test multiple optional fields present under ts is disallowed when parsing
|
212
|
+
{
|
213
|
+
mc_FLE2FindTextPayload_t payload;
|
214
|
+
mc_FLE2FindTextPayload_init(&payload);
|
215
|
+
payload.tokenSets.exact.set = true;
|
216
|
+
_mongocrypt_buffer_copy_from_hex(&payload.tokenSets.exact.value.edcDerivedToken, k_edcToken);
|
217
|
+
_mongocrypt_buffer_copy_from_hex(&payload.tokenSets.exact.value.escDerivedToken, k_escToken);
|
218
|
+
_mongocrypt_buffer_copy_from_hex(&payload.tokenSets.exact.value.serverDerivedFromDataToken, k_svrToken);
|
219
|
+
payload.tokenSets.suffix.set = true;
|
220
|
+
_mongocrypt_buffer_copy_from_hex(&payload.tokenSets.suffix.value.edcDerivedToken, k_edcToken);
|
221
|
+
_mongocrypt_buffer_copy_from_hex(&payload.tokenSets.suffix.value.escDerivedToken, k_escToken);
|
222
|
+
_mongocrypt_buffer_copy_from_hex(&payload.tokenSets.suffix.value.serverDerivedFromDataToken, k_svrToken);
|
223
|
+
_do_roundtrip_test(tester,
|
224
|
+
&payload,
|
225
|
+
"Error parsing TextSearchFindTokenSets: cannot have multiple optional fields present");
|
226
|
+
mc_FLE2FindTextPayload_cleanup(&payload);
|
227
|
+
}
|
228
|
+
// Test empty ts object is disallowed when parsing
|
229
|
+
{
|
230
|
+
mc_FLE2FindTextPayload_t payload;
|
231
|
+
mc_FLE2FindTextPayload_init(&payload);
|
232
|
+
_do_roundtrip_test(tester,
|
233
|
+
&payload,
|
234
|
+
"Error parsing TextSearchFindTokenSets: exactly one optional field is required");
|
235
|
+
mc_FLE2FindTextPayload_cleanup(&payload);
|
236
|
+
}
|
237
|
+
|
238
|
+
// Test missing required fields in top-level object
|
239
|
+
{
|
240
|
+
bson_t *no_ts = TMP_BSON("{%s, %s, %s}", CM_JSON, CF_JSON, DF_JSON);
|
241
|
+
bson_t *no_cm = TMP_BSON("{%s, %s, %s}", TS_JSON, CF_JSON, DF_JSON);
|
242
|
+
bson_t *no_cf = TMP_BSON("{%s, %s, %s}", TS_JSON, CM_JSON, DF_JSON);
|
243
|
+
bson_t *no_df = TMP_BSON("{%s, %s, %s}", TS_JSON, CM_JSON, CF_JSON);
|
244
|
+
_do_parse_error_test(tester, no_ts, "Missing required field 'ts'");
|
245
|
+
_do_parse_error_test(tester, no_cm, "Missing required field 'cm'");
|
246
|
+
_do_parse_error_test(tester, no_cf, "Missing required field 'cf'");
|
247
|
+
_do_parse_error_test(tester, no_df, "Missing required field 'df'");
|
248
|
+
}
|
249
|
+
|
250
|
+
const char *all_required = TS_JSON ", " CM_JSON ", " CF_JSON ", " DF_JSON;
|
251
|
+
const char *required_no_ts = CM_JSON ", " CF_JSON ", " DF_JSON;
|
252
|
+
|
253
|
+
// Test missing required fields in token set
|
254
|
+
{
|
255
|
+
bson_t *no_e_d = TMP_BSON("{'ts': {'e': {%s, %s}}, %s}", S_JSON, L_JSON, required_no_ts);
|
256
|
+
bson_t *no_e_s = TMP_BSON("{'ts': {'e': {%s, %s}}, %s}", D_JSON, L_JSON, required_no_ts);
|
257
|
+
bson_t *no_e_l = TMP_BSON("{'ts': {'e': {%s, %s}}, %s}", S_JSON, D_JSON, required_no_ts);
|
258
|
+
_do_parse_error_test(tester, no_e_d, "Missing required field 'd'");
|
259
|
+
_do_parse_error_test(tester, no_e_s, "Missing required field 's'");
|
260
|
+
_do_parse_error_test(tester, no_e_l, "Missing required field 'l'");
|
261
|
+
}
|
262
|
+
|
263
|
+
// Test invalid types in top-level object
|
264
|
+
{
|
265
|
+
bson_t *bad_ts = TMP_BSON("{'ts': 23, %s}", required_no_ts);
|
266
|
+
bson_t *bad_cm = TMP_BSON("{'cm': 'foo', %s, %s, %s}", TS_JSON, CF_JSON, DF_JSON);
|
267
|
+
bson_t *bad_cf = TMP_BSON("{'cf': 'foo', %s, %s, %s}", TS_JSON, CM_JSON, DF_JSON);
|
268
|
+
bson_t *bad_df = TMP_BSON("{'df': 'foo', %s, %s, %s}", TS_JSON, CF_JSON, CM_JSON);
|
269
|
+
bson_t *bad_ss = TMP_BSON("{'ss': 'foo', %s}", required_no_ts);
|
270
|
+
bson_t *bad_fs = TMP_BSON("{'fs': 'foo', %s}", required_no_ts);
|
271
|
+
bson_t *bad_ps = TMP_BSON("{'ps': 'foo', %s}", required_no_ts);
|
272
|
+
_do_parse_error_test(tester, bad_ts, "expected to be a document");
|
273
|
+
_do_parse_error_test(tester, bad_cm, "expected to be int64");
|
274
|
+
_do_parse_error_test(tester, bad_cf, "expected to be boolean");
|
275
|
+
_do_parse_error_test(tester, bad_df, "expected to be boolean");
|
276
|
+
_do_parse_error_test(tester, bad_ss, "must be an iterator to a document");
|
277
|
+
_do_parse_error_test(tester, bad_fs, "must be an iterator to a document");
|
278
|
+
_do_parse_error_test(tester, bad_ps, "must be an iterator to a document");
|
279
|
+
}
|
280
|
+
|
281
|
+
// Test invalid types in ts object
|
282
|
+
{
|
283
|
+
bson_t *bad_e = TMP_BSON("{'ts': {'e': 23}, %s}", required_no_ts);
|
284
|
+
bson_t *bad_s = TMP_BSON("{'ts': {'s': 23}, %s}", required_no_ts);
|
285
|
+
bson_t *bad_u = TMP_BSON("{'ts': {'u': 23}, %s}", required_no_ts);
|
286
|
+
bson_t *bad_p = TMP_BSON("{'ts': {'p': 23}, %s}", required_no_ts);
|
287
|
+
_do_parse_error_test(tester, bad_e, "expected to be a document");
|
288
|
+
_do_parse_error_test(tester, bad_s, "expected to be a document");
|
289
|
+
_do_parse_error_test(tester, bad_u, "expected to be a document");
|
290
|
+
_do_parse_error_test(tester, bad_p, "expected to be a document");
|
291
|
+
}
|
292
|
+
|
293
|
+
// Test invalid types in token set
|
294
|
+
{
|
295
|
+
bson_t *bad_d = TMP_BSON("{'ts': {'e': {'d': 23, %s, %s}}, %s}", S_JSON, L_JSON, required_no_ts);
|
296
|
+
bson_t *bad_s = TMP_BSON("{'ts': {'e': {'s': 23, %s, %s}}, %s}", D_JSON, L_JSON, required_no_ts);
|
297
|
+
bson_t *bad_l = TMP_BSON("{'ts': {'e': {'l': 23, %s, %s}}, %s}", S_JSON, D_JSON, required_no_ts);
|
298
|
+
bson_t *bad_subtype =
|
299
|
+
TMP_BSON("{'ts': {'e': {'d': " BADTOKEN_JSON ", %s, %s}}, %s}", S_JSON, L_JSON, required_no_ts);
|
300
|
+
_do_parse_error_test(tester, bad_d, "expected to be bindata, got: INT32");
|
301
|
+
_do_parse_error_test(tester, bad_s, "expected to be bindata, got: INT32");
|
302
|
+
_do_parse_error_test(tester, bad_l, "expected to be bindata, got: INT32");
|
303
|
+
_do_parse_error_test(tester, bad_subtype, "expected to be bindata subtype 0");
|
304
|
+
}
|
305
|
+
|
306
|
+
// Test unrecognized fields
|
307
|
+
{
|
308
|
+
bson_t *level1 = TMP_BSON("{'kk': 2, %s}", all_required);
|
309
|
+
bson_t *level2 = TMP_BSON("{'ts': {'oo': 2}, %s}", required_no_ts);
|
310
|
+
bson_t *level3 = TMP_BSON("{'ts': {'e': {%s, %s, %s, 'pp': 1}}, %s}", D_JSON, S_JSON, L_JSON, required_no_ts);
|
311
|
+
_do_parse_error_test(tester, level1, "Unrecognized field 'kk'");
|
312
|
+
_do_parse_error_test(tester, level2, "Unrecognized field 'oo'");
|
313
|
+
_do_parse_error_test(tester, level3, "Unrecognized field 'pp'");
|
314
|
+
}
|
315
|
+
}
|
316
|
+
|
317
|
+
void _mongocrypt_tester_install_fle2_payload_find_text(_mongocrypt_tester_t *tester) {
|
318
|
+
INSTALL_TEST(_test_FLE2FindTextPayload_roundtrip);
|
319
|
+
INSTALL_TEST(_test_FLE2FindTextPayload_parse_errors);
|
320
|
+
}
|
@@ -182,26 +182,11 @@ static void _test_mc_FLE2InsertUpdatePayloadV2_includes_crypto_params(_mongocryp
|
|
182
182
|
// Test crypto params from SERVER-91889 are included in "range" payload.
|
183
183
|
{
|
184
184
|
bson_t got = BSON_INITIALIZER;
|
185
|
-
|
186
|
-
ASSERT(mc_FLE2InsertUpdatePayloadV2_serializeForRange(&payload, &got, use_range_v2));
|
185
|
+
ASSERT(mc_FLE2InsertUpdatePayloadV2_serializeForRange(&payload, &got));
|
187
186
|
_assert_match_bson(&got, TMP_BSON(BSON_STR({"sp" : 1, "pn" : 2, "tf" : 3, "mn" : 4, "mx" : 5})));
|
188
187
|
bson_destroy(&got);
|
189
188
|
}
|
190
189
|
|
191
|
-
// Test crypto params from SERVER-91889 are excluded in "rangePreview" payload.
|
192
|
-
{
|
193
|
-
bson_t got = BSON_INITIALIZER;
|
194
|
-
const bool use_range_v2 = false;
|
195
|
-
ASSERT(mc_FLE2InsertUpdatePayloadV2_serializeForRange(&payload, &got, use_range_v2));
|
196
|
-
_assert_match_bson(&got, TMP_BSON(BSON_STR({
|
197
|
-
"sp" : {"$exists" : false},
|
198
|
-
"pn" : {"$exists" : false},
|
199
|
-
"tf" : {"$exists" : false},
|
200
|
-
"mn" : {"$exists" : false},
|
201
|
-
"mx" : {"$exists" : false}
|
202
|
-
})));
|
203
|
-
bson_destroy(&got);
|
204
|
-
}
|
205
190
|
mc_FLE2InsertUpdatePayloadV2_cleanup(&payload);
|
206
191
|
}
|
207
192
|
|
@@ -243,7 +228,7 @@ static void _test_mc_FLE2InsertUpdatePayloadV2_parses_crypto_params(_mongocrypt_
|
|
243
228
|
}
|
244
229
|
|
245
230
|
static void _test_mc_FLE2InsertUpdatePayloadV2_parse_errors(_mongocrypt_tester_t *tester) {
|
246
|
-
bson_t *input_bson =
|
231
|
+
bson_t *input_bson = TMP_BSON_STR(BSON_STR({
|
247
232
|
"d" : {"$binary" : {"base64" : "AAAA", "subType" : "00"}}, //
|
248
233
|
"t" : "wrong type!"
|
249
234
|
}));
|
@@ -162,7 +162,7 @@ static void test_FLE2InsertUpdatePayload_decrypt(_mongocrypt_tester_t *tester) {
|
|
162
162
|
#undef TEST_IUP_HEX
|
163
163
|
|
164
164
|
static void test_FLE2InsertUpdatePayload_parse_errors(_mongocrypt_tester_t *tester) {
|
165
|
-
bson_t *input_bson =
|
165
|
+
bson_t *input_bson = TMP_BSON_STR(BSON_STR({
|
166
166
|
"d" : {"$binary" : {"base64" : "AAAA", "subType" : "00"}}, //
|
167
167
|
"t" : "wrong type!"
|
168
168
|
}));
|
@@ -93,7 +93,7 @@ static void test_mc_FLE2RangeFindDriverSpec_parse(_mongocrypt_tester_t *tester)
|
|
93
93
|
mongocrypt_status_t *status = mongocrypt_status_new();
|
94
94
|
mc_FLE2RangeFindDriverSpec_t rfds;
|
95
95
|
TEST_PRINTF("running subtest: %s\n", test->desc);
|
96
|
-
bool ret = mc_FLE2RangeFindDriverSpec_parse(&rfds,
|
96
|
+
bool ret = mc_FLE2RangeFindDriverSpec_parse(&rfds, TMP_BSON_STR(test->in), status);
|
97
97
|
if (!test->expectError) {
|
98
98
|
ASSERT_OK_STATUS(ret, status);
|
99
99
|
ASSERT_STREQUAL(test->expect.field, rfds.field);
|
@@ -323,19 +323,22 @@ static void test_mc_FLE2RangeFindDriverSpec_to_placeholders(_mongocrypt_tester_t
|
|
323
323
|
};
|
324
324
|
|
325
325
|
bson_t *range_opts_bson =
|
326
|
-
TMP_BSON("{'min': %
|
326
|
+
TMP_BSON("{'min': %" PRId32 ", 'max': %" PRId32 ", 'sparsity': {'$numberLong': '%" PRId64 "'}}",
|
327
|
+
indexMin,
|
328
|
+
indexMax,
|
329
|
+
sparsity);
|
327
330
|
|
328
|
-
ASSERT_OK_STATUS(mc_RangeOpts_parse(&range_opts, range_opts_bson,
|
331
|
+
ASSERT_OK_STATUS(mc_RangeOpts_parse(&range_opts, range_opts_bson, status), status);
|
329
332
|
|
330
333
|
for (size_t i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) {
|
331
334
|
testcase_t *test = tests + i;
|
332
335
|
TEST_PRINTF("running subtest: %s : %s\n", test->desc, test->in);
|
333
|
-
ASSERT_OK_STATUS(mc_FLE2RangeFindDriverSpec_parse(&spec,
|
336
|
+
ASSERT_OK_STATUS(mc_FLE2RangeFindDriverSpec_parse(&spec, TMP_BSON_STR(test->in), status), status);
|
334
337
|
|
335
338
|
// Create the expected document.
|
336
339
|
bson_t *expected;
|
337
340
|
{
|
338
|
-
expected =
|
341
|
+
expected = TMP_BSON_STR(test->expected);
|
339
342
|
|
340
343
|
_mongocrypt_buffer_t p1 = {0}, p2 = {0};
|
341
344
|
|
@@ -116,8 +116,7 @@ static void _test_getEdgesInt32(_mongocrypt_tester_t *tester) {
|
|
116
116
|
.max = test->max,
|
117
117
|
.sparsity = test->sparsity,
|
118
118
|
.trimFactor = OPT_I32(test->trimFactor)};
|
119
|
-
|
120
|
-
mc_edges_t *got = mc_getEdgesInt32(args, status, use_range_v2);
|
119
|
+
mc_edges_t *got = mc_getEdgesInt32(args, status);
|
121
120
|
if (test->expectError != NULL) {
|
122
121
|
ASSERT_OR_PRINT_MSG(NULL == got, "expected error, got success");
|
123
122
|
ASSERT_STATUS_CONTAINS(status, test->expectError);
|
@@ -209,8 +208,7 @@ static void _test_getEdgesInt64(_mongocrypt_tester_t *tester) {
|
|
209
208
|
.max = test->max,
|
210
209
|
.sparsity = test->sparsity,
|
211
210
|
.trimFactor = OPT_I32(test->trimFactor)};
|
212
|
-
|
213
|
-
mc_edges_t *got = mc_getEdgesInt64(args, status, use_range_v2);
|
211
|
+
mc_edges_t *got = mc_getEdgesInt64(args, status);
|
214
212
|
if (test->expectError != NULL) {
|
215
213
|
ASSERT_OR_PRINT_MSG(NULL == got, "expected error, got success");
|
216
214
|
ASSERT_STATUS_CONTAINS(status, test->expectError);
|
@@ -270,8 +268,7 @@ static void _test_getEdgesDouble(_mongocrypt_tester_t *tester) {
|
|
270
268
|
mc_getEdgesDouble_args_t args = {.value = test->value,
|
271
269
|
.sparsity = test->sparsity,
|
272
270
|
.trimFactor = OPT_I32(trimFactor)};
|
273
|
-
|
274
|
-
mc_edges_t *got = mc_getEdgesDouble(args, status, use_range_v2);
|
271
|
+
mc_edges_t *got = mc_getEdgesDouble(args, status);
|
275
272
|
|
276
273
|
if (test->expectError != NULL) {
|
277
274
|
if (NULL != got) {
|
@@ -308,7 +305,7 @@ static void _test_getEdgesDouble(_mongocrypt_tester_t *tester) {
|
|
308
305
|
}
|
309
306
|
}
|
310
307
|
|
311
|
-
#if MONGOCRYPT_HAVE_DECIMAL128_SUPPORT
|
308
|
+
#if MONGOCRYPT_HAVE_DECIMAL128_SUPPORT()
|
312
309
|
#define MAX_DEC128_EDGES 129
|
313
310
|
|
314
311
|
typedef struct {
|
@@ -338,8 +335,7 @@ static void _test_getEdgesDecimal128(_mongocrypt_tester_t *tester) {
|
|
338
335
|
// .max = test->max,
|
339
336
|
.sparsity = (size_t)test->sparsity,
|
340
337
|
.trimFactor = OPT_I32(trimFactor)};
|
341
|
-
|
342
|
-
mc_edges_t *got = mc_getEdgesDecimal128(args, status, use_range_v2);
|
338
|
+
mc_edges_t *got = mc_getEdgesDecimal128(args, status);
|
343
339
|
|
344
340
|
if (test->expectError != NULL) {
|
345
341
|
if (NULL != got) {
|
@@ -492,7 +488,7 @@ void _mongocrypt_tester_install_range_edge_generation(_mongocrypt_tester_t *test
|
|
492
488
|
INSTALL_TEST(_test_getEdgesInt32);
|
493
489
|
INSTALL_TEST(_test_getEdgesInt64);
|
494
490
|
INSTALL_TEST(_test_getEdgesDouble);
|
495
|
-
#if MONGOCRYPT_HAVE_DECIMAL128_SUPPORT
|
491
|
+
#if MONGOCRYPT_HAVE_DECIMAL128_SUPPORT()
|
496
492
|
INSTALL_TEST(_test_getEdgesDecimal128);
|
497
493
|
#endif
|
498
494
|
INSTALL_TEST(_test_count_leading_zeros);
|