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
@@ -0,0 +1,477 @@
|
|
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
|
+
#include <stdlib.h>
|
19
|
+
|
20
|
+
#include "mc-fle2-find-text-payload-private.h"
|
21
|
+
#include "mc-parse-utils-private.h"
|
22
|
+
#include "mongocrypt-buffer-private.h"
|
23
|
+
#include "mongocrypt-util-private.h"
|
24
|
+
#include "mongocrypt.h"
|
25
|
+
|
26
|
+
#define IF_FIELD(Name) \
|
27
|
+
if (0 == strcmp(field, #Name)) { \
|
28
|
+
if (has_##Name) { \
|
29
|
+
CLIENT_ERR("Error parsing %s: Duplicate field '" #Name "'", class_name); \
|
30
|
+
goto fail; \
|
31
|
+
} \
|
32
|
+
has_##Name = true;
|
33
|
+
|
34
|
+
#define END_IF_FIELD \
|
35
|
+
continue; \
|
36
|
+
}
|
37
|
+
|
38
|
+
#define CHECK_HAS(Name) \
|
39
|
+
if (!has_##Name) { \
|
40
|
+
CLIENT_ERR("Error parsing %s: Missing required field '" #Name "'", class_name); \
|
41
|
+
goto fail; \
|
42
|
+
}
|
43
|
+
|
44
|
+
#define PARSE_BINARY(Name, Dest) \
|
45
|
+
IF_FIELD(Name) { \
|
46
|
+
if (!parse_bindata(BSON_SUBTYPE_BINARY, &iter, Dest, status)) { \
|
47
|
+
goto fail; \
|
48
|
+
} \
|
49
|
+
} \
|
50
|
+
END_IF_FIELD
|
51
|
+
|
52
|
+
typedef struct {
|
53
|
+
_mongocrypt_buffer_t *edcDerivedToken;
|
54
|
+
_mongocrypt_buffer_t *escDerivedToken;
|
55
|
+
_mongocrypt_buffer_t *serverDerivedToken;
|
56
|
+
} mc_TextFindTokenSetIndirection_t;
|
57
|
+
|
58
|
+
typedef struct {
|
59
|
+
const _mongocrypt_buffer_t *edcDerivedToken;
|
60
|
+
const _mongocrypt_buffer_t *escDerivedToken;
|
61
|
+
const _mongocrypt_buffer_t *serverDerivedToken;
|
62
|
+
} mc_TextFindTokenSetIndirectionConst_t;
|
63
|
+
|
64
|
+
/* Cleanup code common to all mc_Text<T>FindTokenSet_t types.
|
65
|
+
*/
|
66
|
+
static void mc_TextFindTokenSetIndirection_cleanup(mc_TextFindTokenSetIndirection_t ts) {
|
67
|
+
_mongocrypt_buffer_cleanup(ts.edcDerivedToken);
|
68
|
+
_mongocrypt_buffer_cleanup(ts.escDerivedToken);
|
69
|
+
_mongocrypt_buffer_cleanup(ts.serverDerivedToken);
|
70
|
+
}
|
71
|
+
|
72
|
+
/* Serialization code common to all mc_Text<T>FindTokenSet_t types.
|
73
|
+
*/
|
74
|
+
static bool mc_TextFindTokenSetIndirection_serialize(mc_TextFindTokenSetIndirectionConst_t ts,
|
75
|
+
bson_t *parent,
|
76
|
+
const char *field_name) {
|
77
|
+
BSON_ASSERT_PARAM(ts.edcDerivedToken);
|
78
|
+
BSON_ASSERT_PARAM(ts.escDerivedToken);
|
79
|
+
BSON_ASSERT_PARAM(ts.serverDerivedToken);
|
80
|
+
BSON_ASSERT_PARAM(parent);
|
81
|
+
BSON_ASSERT_PARAM(field_name);
|
82
|
+
bson_t child;
|
83
|
+
if (!BSON_APPEND_DOCUMENT_BEGIN(parent, field_name, &child)) {
|
84
|
+
return false;
|
85
|
+
}
|
86
|
+
if (!_mongocrypt_buffer_append(ts.edcDerivedToken, &child, "d", -1)) {
|
87
|
+
return false;
|
88
|
+
}
|
89
|
+
if (!_mongocrypt_buffer_append(ts.escDerivedToken, &child, "s", -1)) {
|
90
|
+
return false;
|
91
|
+
}
|
92
|
+
if (!_mongocrypt_buffer_append(ts.serverDerivedToken, &child, "l", -1)) {
|
93
|
+
return false;
|
94
|
+
}
|
95
|
+
if (!bson_append_document_end(parent, &child)) {
|
96
|
+
return false;
|
97
|
+
}
|
98
|
+
return true;
|
99
|
+
}
|
100
|
+
|
101
|
+
/* Parsing code common to all mc_Text<T>FindTokenSet_t types.
|
102
|
+
*/
|
103
|
+
static bool mc_TextFindTokenSetIndirection_parse(mc_TextFindTokenSetIndirection_t out,
|
104
|
+
const char *class_name,
|
105
|
+
const bson_iter_t *in,
|
106
|
+
mongocrypt_status_t *status) {
|
107
|
+
BSON_ASSERT_PARAM(out.edcDerivedToken);
|
108
|
+
BSON_ASSERT_PARAM(out.escDerivedToken);
|
109
|
+
BSON_ASSERT_PARAM(out.serverDerivedToken);
|
110
|
+
BSON_ASSERT_PARAM(in);
|
111
|
+
bson_iter_t iter;
|
112
|
+
bool has_d = false, has_s = false, has_l = false;
|
113
|
+
|
114
|
+
iter = *in;
|
115
|
+
if (!BSON_ITER_HOLDS_DOCUMENT(&iter)) {
|
116
|
+
CLIENT_ERR("Error parsing %s: field expected to be a document, but got %s",
|
117
|
+
class_name,
|
118
|
+
mc_bson_type_to_string(bson_iter_type(&iter)));
|
119
|
+
return false;
|
120
|
+
}
|
121
|
+
bson_iter_recurse(&iter, &iter);
|
122
|
+
while (bson_iter_next(&iter)) {
|
123
|
+
const char *field = bson_iter_key(&iter);
|
124
|
+
BSON_ASSERT(field);
|
125
|
+
|
126
|
+
PARSE_BINARY(d, out.edcDerivedToken);
|
127
|
+
PARSE_BINARY(s, out.escDerivedToken);
|
128
|
+
PARSE_BINARY(l, out.serverDerivedToken);
|
129
|
+
|
130
|
+
CLIENT_ERR("Error parsing %s: Unrecognized field '%s'", class_name, field);
|
131
|
+
goto fail;
|
132
|
+
}
|
133
|
+
|
134
|
+
CHECK_HAS(d);
|
135
|
+
CHECK_HAS(s);
|
136
|
+
CHECK_HAS(l);
|
137
|
+
|
138
|
+
return true;
|
139
|
+
fail:
|
140
|
+
return false;
|
141
|
+
}
|
142
|
+
|
143
|
+
#define INDIRECT(type, ts) \
|
144
|
+
(type) { \
|
145
|
+
.edcDerivedToken = &(ts).edcDerivedToken, .escDerivedToken = &(ts).escDerivedToken, \
|
146
|
+
.serverDerivedToken = &(ts).serverDerivedFromDataToken \
|
147
|
+
}
|
148
|
+
#define INDIRECT_TOKENSET(ts) INDIRECT(mc_TextFindTokenSetIndirection_t, ts)
|
149
|
+
#define INDIRECT_TOKENSET_CONST(ts) INDIRECT(mc_TextFindTokenSetIndirectionConst_t, ts)
|
150
|
+
|
151
|
+
#define DEF_TEXT_SEARCH_FIND_TOKEN_SET_CLEANUP(Type) \
|
152
|
+
static void mc_Text##Type##FindTokenSet_cleanup(mc_Text##Type##FindTokenSet_t *fts) { \
|
153
|
+
if (fts) { \
|
154
|
+
mc_TextFindTokenSetIndirection_cleanup(INDIRECT_TOKENSET(*fts)); \
|
155
|
+
} \
|
156
|
+
}
|
157
|
+
DEF_TEXT_SEARCH_FIND_TOKEN_SET_CLEANUP(Exact);
|
158
|
+
DEF_TEXT_SEARCH_FIND_TOKEN_SET_CLEANUP(Substring);
|
159
|
+
DEF_TEXT_SEARCH_FIND_TOKEN_SET_CLEANUP(Suffix);
|
160
|
+
DEF_TEXT_SEARCH_FIND_TOKEN_SET_CLEANUP(Prefix);
|
161
|
+
|
162
|
+
#define DEF_TEXT_SEARCH_FIND_TOKEN_SET_SERIALIZE(Type) \
|
163
|
+
static bool mc_Text##Type##FindTokenSet_serialize(bson_t *parent, \
|
164
|
+
const char *field_name, \
|
165
|
+
const mc_Text##Type##FindTokenSet_t *ts) { \
|
166
|
+
BSON_ASSERT_PARAM(ts); \
|
167
|
+
return mc_TextFindTokenSetIndirection_serialize(INDIRECT_TOKENSET_CONST(*ts), parent, field_name); \
|
168
|
+
}
|
169
|
+
DEF_TEXT_SEARCH_FIND_TOKEN_SET_SERIALIZE(Exact)
|
170
|
+
DEF_TEXT_SEARCH_FIND_TOKEN_SET_SERIALIZE(Substring)
|
171
|
+
DEF_TEXT_SEARCH_FIND_TOKEN_SET_SERIALIZE(Suffix)
|
172
|
+
DEF_TEXT_SEARCH_FIND_TOKEN_SET_SERIALIZE(Prefix)
|
173
|
+
|
174
|
+
#define DEF_TEXT_SEARCH_FIND_TOKEN_SET_PARSE(Type) \
|
175
|
+
static bool mc_Text##Type##FindTokenSet_parse(mc_Text##Type##FindTokenSet_t *out, \
|
176
|
+
bson_iter_t *in, \
|
177
|
+
mongocrypt_status_t *status) { \
|
178
|
+
BSON_ASSERT_PARAM(out); \
|
179
|
+
return mc_TextFindTokenSetIndirection_parse(INDIRECT_TOKENSET(*out), "Text" #Type "FindTokenSet", in, status); \
|
180
|
+
}
|
181
|
+
DEF_TEXT_SEARCH_FIND_TOKEN_SET_PARSE(Exact)
|
182
|
+
DEF_TEXT_SEARCH_FIND_TOKEN_SET_PARSE(Substring)
|
183
|
+
DEF_TEXT_SEARCH_FIND_TOKEN_SET_PARSE(Suffix)
|
184
|
+
DEF_TEXT_SEARCH_FIND_TOKEN_SET_PARSE(Prefix)
|
185
|
+
|
186
|
+
#undef DEF_TEXT_SEARCH_FIND_TOKEN_SET_CLEANUP
|
187
|
+
#undef DEF_TEXT_SEARCH_FIND_TOKEN_SET_SERIALIZE
|
188
|
+
#undef DEF_TEXT_SEARCH_FIND_TOKEN_SET_PARSE
|
189
|
+
#undef INDIRECT_TOKENSET_CONST
|
190
|
+
#undef INDIRECT_TOKENSET
|
191
|
+
#undef INDIRECT
|
192
|
+
|
193
|
+
void mc_FLE2FindTextPayload_init(mc_FLE2FindTextPayload_t *payload) {
|
194
|
+
BSON_ASSERT_PARAM(payload);
|
195
|
+
memset(payload, 0, sizeof(*payload));
|
196
|
+
}
|
197
|
+
|
198
|
+
void mc_FLE2FindTextPayload_cleanup(mc_FLE2FindTextPayload_t *payload) {
|
199
|
+
if (!payload) {
|
200
|
+
return;
|
201
|
+
}
|
202
|
+
mc_TextExactFindTokenSet_cleanup(&payload->tokenSets.exact.value);
|
203
|
+
mc_TextSubstringFindTokenSet_cleanup(&payload->tokenSets.substring.value);
|
204
|
+
mc_TextSuffixFindTokenSet_cleanup(&payload->tokenSets.suffix.value);
|
205
|
+
mc_TextPrefixFindTokenSet_cleanup(&payload->tokenSets.prefix.value);
|
206
|
+
}
|
207
|
+
|
208
|
+
static bool mc_TextSearchFindTokenSets_parse(mc_TextSearchFindTokenSets_t *out,
|
209
|
+
const bson_iter_t *in,
|
210
|
+
mongocrypt_status_t *status) {
|
211
|
+
BSON_ASSERT_PARAM(out);
|
212
|
+
BSON_ASSERT_PARAM(in);
|
213
|
+
|
214
|
+
bson_iter_t iter;
|
215
|
+
bool has_e = false, has_s = false, has_u = false, has_p = false;
|
216
|
+
uint8_t field_count = 0;
|
217
|
+
const char *class_name = "TextSearchFindTokenSets";
|
218
|
+
|
219
|
+
iter = *in;
|
220
|
+
if (!BSON_ITER_HOLDS_DOCUMENT(&iter)) {
|
221
|
+
CLIENT_ERR("Error parsing %s: field expected to be a document, but got %s",
|
222
|
+
class_name,
|
223
|
+
mc_bson_type_to_string(bson_iter_type(&iter)));
|
224
|
+
return false;
|
225
|
+
}
|
226
|
+
bson_iter_recurse(&iter, &iter);
|
227
|
+
while (bson_iter_next(&iter)) {
|
228
|
+
const char *field = bson_iter_key(&iter);
|
229
|
+
BSON_ASSERT(field);
|
230
|
+
|
231
|
+
IF_FIELD(e) {
|
232
|
+
if (!mc_TextExactFindTokenSet_parse(&out->exact.value, &iter, status)) {
|
233
|
+
goto fail;
|
234
|
+
}
|
235
|
+
out->exact.set = true;
|
236
|
+
field_count++;
|
237
|
+
}
|
238
|
+
END_IF_FIELD
|
239
|
+
|
240
|
+
IF_FIELD(s) {
|
241
|
+
if (!mc_TextSubstringFindTokenSet_parse(&out->substring.value, &iter, status)) {
|
242
|
+
goto fail;
|
243
|
+
}
|
244
|
+
out->substring.set = true;
|
245
|
+
field_count++;
|
246
|
+
}
|
247
|
+
END_IF_FIELD
|
248
|
+
|
249
|
+
IF_FIELD(u) {
|
250
|
+
if (!mc_TextSuffixFindTokenSet_parse(&out->suffix.value, &iter, status)) {
|
251
|
+
goto fail;
|
252
|
+
}
|
253
|
+
out->suffix.set = true;
|
254
|
+
field_count++;
|
255
|
+
}
|
256
|
+
END_IF_FIELD
|
257
|
+
|
258
|
+
IF_FIELD(p) {
|
259
|
+
if (!mc_TextPrefixFindTokenSet_parse(&out->prefix.value, &iter, status)) {
|
260
|
+
goto fail;
|
261
|
+
}
|
262
|
+
out->prefix.set = true;
|
263
|
+
field_count++;
|
264
|
+
}
|
265
|
+
END_IF_FIELD
|
266
|
+
|
267
|
+
CLIENT_ERR("Error parsing %s: Unrecognized field '%s'", class_name, field);
|
268
|
+
goto fail;
|
269
|
+
}
|
270
|
+
|
271
|
+
if (!field_count) {
|
272
|
+
CLIENT_ERR("Error parsing %s: exactly one optional field is required", class_name);
|
273
|
+
goto fail;
|
274
|
+
} else if (field_count > 1) {
|
275
|
+
CLIENT_ERR("Error parsing %s: cannot have multiple optional fields present", class_name);
|
276
|
+
goto fail;
|
277
|
+
}
|
278
|
+
|
279
|
+
return true;
|
280
|
+
fail:
|
281
|
+
return false;
|
282
|
+
}
|
283
|
+
|
284
|
+
bool mc_FLE2FindTextPayload_parse(mc_FLE2FindTextPayload_t *out, const bson_t *in, mongocrypt_status_t *status) {
|
285
|
+
bson_iter_t iter;
|
286
|
+
const char *class_name = "FLE2FindTextPayload";
|
287
|
+
|
288
|
+
bool has_ts = false, has_cm = false, has_cf = false, has_df = false; // required fields
|
289
|
+
bool has_ss = false, has_fs = false, has_ps = false; // optional fields
|
290
|
+
|
291
|
+
BSON_ASSERT_PARAM(out);
|
292
|
+
BSON_ASSERT_PARAM(in);
|
293
|
+
|
294
|
+
mc_FLE2FindTextPayload_init(out);
|
295
|
+
if (!bson_validate(in, BSON_VALIDATE_NONE, NULL) || !bson_iter_init(&iter, in)) {
|
296
|
+
CLIENT_ERR("invalid BSON");
|
297
|
+
return false;
|
298
|
+
}
|
299
|
+
|
300
|
+
while (bson_iter_next(&iter)) {
|
301
|
+
const char *field = bson_iter_key(&iter);
|
302
|
+
const char *typestr = mc_bson_type_to_string(bson_iter_type(&iter));
|
303
|
+
BSON_ASSERT(field);
|
304
|
+
|
305
|
+
IF_FIELD(ts) {
|
306
|
+
if (!mc_TextSearchFindTokenSets_parse(&out->tokenSets, &iter, status)) {
|
307
|
+
return false;
|
308
|
+
}
|
309
|
+
}
|
310
|
+
END_IF_FIELD
|
311
|
+
|
312
|
+
IF_FIELD(cm) {
|
313
|
+
if (!BSON_ITER_HOLDS_INT64(&iter)) {
|
314
|
+
CLIENT_ERR("Error parsing %s: Field 'cm' expected to be int64, but got %s", class_name, typestr);
|
315
|
+
goto fail;
|
316
|
+
}
|
317
|
+
out->maxContentionFactor = bson_iter_int64(&iter);
|
318
|
+
}
|
319
|
+
END_IF_FIELD
|
320
|
+
|
321
|
+
IF_FIELD(cf) {
|
322
|
+
if (!BSON_ITER_HOLDS_BOOL(&iter)) {
|
323
|
+
CLIENT_ERR("Error parsing %s: Field 'cf' expected to be boolean, but got %s", class_name, typestr);
|
324
|
+
goto fail;
|
325
|
+
}
|
326
|
+
out->caseFold = bson_iter_bool(&iter);
|
327
|
+
}
|
328
|
+
END_IF_FIELD
|
329
|
+
|
330
|
+
IF_FIELD(df) {
|
331
|
+
if (!BSON_ITER_HOLDS_BOOL(&iter)) {
|
332
|
+
CLIENT_ERR("Error parsing %s: Field 'df' expected to be boolean, but got %s", class_name, typestr);
|
333
|
+
goto fail;
|
334
|
+
}
|
335
|
+
out->diacriticFold = bson_iter_bool(&iter);
|
336
|
+
}
|
337
|
+
END_IF_FIELD
|
338
|
+
|
339
|
+
IF_FIELD(ss) {
|
340
|
+
if (!mc_FLE2SubstringInsertSpec_parse(&out->substringSpec.value, &iter, status)) {
|
341
|
+
goto fail;
|
342
|
+
}
|
343
|
+
out->substringSpec.set = true;
|
344
|
+
}
|
345
|
+
END_IF_FIELD
|
346
|
+
|
347
|
+
IF_FIELD(fs) {
|
348
|
+
if (!mc_FLE2SuffixInsertSpec_parse(&out->suffixSpec.value, &iter, status)) {
|
349
|
+
goto fail;
|
350
|
+
}
|
351
|
+
out->suffixSpec.set = true;
|
352
|
+
}
|
353
|
+
END_IF_FIELD
|
354
|
+
|
355
|
+
IF_FIELD(ps) {
|
356
|
+
if (!mc_FLE2PrefixInsertSpec_parse(&out->prefixSpec.value, &iter, status)) {
|
357
|
+
goto fail;
|
358
|
+
}
|
359
|
+
out->prefixSpec.set = true;
|
360
|
+
}
|
361
|
+
END_IF_FIELD
|
362
|
+
|
363
|
+
CLIENT_ERR("Error parsing %s: Unrecognized field '%s'", class_name, field);
|
364
|
+
goto fail;
|
365
|
+
}
|
366
|
+
|
367
|
+
CHECK_HAS(ts);
|
368
|
+
CHECK_HAS(cm);
|
369
|
+
CHECK_HAS(cf);
|
370
|
+
CHECK_HAS(df);
|
371
|
+
return true;
|
372
|
+
fail:
|
373
|
+
return false;
|
374
|
+
}
|
375
|
+
|
376
|
+
bool mc_FLE2FindTextPayload_serialize(const mc_FLE2FindTextPayload_t *payload, bson_t *out) {
|
377
|
+
BSON_ASSERT_PARAM(out);
|
378
|
+
BSON_ASSERT_PARAM(payload);
|
379
|
+
|
380
|
+
// Append token sets "ts"
|
381
|
+
{
|
382
|
+
bson_t child;
|
383
|
+
if (!BSON_APPEND_DOCUMENT_BEGIN(out, "ts", &child)) {
|
384
|
+
return false;
|
385
|
+
}
|
386
|
+
// Append "e" if present
|
387
|
+
if (payload->tokenSets.exact.set) {
|
388
|
+
mc_TextExactFindTokenSet_serialize(&child, "e", &payload->tokenSets.exact.value);
|
389
|
+
}
|
390
|
+
// Append "s" if present
|
391
|
+
if (payload->tokenSets.substring.set) {
|
392
|
+
mc_TextSubstringFindTokenSet_serialize(&child, "s", &payload->tokenSets.substring.value);
|
393
|
+
}
|
394
|
+
// Append "u" if present
|
395
|
+
if (payload->tokenSets.suffix.set) {
|
396
|
+
mc_TextSuffixFindTokenSet_serialize(&child, "u", &payload->tokenSets.suffix.value);
|
397
|
+
}
|
398
|
+
// Append "p" if present
|
399
|
+
if (payload->tokenSets.prefix.set) {
|
400
|
+
mc_TextPrefixFindTokenSet_serialize(&child, "p", &payload->tokenSets.prefix.value);
|
401
|
+
}
|
402
|
+
if (!bson_append_document_end(out, &child)) {
|
403
|
+
return false;
|
404
|
+
}
|
405
|
+
}
|
406
|
+
|
407
|
+
// Append "cm".
|
408
|
+
if (!BSON_APPEND_INT64(out, "cm", payload->maxContentionFactor)) {
|
409
|
+
return false;
|
410
|
+
}
|
411
|
+
|
412
|
+
// Append "cf".
|
413
|
+
if (!BSON_APPEND_BOOL(out, "cf", payload->caseFold)) {
|
414
|
+
return false;
|
415
|
+
}
|
416
|
+
|
417
|
+
// Append "df".
|
418
|
+
if (!BSON_APPEND_BOOL(out, "df", payload->diacriticFold)) {
|
419
|
+
return false;
|
420
|
+
}
|
421
|
+
|
422
|
+
// Append "ss" if present.
|
423
|
+
if (payload->substringSpec.set) {
|
424
|
+
bson_t child;
|
425
|
+
if (!BSON_APPEND_DOCUMENT_BEGIN(out, "ss", &child)) {
|
426
|
+
return false;
|
427
|
+
}
|
428
|
+
if (!BSON_APPEND_INT32(&child, "mlen", (int32_t)payload->substringSpec.value.mlen)) {
|
429
|
+
return false;
|
430
|
+
}
|
431
|
+
if (!BSON_APPEND_INT32(&child, "ub", (int32_t)payload->substringSpec.value.ub)) {
|
432
|
+
return false;
|
433
|
+
}
|
434
|
+
if (!BSON_APPEND_INT32(&child, "lb", (int32_t)payload->substringSpec.value.lb)) {
|
435
|
+
return false;
|
436
|
+
}
|
437
|
+
if (!bson_append_document_end(out, &child)) {
|
438
|
+
return false;
|
439
|
+
}
|
440
|
+
}
|
441
|
+
|
442
|
+
// Append "fs" if present.
|
443
|
+
if (payload->suffixSpec.set) {
|
444
|
+
bson_t child;
|
445
|
+
if (!BSON_APPEND_DOCUMENT_BEGIN(out, "fs", &child)) {
|
446
|
+
return false;
|
447
|
+
}
|
448
|
+
if (!BSON_APPEND_INT32(&child, "ub", (int32_t)payload->suffixSpec.value.ub)) {
|
449
|
+
return false;
|
450
|
+
}
|
451
|
+
if (!BSON_APPEND_INT32(&child, "lb", (int32_t)payload->suffixSpec.value.lb)) {
|
452
|
+
return false;
|
453
|
+
}
|
454
|
+
if (!bson_append_document_end(out, &child)) {
|
455
|
+
return false;
|
456
|
+
}
|
457
|
+
}
|
458
|
+
|
459
|
+
// Append "ps" if present.
|
460
|
+
if (payload->prefixSpec.set) {
|
461
|
+
bson_t child;
|
462
|
+
if (!BSON_APPEND_DOCUMENT_BEGIN(out, "ps", &child)) {
|
463
|
+
return false;
|
464
|
+
}
|
465
|
+
if (!BSON_APPEND_INT32(&child, "ub", (int32_t)payload->prefixSpec.value.ub)) {
|
466
|
+
return false;
|
467
|
+
}
|
468
|
+
if (!BSON_APPEND_INT32(&child, "lb", (int32_t)payload->prefixSpec.value.lb)) {
|
469
|
+
return false;
|
470
|
+
}
|
471
|
+
if (!bson_append_document_end(out, &child)) {
|
472
|
+
return false;
|
473
|
+
}
|
474
|
+
}
|
475
|
+
|
476
|
+
return true;
|
477
|
+
}
|
@@ -158,9 +158,7 @@ const _mongocrypt_buffer_t *mc_FLE2InsertUpdatePayloadV2_decrypt(_mongocrypt_cry
|
|
158
158
|
|
159
159
|
bool mc_FLE2InsertUpdatePayloadV2_serialize(const mc_FLE2InsertUpdatePayloadV2_t *payload, bson_t *out);
|
160
160
|
|
161
|
-
bool mc_FLE2InsertUpdatePayloadV2_serializeForRange(const mc_FLE2InsertUpdatePayloadV2_t *payload,
|
162
|
-
bson_t *out,
|
163
|
-
bool use_range_v2);
|
161
|
+
bool mc_FLE2InsertUpdatePayloadV2_serializeForRange(const mc_FLE2InsertUpdatePayloadV2_t *payload, bson_t *out);
|
164
162
|
|
165
163
|
bool mc_FLE2InsertUpdatePayloadV2_serializeForTextSearch(const mc_FLE2InsertUpdatePayloadV2_t *payload, bson_t *out);
|
166
164
|
|
@@ -17,6 +17,7 @@
|
|
17
17
|
#include <bson/bson.h>
|
18
18
|
|
19
19
|
#include "mc-fle2-insert-update-payload-private-v2.h"
|
20
|
+
#include "mc-parse-utils-private.h"
|
20
21
|
#include "mongocrypt-buffer-private.h"
|
21
22
|
#include "mongocrypt-util-private.h" // mc_bson_type_to_string
|
22
23
|
#include "mongocrypt.h"
|
@@ -133,21 +134,7 @@ void mc_FLE2InsertUpdatePayloadV2_cleanup(mc_FLE2InsertUpdatePayloadV2_t *payloa
|
|
133
134
|
|
134
135
|
#define PARSE_BINDATA(Name, Type, Dest) \
|
135
136
|
IF_FIELD(Name) { \
|
136
|
-
|
137
|
-
uint32_t len; \
|
138
|
-
const uint8_t *data; \
|
139
|
-
if (bson_iter_type(&iter) != BSON_TYPE_BINARY) { \
|
140
|
-
CLIENT_ERR("Field '" #Name "' expected to be bindata, got: %d", bson_iter_type(&iter)); \
|
141
|
-
goto fail; \
|
142
|
-
} \
|
143
|
-
bson_iter_binary(&iter, &subtype, &len, &data); \
|
144
|
-
if (subtype != Type) { \
|
145
|
-
CLIENT_ERR("Field '" #Name "' expected to be bindata subtype %d, got: %d", Type, subtype); \
|
146
|
-
goto fail; \
|
147
|
-
} \
|
148
|
-
if (!_mongocrypt_buffer_copy_from_binary_iter(&out->Dest, &iter)) { \
|
149
|
-
CLIENT_ERR("Unable to create mongocrypt buffer for BSON binary " \
|
150
|
-
"field in '" #Name "'"); \
|
137
|
+
if (!parse_bindata(Type, &iter, &out->Dest, status)) { \
|
151
138
|
goto fail; \
|
152
139
|
} \
|
153
140
|
} \
|
@@ -159,7 +146,8 @@ void mc_FLE2InsertUpdatePayloadV2_cleanup(mc_FLE2InsertUpdatePayloadV2_t *payloa
|
|
159
146
|
if (!has_##Name) { \
|
160
147
|
CLIENT_ERR("Missing field '" #Name "' in payload"); \
|
161
148
|
goto fail; \
|
162
|
-
}
|
149
|
+
} else \
|
150
|
+
((void)0)
|
163
151
|
|
164
152
|
bool mc_FLE2InsertUpdatePayloadV2_parse(mc_FLE2InsertUpdatePayloadV2_t *out,
|
165
153
|
const _mongocrypt_buffer_t *in,
|
@@ -306,7 +294,8 @@ fail:
|
|
306
294
|
#define IUPS_APPEND_BINDATA(dst, name, subtype, value) \
|
307
295
|
if (!_mongocrypt_buffer_append(&(value), dst, name, -1)) { \
|
308
296
|
return false; \
|
309
|
-
}
|
297
|
+
} else \
|
298
|
+
((void)0)
|
310
299
|
|
311
300
|
bool mc_FLE2InsertUpdatePayloadV2_serialize(const mc_FLE2InsertUpdatePayloadV2_t *payload, bson_t *out) {
|
312
301
|
BSON_ASSERT_PARAM(out);
|
@@ -329,9 +318,7 @@ bool mc_FLE2InsertUpdatePayloadV2_serialize(const mc_FLE2InsertUpdatePayloadV2_t
|
|
329
318
|
return true;
|
330
319
|
}
|
331
320
|
|
332
|
-
bool mc_FLE2InsertUpdatePayloadV2_serializeForRange(const mc_FLE2InsertUpdatePayloadV2_t *payload,
|
333
|
-
bson_t *out,
|
334
|
-
bool use_range_v2) {
|
321
|
+
bool mc_FLE2InsertUpdatePayloadV2_serializeForRange(const mc_FLE2InsertUpdatePayloadV2_t *payload, bson_t *out) {
|
335
322
|
BSON_ASSERT_PARAM(out);
|
336
323
|
BSON_ASSERT_PARAM(payload);
|
337
324
|
|
@@ -375,34 +362,32 @@ bool mc_FLE2InsertUpdatePayloadV2_serializeForRange(const mc_FLE2InsertUpdatePay
|
|
375
362
|
return false;
|
376
363
|
}
|
377
364
|
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
}
|
384
|
-
|
385
|
-
// Precision may be unset.
|
386
|
-
if (payload->precision.set) {
|
387
|
-
if (!BSON_APPEND_INT32(out, "pn", payload->precision.value)) {
|
388
|
-
return false;
|
389
|
-
}
|
390
|
-
}
|
365
|
+
// Encode parameters that were used to generate the payload.
|
366
|
+
BSON_ASSERT(payload->sparsity.set);
|
367
|
+
if (!BSON_APPEND_INT64(out, "sp", payload->sparsity.value)) {
|
368
|
+
return false;
|
369
|
+
}
|
391
370
|
|
392
|
-
|
393
|
-
|
371
|
+
// Precision may be unset.
|
372
|
+
if (payload->precision.set) {
|
373
|
+
if (!BSON_APPEND_INT32(out, "pn", payload->precision.value)) {
|
394
374
|
return false;
|
395
375
|
}
|
376
|
+
}
|
396
377
|
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
378
|
+
BSON_ASSERT(payload->trimFactor.set);
|
379
|
+
if (!BSON_APPEND_INT32(out, "tf", payload->trimFactor.value)) {
|
380
|
+
return false;
|
381
|
+
}
|
401
382
|
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
383
|
+
BSON_ASSERT(payload->indexMin.value_type != BSON_TYPE_EOD);
|
384
|
+
if (!BSON_APPEND_VALUE(out, "mn", &payload->indexMin)) {
|
385
|
+
return false;
|
386
|
+
}
|
387
|
+
|
388
|
+
BSON_ASSERT(payload->indexMax.value_type != BSON_TYPE_EOD);
|
389
|
+
if (!BSON_APPEND_VALUE(out, "mx", &payload->indexMax)) {
|
390
|
+
return false;
|
406
391
|
}
|
407
392
|
|
408
393
|
return true;
|
@@ -17,6 +17,7 @@
|
|
17
17
|
#include <bson/bson.h>
|
18
18
|
|
19
19
|
#include "mc-fle2-insert-update-payload-private.h"
|
20
|
+
#include "mc-parse-utils-private.h"
|
20
21
|
#include "mongocrypt-buffer-private.h"
|
21
22
|
#include "mongocrypt.h"
|
22
23
|
|
@@ -69,21 +70,7 @@ void mc_FLE2InsertUpdatePayload_cleanup(mc_FLE2InsertUpdatePayload_t *payload) {
|
|
69
70
|
|
70
71
|
#define PARSE_BINDATA(Name, Type, Dest) \
|
71
72
|
IF_FIELD(Name) { \
|
72
|
-
|
73
|
-
uint32_t len; \
|
74
|
-
const uint8_t *data; \
|
75
|
-
if (bson_iter_type(&iter) != BSON_TYPE_BINARY) { \
|
76
|
-
CLIENT_ERR("Field '" #Name "' expected to be bindata, got: %d", bson_iter_type(&iter)); \
|
77
|
-
goto fail; \
|
78
|
-
} \
|
79
|
-
bson_iter_binary(&iter, &subtype, &len, &data); \
|
80
|
-
if (subtype != Type) { \
|
81
|
-
CLIENT_ERR("Field '" #Name "' expected to be bindata subtype %d, got: %d", Type, subtype); \
|
82
|
-
goto fail; \
|
83
|
-
} \
|
84
|
-
if (!_mongocrypt_buffer_copy_from_binary_iter(&out->Dest, &iter)) { \
|
85
|
-
CLIENT_ERR("Unable to create mongocrypt buffer for BSON binary " \
|
86
|
-
"field in '" #Name "'"); \
|
73
|
+
if (!parse_bindata(Type, &iter, &out->Dest, status)) { \
|
87
74
|
goto fail; \
|
88
75
|
} \
|
89
76
|
} \
|
@@ -95,7 +82,8 @@ void mc_FLE2InsertUpdatePayload_cleanup(mc_FLE2InsertUpdatePayload_t *payload) {
|
|
95
82
|
if (!has_##Name) { \
|
96
83
|
CLIENT_ERR("Missing field '" #Name "' in payload"); \
|
97
84
|
goto fail; \
|
98
|
-
}
|
85
|
+
} else \
|
86
|
+
((void)0)
|
99
87
|
|
100
88
|
bool mc_FLE2InsertUpdatePayload_parse(mc_FLE2InsertUpdatePayload_t *out,
|
101
89
|
const _mongocrypt_buffer_t *in,
|
@@ -173,7 +161,8 @@ fail:
|
|
173
161
|
#define IUPS_APPEND_BINDATA(dst, name, subtype, value) \
|
174
162
|
if (!_mongocrypt_buffer_append(&(value), dst, name, -1)) { \
|
175
163
|
return false; \
|
176
|
-
}
|
164
|
+
} else \
|
165
|
+
((void)0)
|
177
166
|
|
178
167
|
bool mc_FLE2InsertUpdatePayload_serialize(const mc_FLE2InsertUpdatePayload_t *payload, bson_t *out) {
|
179
168
|
BSON_ASSERT_PARAM(out);
|