diff --git a/.changelog/aws-sigv4-aws-lc-rs.md b/.changelog/aws-sigv4-aws-lc-rs.md new file mode 100644 index 00000000000..ab6b61e1431 --- /dev/null +++ b/.changelog/aws-sigv4-aws-lc-rs.md @@ -0,0 +1,9 @@ +--- +applies_to: ["client", "aws-sdk-rust"] +authors: ["jplock"] +references: ["smithy-rs#4681"] +breaking: false +new_feature: true +bug_fix: false +--- +Add optional `aws-lc-rs` and `fips` cargo features to `aws-sigv4`. When `aws-lc-rs` is enabled, the SigV4 HMAC-SHA256 / SHA-256 primitives — and, when combined with `sigv4a`, the SigV4a ECDSA-P256 signing path — are routed through `aws-lc-rs` instead of RustCrypto's `hmac` / `sha2` / `p256`. The `fips` feature additionally activates `aws-lc-rs/fips`, routing those primitives through `aws-lc-fips-sys`. The default build is unchanged. diff --git a/.changelog/fix-candisable-blanket-from-impl.md b/.changelog/fix-candisable-blanket-from-impl.md new file mode 100644 index 00000000000..f298e62cc88 --- /dev/null +++ b/.changelog/fix-candisable-blanket-from-impl.md @@ -0,0 +1,16 @@ +--- +applies_to: +- client +- server +- aws-sdk-rust +authors: +- vcjana +references: [] +breaking: false +new_feature: false +bug_fix: true +--- + +Make `CanDisable`'s `From` impl in `aws-smithy-types` concrete (`From`) instead of a blanket `impl From`. The blanket impl could clash with `From` impls from other crates and break the build with `error[E0119]` on a routine dependency bump (it surfaced via `time 0.3.48`). + +Additionally, constrain the `time` dependency to `<0.3.48` in `aws-smithy-types`. `time 0.3.48` introduced an E0119 coherence regression () that breaks any crate with a blanket `From` impl when `time` is in its dependency graph. Constraining `time` forces resolution to the last-good `0.3.47` across all build paths. Relax this bound once `time 0.3.49` ships. diff --git a/.changelog/msrv-1-94-1.md b/.changelog/msrv-1-94-1.md new file mode 100644 index 00000000000..88de4b28e7b --- /dev/null +++ b/.changelog/msrv-1-94-1.md @@ -0,0 +1,9 @@ +--- +applies_to: ["client", "server", "aws-sdk-rust"] +authors: ["ysaito1001"] +references: ["smithy-rs#4692"] +breaking: true +new_feature: false +bug_fix: false +--- +Upgrade MSRV to Rust 1.94.1. diff --git a/.github/workflows/ci-tls.yml b/.github/workflows/ci-tls.yml index 02427ec5caf..2fcb99aa008 100644 --- a/.github/workflows/ci-tls.yml +++ b/.github/workflows/ci-tls.yml @@ -56,6 +56,8 @@ jobs: uses: actions/checkout@v4 with: repository: chromium/badssl.com + # TODO(smithy-rs#4687): Remove this pin once we upgrade OpenSSL to support @SECLEVEL=0 + ref: 6e53ae0859e678724d54eb4f64f839174c9b82e3 path: ./badssl.com - name: Install Rust uses: dtolnay/rust-toolchain@master diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 047e1f556e2..bc4a7ad5142 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,7 +33,7 @@ on: required: false env: - rust_version: 1.91.1 + rust_version: 1.94.1 rust_toolchain_components: clippy,rustfmt ENCRYPTED_DOCKER_PASSWORD: ${{ secrets.ENCRYPTED_DOCKER_PASSWORD }} DOCKER_LOGIN_TOKEN_PASSPHRASE: ${{ secrets.DOCKER_LOGIN_TOKEN_PASSPHRASE }} @@ -412,8 +412,8 @@ jobs: run: | export RUST_STABLE_VERSION="$(rustc --version | cut -d' ' -f2)" # Install the pinned toolchain from rust-toolchain.toml and add musl target - rustup toolchain install 1.91.1 - rustup target add aarch64-unknown-linux-musl wasm32-wasip2 --toolchain 1.91.1 + rustup toolchain install 1.94.1 + rustup target add aarch64-unknown-linux-musl wasm32-wasip2 --toolchain 1.94.1 ./smithy-rs/tools/ci-scripts/run-canary \ ${{ secrets.CANARY_STACK_CDK_OUTPUTS_BUCKET_NAME }} \ ${{ steps.creds.outputs.aws-access-key-id }} \ diff --git a/.github/workflows/claim-crate-names.yml b/.github/workflows/claim-crate-names.yml index b860a3b02ee..fb539186d38 100644 --- a/.github/workflows/claim-crate-names.yml +++ b/.github/workflows/claim-crate-names.yml @@ -10,7 +10,7 @@ concurrency: cancel-in-progress: true env: - rust_version: 1.91.1 + rust_version: 1.94.1 name: Claim unpublished crate names on crates.io run-name: ${{ github.workflow }} diff --git a/.github/workflows/github-pages.yml b/.github/workflows/github-pages.yml index 1dcfe5920ae..6d380a07485 100644 --- a/.github/workflows/github-pages.yml +++ b/.github/workflows/github-pages.yml @@ -8,7 +8,7 @@ on: name: Update GitHub Pages env: - rust_version: 1.91.1 + rust_version: 1.94.1 # Allow only one doc pages build to run at a time for the entire smithy-rs repo concurrency: diff --git a/.github/workflows/manual-canary.yml b/.github/workflows/manual-canary.yml index 227a3c5eb78..eae48a27a99 100644 --- a/.github/workflows/manual-canary.yml +++ b/.github/workflows/manual-canary.yml @@ -159,8 +159,8 @@ jobs: run: | export RUST_STABLE_VERSION="$(rustc --version | cut -d' ' -f2)" # Install the pinned toolchain from rust-toolchain.toml and add musl target - rustup toolchain install 1.91.1 - rustup target add aarch64-unknown-linux-musl wasm32-wasip2 --toolchain 1.91.1 + rustup toolchain install 1.94.1 + rustup target add aarch64-unknown-linux-musl wasm32-wasip2 --toolchain 1.94.1 ./smithy-rs/tools/ci-scripts/run-canary \ ${{ secrets.CANARY_STACK_CDK_OUTPUTS_BUCKET_NAME }} \ ${{ steps.creds.outputs.aws-access-key-id }} \ diff --git a/.github/workflows/pull-request-bot.yml b/.github/workflows/pull-request-bot.yml index 85f3d1ac1bc..5b904e65d17 100644 --- a/.github/workflows/pull-request-bot.yml +++ b/.github/workflows/pull-request-bot.yml @@ -35,7 +35,7 @@ env: apt_dependencies: libssl-dev gnuplot jq java_version: 17 rust_toolchain_components: clippy,rustfmt - rust_nightly_version: nightly-2025-10-18 + rust_nightly_version: nightly-2026-03-20 ENCRYPTED_DOCKER_PASSWORD: ${{ secrets.ENCRYPTED_DOCKER_PASSWORD }} DOCKER_LOGIN_TOKEN_PASSPHRASE: ${{ secrets.DOCKER_LOGIN_TOKEN_PASSPHRASE }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5b950bdb094..5b7bd6223bd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,7 +10,7 @@ concurrency: cancel-in-progress: true env: - rust_version: 1.91.1 + rust_version: 1.94.1 name: Release smithy-rs on: diff --git a/CHANGELOG.md b/CHANGELOG.md index 9397b2c5e73..51e8f9b526b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,14 @@ +June 11th, 2026 +=============== +**New this release:** +- :tada: (all, [smithy-rs#4473](https://github.com/smithy-lang/smithy-rs/issues/4473), @ethoman) Add CBOR encoding and decoding support for `BigInteger` using CBOR tags 2 (positive bignum) and 3 (negative bignum) as specified by RFC 8949 §3.4.3 and the Smithy RPC v2 CBOR protocol. Values that fit in CBOR major types 0 or 1 use preferred serialization (plain integers) instead of bignum tags. + +**Contributors** +Thank you for your contributions! ❤ +- @ethoman ([smithy-rs#4473](https://github.com/smithy-lang/smithy-rs/issues/4473)) + + June 1st, 2026 ============== **New this release:** diff --git a/aws/SDK_CHANGELOG.next.json b/aws/SDK_CHANGELOG.next.json index 5381127db43..7f0c76bf984 100644 --- a/aws/SDK_CHANGELOG.next.json +++ b/aws/SDK_CHANGELOG.next.json @@ -5,37 +5,6 @@ { "smithy-rs": [], "aws-sdk-rust": [ - { - "message": "Change sha1 calculation in aws-config from ring to sha1 crate.\n", - "meta": { - "bug": false, - "breaking": false, - "tada": false - }, - "author": "markuskobler", - "references": [ - "aws-sdk-rust#1317" - ], - "since-commit": "81d71b3312e7063e663909d5bb14443ad57c9e2a", - "age": 5 - }, - { - "message": "Fix bug where initial-request messages in event stream operations are not signed.\n", - "meta": { - "bug": true, - "breaking": false, - "tada": false - }, - "author": [ - "rcoh", - "ysaito1001" - ], - "references": [ - "smithy-rs#4429" - ], - "since-commit": "81d71b3312e7063e663909d5bb14443ad57c9e2a", - "age": 5 - }, { "message": "Fix null value handling in dense collections: SDK now correctly rejects null values in non-sparse collections instead of silently dropping them.\n", "meta": { @@ -46,7 +15,7 @@ "author": "vcjana", "references": [], "since-commit": "2d226ef3c59de83febdc6790e2bf2a44f43f1d1f", - "age": 4 + "age": 5 }, { "message": "Prevent memory leak in identity cache when overriding credentials via `config_override`. Each `config_override` that sets a credentials provider now uses an operation-scoped identity cache instead of the shared client-level cache, preventing unbounded partition growth. Additionally, the client-level identity cache now enforces a configurable `max_partitions` cap (default: 64) as a safety net.\n", @@ -60,7 +29,7 @@ "smithy-rs#4340" ], "since-commit": "00c6d6096f0d618545a7dece903770d8acb21114", - "age": 3 + "age": 4 }, { "message": "Fix `TokenBucket::is_full()` and `TokenBucket::is_empty()` to convert fractional tokens into whole permits before checking availability. Previously, accumulated fractional tokens from success rewards were not accounted for, causing these methods to return incorrect results.\n", @@ -75,7 +44,7 @@ "aws-sdk-rust#1423" ], "since-commit": "00c6d6096f0d618545a7dece903770d8acb21114", - "age": 3 + "age": 4 }, { "message": "Make `ProviderConfig::with_use_fips()` and `ProviderConfig::with_use_dual_stack()` public so that applications constructing a `ProviderConfig` directly can propagate FIPS and dual-stack settings to credential providers.\n", @@ -89,7 +58,7 @@ "smithy-rs#4551" ], "since-commit": "00c6d6096f0d618545a7dece903770d8acb21114", - "age": 3 + "age": 4 }, { "message": "Upgrade `sha2` from 0.10.x to 0.11.x. The previous version defaulted to software-based compression instead of hardware-accelerated compression, resulting in lower throughput. The new version automatically detects and uses hardware-accelerated instructions when available.\n", @@ -103,7 +72,7 @@ "smithy-rs#4587" ], "since-commit": "00c6d6096f0d618545a7dece903770d8acb21114", - "age": 3 + "age": 4 }, { "message": "Optimize `Encoder::str()` and `Encoder::blob()` by collapsing multiple `write_all` calls into a single buffer operation. This bypasses minicbor's generic writer to write the CBOR type+length header and payload directly into the underlying `Vec`, improving performance on serialization-heavy hot paths.\n", @@ -117,7 +86,7 @@ "smithy-rs#4591" ], "since-commit": "00c6d6096f0d618545a7dece903770d8acb21114", - "age": 3 + "age": 4 }, { "message": "Fix waiter codegen failure when JMESPath `&&` or `||` expressions have non-boolean operands (e.g., a list field used as a truthiness check). Non-boolean types are now coerced to booleans using JMESPath truthiness rules: arrays and strings check `!is_empty()`, all other non-null types are truthy.\n", @@ -131,7 +100,7 @@ "smithy-rs#4599" ], "since-commit": "00c6d6096f0d618545a7dece903770d8acb21114", - "age": 3 + "age": 4 }, { "message": "Add `sigv4a_signing_region_set` client configuration. Supports programmatic, environment variable (`AWS_SIGV4A_SIGNING_REGION_SET`), and shared config file (`sigv4a_signing_region_set`) configuration. User-provided values now take priority over endpoint-resolved values.\n", @@ -145,7 +114,7 @@ "smithy-rs#4521" ], "since-commit": "00c6d6096f0d618545a7dece903770d8acb21114", - "age": 3 + "age": 4 }, { "message": "Add missing `EventOrInitial`, `EventOrInitialMarshaller`, and `EventStreamSender::into_inner` to `aws-smithy-legacy-http` event_stream module, fixing compilation failures in generated SDKs that reference these types.\n", @@ -159,7 +128,7 @@ "smithy-rs#4431" ], "since-commit": "00c6d6096f0d618545a7dece903770d8acb21114", - "age": 3 + "age": 4 }, { "message": "Upgrade `p256` from 0.11 to 0.13.2 in `aws-sigv4` so the SigV4a signing path uses the same major version already pulled in elsewhere in the SDK and benefits from upstream maintenance fixes.\n", @@ -173,7 +142,7 @@ "smithy-rs#4648" ], "since-commit": "c29cba1fa16dbda9697f523e86ca9bb5ec2f6d67", - "age": 2 + "age": 3 }, { "message": "Implement retry behavior 2.1, opt-in via `AWS_NEW_RETRIES_2026=true` environment variable. Non-throttling errors now use 50ms base backoff (previously 1,000ms). Transient retry quota cost is 14 tokens (previously 5). DynamoDB and DynamoDB Streams use a 25ms base backoff and increase default max attempts to 4 (from 3). Long-polling operations (SQS `ReceiveMessage`, SFN `GetActivityTask`, SWF `PollForActivityTask`/`PollForDecisionTask`) backoff even when the retry token bucket is empty.\n", @@ -187,7 +156,7 @@ "smithy-rs#4638" ], "since-commit": "c29cba1fa16dbda9697f523e86ca9bb5ec2f6d67", - "age": 2 + "age": 3 }, { "message": "Remove the `ring` dependency from `aws-sigv4`. The `sigv4a` feature previously pulled in `ring` solely for HMAC-SHA256 in the SigV4a signing-key derivation; this is now done with the `hmac`/`sha2` (RustCrypto) crates that were already used by the SigV4 signer. `ring` is in maintenance hibernation, and the original reason for using it (a version conflict with the older `p256` crate at the time SigV4a was introduced) no longer applies. Users of the `sigv4a` feature will see `ring` removed from their dependency tree.\n", @@ -201,7 +170,7 @@ "smithy-rs#4650" ], "since-commit": "c29cba1fa16dbda9697f523e86ca9bb5ec2f6d67", - "age": 2 + "age": 3 }, { "message": "Fix `ProfileFileCredentialsProvider` so that profile-level `use_fips_endpoint` and `use_dualstack_endpoint` settings are propagated to the internal STS client used during assume-role credential chaining. Previously these settings were only applied when the provider was built through `aws_config::ConfigLoader::load`, so users constructing `ProfileFileCredentialsProvider` directly via its builder would see STS requests go to non-FIPS / non-dual-stack endpoints even when the selected profile enabled them.\n", @@ -215,7 +184,7 @@ "smithy-rs#4614" ], "since-commit": "c29cba1fa16dbda9697f523e86ca9bb5ec2f6d67", - "age": 2 + "age": 3 }, { "message": "Fix adaptive retry rate limiter to never allow negative token bucket capacity. Previously, `acquire_permission_to_send_a_request` unconditionally deducted the request cost even when returning a delay, causing capacity to go negative. With multiple concurrent tasks, this produced cascading sleep times proportional to the number of tasks (e.g., task 50 sleeping 100s), leading to near-zero request rates that never recovered after a throttling event. Now, capacity is only deducted when a token is actually granted, and the orchestrator re-acquires after sleeping to account for concurrent state changes.\n", @@ -229,7 +198,7 @@ "smithy-rs#4632" ], "since-commit": "c29cba1fa16dbda9697f523e86ca9bb5ec2f6d67", - "age": 2 + "age": 3 }, { "message": "Optimized BDD endpoint resolution performance by replacing HashMap-based auth schemes with a typed `EndpointAuthScheme` struct, inlining the BDD evaluation loop, and adding a single-entry endpoint cache. The BDD resolver is now up to 49% faster than the original implementation and outperforms the tree-based resolver on most benchmarks.\n", @@ -241,7 +210,7 @@ "author": "lnj", "references": [], "since-commit": "c29cba1fa16dbda9697f523e86ca9bb5ec2f6d67", - "age": 2 + "age": 3 }, { "message": "Improve the `Debug` output of HTTP `Headers` and `Request` in `aws-smithy-runtime-api` to redact values of headers commonly used to carry sensitive data. The header name remains visible and the value is replaced with a placeholder that includes the original byte length to preserve diagnostic utility. The `aws-sigv4` signer applies the same redaction when logging the canonical request. The plain `Display` impl on `CanonicalRequest` is unchanged to preserve the raw canonical form used by downstream consumers.\n", @@ -253,7 +222,7 @@ "author": "aajtodd", "references": [], "since-commit": "8f0882046c467981ba5b4fd91a10befa96bd262f", - "age": 1 + "age": 2 }, { "message": "Fix paginator codegen for operations whose `@paginated` `outputToken` targets a `@required` member. Previously, the generated `src/lens.rs` borrowing accessor emitted a direct field access (`input.field`) instead of a reference (`&input.field`) for required members, causing a type mismatch (`Option<&String>` vs `String`).\n", @@ -265,7 +234,7 @@ "author": "vcjana", "references": [], "since-commit": "8f0882046c467981ba5b4fd91a10befa96bd262f", - "age": 1 + "age": 2 }, { "message": "Fix `ConnectorBuilder::default()` to enable `TCP_NODELAY` by default. Previously, the auto-derived `Default` impl left `enable_tcp_nodelay` at `false`, while the curated `Connector::builder()` initialized it to `true`. The `Default` impl on `ConnectorBuilder` is now hand-written to match `Connector::builder()`, so all construction paths, including the SDK's `default_https_client`, get `enable_tcp_nodelay = true` consistently. Without `TCP_NODELAY`, Nagle's algorithm can hold small writes in the kernel waiting for ACKs; on request shapes emitted as multiple small sub-MSS writes, such as the tested HTTP/2 small-body SDK path where HEADERS and DATA are flushed separately, this can add roughly one RTT plus delayed-ACK time. Callers who relied on the previous unintended `enable_tcp_nodelay = false` default of `ConnectorBuilder::default()` can restore that behavior with `.enable_tcp_nodelay(false)`.\n", @@ -277,7 +246,7 @@ "author": "PeterUlb", "references": [], "since-commit": "8f0882046c467981ba5b4fd91a10befa96bd262f", - "age": 1 + "age": 2 }, { "message": "Implement `serde::Serializer` and `serde::Deserializer` traits for `aws_smithy_types::Document`, allowing it to be used as a self-describing data format. This enables converting any `Serialize` type into a `Document` via `to_document()` and deserializing a `Document` into any `Deserialize` type via `from_document()`.\n", @@ -289,7 +258,7 @@ "author": "dnorred", "references": [], "since-commit": "8f0882046c467981ba5b4fd91a10befa96bd262f", - "age": 1 + "age": 2 }, { "message": "Redact the `AWS_CONTAINER_AUTHORIZATION_TOKEN` value from WARN log output and error `Display` output when the ECS/EKS container credential provider rejects the token as invalid for use as an HTTP header. Previously, if the token contained a byte rejected by `HeaderValue` validation, it was logged at WARN level and embedded in the error string propagated through the credential chain. The value is now redacted.\n", @@ -301,7 +270,7 @@ "author": "aajtodd", "references": [], "since-commit": "8f0882046c467981ba5b4fd91a10befa96bd262f", - "age": 1 + "age": 2 } ], "aws-sdk-model": [] diff --git a/aws/rust-runtime/Cargo.lock b/aws/rust-runtime/Cargo.lock index d604d65dcee..488eadabab3 100644 --- a/aws/rust-runtime/Cargo.lock +++ b/aws/rust-runtime/Cargo.lock @@ -70,13 +70,13 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "aws-credential-types" -version = "1.2.14" +version = "1.3.0" dependencies = [ "async-trait", "aws-smithy-async", @@ -106,7 +106,7 @@ dependencies = [ "hex", "hmac 0.13.0", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -121,9 +121,46 @@ dependencies = [ "url", ] +[[package]] +name = "aws-lc-fips-sys" +version = "0.13.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3d619165468401dec3caa3366ebffbcb83f2f31883e5b3932f8e2dec2ddc568" +dependencies = [ + "bindgen", + "cc", + "cmake", + "dunce", + "fs_extra", + "regex", +] + +[[package]] +name = "aws-lc-rs" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ec2f1fc3ec205783a5da9a7e6c1509cc69dedf09a1949e412c1e18469326d00" +dependencies = [ + "aws-lc-fips-sys", + "aws-lc-sys", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a2f9779ce85b93ab6170dd940ad0169b5766ff848247aff13bb788b832fe3f4" +dependencies = [ + "cc", + "cmake", + "dunce", + "fs_extra", +] + [[package]] name = "aws-runtime" -version = "1.7.4" +version = "1.8.0" dependencies = [ "arbitrary", "aws-credential-types", @@ -142,7 +179,7 @@ dependencies = [ "fastrand", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -161,13 +198,14 @@ dependencies = [ [[package]] name = "aws-runtime-api" -version = "1.1.12" +version = "1.2.0" [[package]] name = "aws-sigv4" -version = "1.4.5" +version = "1.5.0" dependencies = [ "aws-credential-types", + "aws-lc-rs", "aws-smithy-eventstream", "aws-smithy-http", "aws-smithy-runtime-api", @@ -180,7 +218,7 @@ dependencies = [ "hex-literal", "hmac 0.13.0", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "httparse", "p256", "percent-encoding", @@ -198,7 +236,7 @@ dependencies = [ [[package]] name = "aws-smithy-async" -version = "1.2.14" +version = "1.3.0" dependencies = [ "futures-util", "pin-project-lite", @@ -207,14 +245,14 @@ dependencies = [ [[package]] name = "aws-smithy-checksums" -version = "0.64.8" +version = "0.65.0" dependencies = [ "aws-smithy-http", "aws-smithy-types", "bytes", "crc-fast", "hex", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "md-5", @@ -226,7 +264,7 @@ dependencies = [ [[package]] name = "aws-smithy-eventstream" -version = "0.60.20" +version = "0.61.1" dependencies = [ "aws-smithy-types", "bytes", @@ -235,7 +273,7 @@ dependencies = [ [[package]] name = "aws-smithy-http" -version = "0.63.6" +version = "0.64.0" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", @@ -243,7 +281,7 @@ dependencies = [ "bytes-utils", "futures-core", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "percent-encoding", @@ -254,7 +292,7 @@ dependencies = [ [[package]] name = "aws-smithy-http-client" -version = "1.1.12" +version = "1.2.0" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", @@ -274,14 +312,14 @@ dependencies = [ [[package]] name = "aws-smithy-observability" -version = "0.2.6" +version = "0.3.0" dependencies = [ "aws-smithy-runtime-api", ] [[package]] name = "aws-smithy-protocol-test" -version = "0.63.14" +version = "0.64.0" dependencies = [ "assert-json-diff", "aws-smithy-runtime-api", @@ -298,7 +336,7 @@ dependencies = [ [[package]] name = "aws-smithy-runtime" -version = "1.11.3" +version = "1.12.0" dependencies = [ "aws-smithy-async", "aws-smithy-http", @@ -310,7 +348,7 @@ dependencies = [ "bytes", "fastrand", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -322,14 +360,14 @@ dependencies = [ [[package]] name = "aws-smithy-runtime-api" -version = "1.12.3" +version = "1.13.0" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api-macros", "aws-smithy-types", "bytes", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "pin-project-lite", "tokio", "tracing", @@ -338,7 +376,7 @@ dependencies = [ [[package]] name = "aws-smithy-runtime-api-macros" -version = "1.0.0" +version = "1.1.0" dependencies = [ "proc-macro2", "quote", @@ -347,23 +385,23 @@ dependencies = [ [[package]] name = "aws-smithy-schema" -version = "0.1.0" +version = "0.1.1" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", - "http 1.4.0", + "http 1.4.2", ] [[package]] name = "aws-smithy-types" -version = "1.4.9" +version = "1.6.0" dependencies = [ "base64-simd", "bytes", "bytes-utils", "futures-core", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -380,7 +418,7 @@ dependencies = [ [[package]] name = "aws-types" -version = "1.3.16" +version = "1.4.0" dependencies = [ "aws-credential-types", "aws-smithy-async", @@ -419,6 +457,26 @@ version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" +[[package]] +name = "bindgen" +version = "0.72.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" +dependencies = [ + "bitflags", + "cexpr", + "clang-sys", + "itertools", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex 1.3.0", + "syn", +] + [[package]] name = "bit-set" version = "0.8.0" @@ -436,9 +494,9 @@ checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bitflags" -version = "2.11.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" [[package]] name = "block-buffer" @@ -469,9 +527,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "bytes" @@ -516,12 +574,23 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.62" +version = "1.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" dependencies = [ "find-msvc-tools", - "shlex", + "jobserver", + "libc", + "shlex 2.0.1", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", ] [[package]] @@ -532,9 +601,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "chrono" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "num-traits", ] @@ -566,6 +635,17 @@ dependencies = [ "half", ] +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + [[package]] name = "clap" version = "4.6.1" @@ -591,11 +671,20 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +[[package]] +name = "cmake" +version = "0.1.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678" +dependencies = [ + "cc", +] + [[package]] name = "cmov" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f88a43d011fc4a6876cb7344703e297c71dda42494fee094d5f7c76bf13f746" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" [[package]] name = "const-oid" @@ -853,15 +942,21 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", "syn", ] +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + [[package]] name = "ecdsa" version = "0.16.9" @@ -878,9 +973,9 @@ dependencies = [ [[package]] name = "either" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" [[package]] name = "elliptic-curve" @@ -967,6 +1062,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + [[package]] name = "futures-channel" version = "0.3.32" @@ -1053,6 +1154,12 @@ dependencies = [ "wasip3", ] +[[package]] +name = "glob" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + [[package]] name = "group" version = "0.13.0" @@ -1094,7 +1201,7 @@ dependencies = [ "fnv", "futures-core", "futures-sink", - "http 1.4.0", + "http 1.4.2", "indexmap", "slab", "tokio", @@ -1194,9 +1301,9 @@ dependencies = [ [[package]] name = "http" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" dependencies = [ "bytes", "itoa", @@ -1220,7 +1327,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.4.0", + "http 1.4.2", ] [[package]] @@ -1231,7 +1338,7 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "pin-project-lite", ] @@ -1444,15 +1551,24 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" +[[package]] +name = "jobserver" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom 0.3.4", + "libc", +] + [[package]] name = "js-sys" -version = "0.3.98" +version = "0.3.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" +checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] @@ -1474,6 +1590,16 @@ version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +[[package]] +name = "libloading" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +dependencies = [ + "cfg-if", + "windows-link", +] + [[package]] name = "linux-raw-sys" version = "0.12.1" @@ -1497,9 +1623,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" [[package]] name = "lru" @@ -1531,9 +1657,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" [[package]] name = "minimal-lexical" @@ -1543,9 +1669,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "mio" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" dependencies = [ "libc", "wasi", @@ -1926,9 +2052,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.3" +version = "1.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" dependencies = [ "aho-corasick", "memchr", @@ -1955,9 +2081,9 @@ checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "rfc6979" @@ -1992,6 +2118,12 @@ dependencies = [ "xmlparser", ] +[[package]] +name = "rustc-hash" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" + [[package]] name = "rustc_version" version = "0.4.1" @@ -2028,9 +2160,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -2255,6 +2387,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + [[package]] name = "signal-hook-registry" version = "1.4.8" @@ -2299,9 +2437,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ "libc", "windows-sys 0.61.2", @@ -2476,7 +2614,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.3", + "socket2 0.6.4", "tokio-macros", "windows-sys 0.61.2", ] @@ -2611,9 +2749,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unarray" @@ -2629,9 +2767,9 @@ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-xid" @@ -2665,9 +2803,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.23.1" +version = "1.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7" dependencies = [ "js-sys", "wasm-bindgen", @@ -2745,9 +2883,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" +checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" dependencies = [ "cfg-if", "once_cell", @@ -2758,9 +2896,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" +checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2768,9 +2906,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" +checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" dependencies = [ "bumpalo", "proc-macro2", @@ -2781,9 +2919,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" +checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" dependencies = [ "unicode-ident", ] @@ -2824,9 +2962,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.98" +version = "0.3.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" +checksum = "6e0871acf327f283dc6da28a1696cdc64fb355ba9f935d052021fa77f35cce69" dependencies = [ "js-sys", "wasm-bindgen", @@ -3049,9 +3187,9 @@ checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] name = "yoke" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -3072,18 +3210,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.48" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.48" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" dependencies = [ "proc-macro2", "quote", diff --git a/aws/rust-runtime/aws-config/Cargo.lock b/aws/rust-runtime/aws-config/Cargo.lock index 6d868e6e462..3dbae82cd5c 100644 --- a/aws/rust-runtime/aws-config/Cargo.lock +++ b/aws/rust-runtime/aws-config/Cargo.lock @@ -35,9 +35,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "aws-config" @@ -63,7 +63,7 @@ dependencies = [ "fastrand", "futures-util", "hex", - "http 1.4.0", + "http 1.4.2", "p256", "rand", "serde", @@ -114,7 +114,7 @@ dependencies = [ [[package]] name = "aws-runtime" -version = "1.7.4" +version = "1.7.5" dependencies = [ "aws-credential-types", "aws-sigv4", @@ -127,7 +127,7 @@ dependencies = [ "bytes", "bytes-utils", "fastrand", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "percent-encoding", "pin-project-lite", @@ -153,7 +153,7 @@ dependencies = [ "bytes", "fastrand", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "regex-lite", "tracing", ] @@ -175,7 +175,7 @@ dependencies = [ "bytes", "fastrand", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "regex-lite", "tracing", ] @@ -197,7 +197,7 @@ dependencies = [ "bytes", "fastrand", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "regex-lite", "tracing", ] @@ -220,7 +220,7 @@ dependencies = [ "aws-types", "fastrand", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "regex-lite", "tracing", ] @@ -238,7 +238,7 @@ dependencies = [ "hex", "hmac 0.13.0", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "percent-encoding", "sha2 0.11.0", "time", @@ -264,7 +264,7 @@ dependencies = [ "bytes-utils", "futures-core", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "percent-encoding", @@ -275,7 +275,7 @@ dependencies = [ [[package]] name = "aws-smithy-http-client" -version = "1.1.12" +version = "1.1.13" dependencies = [ "aws-smithy-async", "aws-smithy-protocol-test", @@ -285,11 +285,11 @@ dependencies = [ "h2 0.3.27", "h2 0.4.14", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "hyper 0.14.32", - "hyper 1.9.0", + "hyper 1.10.1", "hyper-rustls", "hyper-util", "indexmap", @@ -360,7 +360,7 @@ dependencies = [ "bytes", "fastrand", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -380,7 +380,7 @@ dependencies = [ "aws-smithy-types", "bytes", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "pin-project-lite", "tokio", "tracing", @@ -402,18 +402,18 @@ version = "0.1.0" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", - "http 1.4.0", + "http 1.4.2", ] [[package]] name = "aws-smithy-types" -version = "1.4.9" +version = "1.5.0" dependencies = [ "base64-simd", "bytes", "bytes-utils", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -476,9 +476,9 @@ checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] name = "bitflags" -version = "2.11.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" [[package]] name = "block-buffer" @@ -509,9 +509,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "bytes" @@ -550,9 +550,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.62" +version = "1.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" dependencies = [ "find-msvc-tools", "jobserver", @@ -568,9 +568,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "chrono" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "num-traits", ] @@ -613,9 +613,9 @@ dependencies = [ [[package]] name = "cmov" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f88a43d011fc4a6876cb7344703e297c71dda42494fee094d5f7c76bf13f746" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" [[package]] name = "const-oid" @@ -767,9 +767,9 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", @@ -798,9 +798,9 @@ dependencies = [ [[package]] name = "either" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" [[package]] name = "elliptic-curve" @@ -1014,7 +1014,7 @@ dependencies = [ "fnv", "futures-core", "futures-sink", - "http 1.4.0", + "http 1.4.2", "indexmap", "slab", "tokio", @@ -1091,9 +1091,9 @@ dependencies = [ [[package]] name = "http" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" dependencies = [ "bytes", "itoa", @@ -1117,7 +1117,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.4.0", + "http 1.4.2", ] [[package]] @@ -1128,7 +1128,7 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "pin-project-lite", ] @@ -1180,16 +1180,16 @@ dependencies = [ [[package]] name = "hyper" -version = "1.9.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" +checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" dependencies = [ "atomic-waker", "bytes", "futures-channel", "futures-core", "h2 0.4.14", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "httparse", "itoa", @@ -1205,8 +1205,8 @@ version = "0.27.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" dependencies = [ - "http 1.4.0", - "hyper 1.9.0", + "http 1.4.2", + "hyper 1.10.1", "hyper-util", "rustls", "rustls-native-certs", @@ -1225,14 +1225,14 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", - "hyper 1.9.0", + "hyper 1.10.1", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.3", + "socket2 0.6.4", "tokio", "tower-service", "tracing", @@ -1383,13 +1383,12 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.98" +version = "0.3.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" +checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] @@ -1428,9 +1427,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" [[package]] name = "matchers" @@ -1443,9 +1442,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" [[package]] name = "minimal-lexical" @@ -1455,9 +1454,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "mio" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" dependencies = [ "libc", "wasi", @@ -1759,9 +1758,9 @@ checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "rfc6979" @@ -1821,9 +1820,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -2016,9 +2015,9 @@ dependencies = [ [[package]] name = "shlex" -version = "1.3.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "signal-hook-registry" @@ -2064,9 +2063,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ "libc", "windows-sys 0.61.2", @@ -2212,7 +2211,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.3", + "socket2 0.6.4", "tokio-macros", "windows-sys 0.61.2", ] @@ -2376,9 +2375,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unicode-ident" @@ -2424,9 +2423,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.23.1" +version = "1.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7" dependencies = [ "getrandom 0.4.2", "js-sys", @@ -2486,9 +2485,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" +checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" dependencies = [ "cfg-if", "once_cell", @@ -2499,9 +2498,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" +checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2509,9 +2508,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" +checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" dependencies = [ "bumpalo", "proc-macro2", @@ -2522,9 +2521,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" +checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" dependencies = [ "unicode-ident", ] @@ -2765,9 +2764,9 @@ checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] name = "yoke" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -2788,18 +2787,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.48" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.48" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" dependencies = [ "proc-macro2", "quote", diff --git a/aws/rust-runtime/aws-config/Cargo.toml b/aws/rust-runtime/aws-config/Cargo.toml index a90c4b2c43d..0d93f793ff5 100644 --- a/aws/rust-runtime/aws-config/Cargo.toml +++ b/aws/rust-runtime/aws-config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-config" -version = "1.8.18" +version = "1.9.0" authors = [ "AWS Rust SDK Team ", "Russell Cohen ", @@ -10,7 +10,7 @@ edition = "2021" exclude = ["test-data/*", "integration-tests/*"] license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] behavior-version-latest = [] diff --git a/aws/rust-runtime/aws-credential-types/Cargo.toml b/aws/rust-runtime/aws-credential-types/Cargo.toml index bfbbadef5a4..63bf5d797a4 100644 --- a/aws/rust-runtime/aws-credential-types/Cargo.toml +++ b/aws/rust-runtime/aws-credential-types/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-credential-types" -version = "1.2.14" +version = "1.3.0" authors = ["AWS Rust SDK Team "] description = "Types for AWS SDK credentials." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] hardcoded-credentials = [] diff --git a/aws/rust-runtime/aws-inlineable/Cargo.toml b/aws/rust-runtime/aws-inlineable/Cargo.toml index d0da011bc92..5984b97bd7c 100644 --- a/aws/rust-runtime/aws-inlineable/Cargo.toml +++ b/aws/rust-runtime/aws-inlineable/Cargo.toml @@ -10,7 +10,7 @@ edition = "2021" license = "Apache-2.0" publish = false repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] http-1x = ["aws-smithy-runtime-api/http-1x"] diff --git a/aws/rust-runtime/aws-runtime-api/Cargo.toml b/aws/rust-runtime/aws-runtime-api/Cargo.toml index 728a716a2f4..f80b31b5714 100644 --- a/aws/rust-runtime/aws-runtime-api/Cargo.toml +++ b/aws/rust-runtime/aws-runtime-api/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-runtime-api" -version = "1.1.12" +version = "1.2.0" authors = ["AWS Rust SDK Team "] description = "Runtime support code for the AWS SDK. This isn't intended to be used directly." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] diff --git a/aws/rust-runtime/aws-runtime/Cargo.toml b/aws/rust-runtime/aws-runtime/Cargo.toml index 37ebbb08c95..3ea250fa23c 100644 --- a/aws/rust-runtime/aws-runtime/Cargo.toml +++ b/aws/rust-runtime/aws-runtime/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-runtime" -version = "1.7.4" +version = "1.8.0" authors = ["AWS Rust SDK Team "] description = "Runtime support code for the AWS SDK. This crate isn't intended to be used directly." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] event-stream = ["dep:aws-smithy-eventstream", "aws-sigv4/sign-eventstream"] diff --git a/aws/rust-runtime/aws-runtime/src/auth/sigv4.rs b/aws/rust-runtime/aws-runtime/src/auth/sigv4.rs index c59d7c0c166..2bbe8eefb44 100644 --- a/aws/rust-runtime/aws-runtime/src/auth/sigv4.rs +++ b/aws/rust-runtime/aws-runtime/src/auth/sigv4.rs @@ -263,7 +263,8 @@ impl Sign for SigV4Signer { #[cfg(feature = "event-stream")] { use crate::auth::sigv4::SigV4MessageSigner; - use aws_smithy_eventstream::frame::DeferredSignerSender; + use aws_smithy_eventstream::frame::SignMessage; + use aws_smithy_types::event_stream::DeferredSignerSender; if let Some(signer_sender) = config_bag.load::() { let time_source = runtime_components.time_source().unwrap_or_default(); @@ -282,7 +283,7 @@ impl Sign for SigV4Signer { name, time_source, (), - )) as _) + )) as Box) .expect("failed to send deferred signer"); } } diff --git a/aws/rust-runtime/aws-sigv4/Cargo.toml b/aws/rust-runtime/aws-sigv4/Cargo.toml index 4f1cd2892ec..c254cc61789 100644 --- a/aws/rust-runtime/aws-sigv4/Cargo.toml +++ b/aws/rust-runtime/aws-sigv4/Cargo.toml @@ -1,13 +1,13 @@ [package] name = "aws-sigv4" -version = "1.4.5" +version = "1.5.0" authors = ["AWS Rust SDK Team ", "David Barsky "] description = "SigV4 signer for HTTP requests and Event Stream messages." edition = "2021" exclude = ["aws-sig-v4-test-suite/*"] license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] default = ["sign-http", "http1"] @@ -17,8 +17,19 @@ sign-http = ["dep:http0", "dep:percent-encoding", "dep:form_urlencoded"] sign-eventstream = ["dep:aws-smithy-eventstream"] sigv4a = ["dep:p256", "dep:crypto-bigint", "dep:subtle", "dep:zeroize"] +# Internal feature used to gate code that depends on aws-lc-rs being linked. +# Users should not enable this directly; choose `aws-lc-rs` or `fips` instead. +__aws-lc-rs = ["dep:aws-lc-rs"] +# Route SigV4 (and, with `sigv4a`, SigV4a) cryptographic primitives through +# `aws-lc-rs` (non-FIPS, backed by `aws-lc-sys`) instead of RustCrypto's +# `hmac` / `sha2` / `p256`. +aws-lc-rs = ["__aws-lc-rs", "aws-lc-rs?/aws-lc-sys"] +# Same as `aws-lc-rs`, but backed by the FIPS-validated `aws-lc-fips-sys`. +fips = ["__aws-lc-rs", "aws-lc-rs?/fips"] + [dependencies] aws-credential-types = { path = "../aws-credential-types" } +aws-lc-rs = { version = "1", default-features = false, optional = true } aws-smithy-eventstream = { path = "../../../rust-runtime/aws-smithy-eventstream", optional = true } aws-smithy-http = { path = "../../../rust-runtime/aws-smithy-http" } aws-smithy-runtime-api = { path = "../../../rust-runtime/aws-smithy-runtime-api", features = ["client"] } @@ -63,7 +74,8 @@ harness = false required-features = ["sigv4a"] [package.metadata.docs.rs] -all-features = true +all-features = false +features = ["aws-lc-rs", "sigv4a", "sign-http", "http1", "sign-eventstream", "http0-compat"] targets = ["x86_64-unknown-linux-gnu"] cargo-args = ["-Zunstable-options", "-Zrustdoc-scrape-examples"] rustdoc-args = ["--cfg", "docsrs"] diff --git a/aws/rust-runtime/aws-sigv4/benches/hmac.rs b/aws/rust-runtime/aws-sigv4/benches/hmac.rs index 2b7620c1ee3..8f310346e26 100644 --- a/aws/rust-runtime/aws-sigv4/benches/hmac.rs +++ b/aws/rust-runtime/aws-sigv4/benches/hmac.rs @@ -4,10 +4,14 @@ */ use criterion::{criterion_group, criterion_main, Criterion}; +#[cfg(not(feature = "__aws-lc-rs"))] use hmac::digest::FixedOutput; +#[cfg(not(feature = "__aws-lc-rs"))] use hmac::{Hmac, KeyInit, Mac}; +#[cfg(not(feature = "__aws-lc-rs"))] use sha2::Sha256; +#[cfg(not(feature = "__aws-lc-rs"))] pub fn hmac(c: &mut Criterion) { c.bench_function("hmac", |b| { b.iter(|| { @@ -19,6 +23,16 @@ pub fn hmac(c: &mut Criterion) { }); } +#[cfg(feature = "__aws-lc-rs")] +pub fn hmac(c: &mut Criterion) { + c.bench_function("hmac", |b| { + b.iter(|| { + let key = aws_lc_rs::hmac::Key::new(aws_lc_rs::hmac::HMAC_SHA256, b"secret"); + aws_lc_rs::hmac::sign(&key, b"hello, world") + }) + }); +} + criterion_group! { name = benches; diff --git a/aws/rust-runtime/aws-sigv4/src/date_time.rs b/aws/rust-runtime/aws-sigv4/src/date_time.rs index f27a265e0e8..955b84ab871 100644 --- a/aws/rust-runtime/aws-sigv4/src/date_time.rs +++ b/aws/rust-runtime/aws-sigv4/src/date_time.rs @@ -96,7 +96,7 @@ mod tests { use time::format_description::well_known::Rfc3339; // TODO(https://github.com/smithy-lang/smithy-rs/issues/1857) - #[cfg(not(any(target_arch = "powerpc", target_arch = "x86")))] + #[cfg(not(any(target_arch = "powerpc", target_arch = "x86", target_os = "windows")))] #[test] fn date_format() { let time: SystemTime = OffsetDateTime::parse("2039-02-04T23:01:09.104Z", &Rfc3339) @@ -110,7 +110,7 @@ mod tests { } // TODO(https://github.com/smithy-lang/smithy-rs/issues/1857) - #[cfg(not(any(target_arch = "powerpc", target_arch = "x86")))] + #[cfg(not(any(target_arch = "powerpc", target_arch = "x86", target_os = "windows")))] #[test] fn date_time_format() { let time: SystemTime = OffsetDateTime::parse("2039-02-04T23:01:09.104Z", &Rfc3339) diff --git a/aws/rust-runtime/aws-sigv4/src/http_request/test.rs b/aws/rust-runtime/aws-sigv4/src/http_request/test.rs index ee365508259..afecd8ebb20 100644 --- a/aws/rust-runtime/aws-sigv4/src/http_request/test.rs +++ b/aws/rust-runtime/aws-sigv4/src/http_request/test.rs @@ -310,7 +310,9 @@ pub(crate) mod v4a { sign, PayloadChecksumKind, SessionTokenMode, SignatureLocation, SigningSettings, }; use crate::sign::v4a; + #[cfg(not(feature = "__aws-lc-rs"))] use p256::ecdsa::signature::Verifier; + #[cfg(not(feature = "__aws-lc-rs"))] use p256::ecdsa::{DerSignature, SigningKey}; use std::time::Duration; use time::format_description::well_known::Rfc3339; @@ -369,12 +371,33 @@ pub(crate) mod v4a { let creds = params.credentials().unwrap(); let signing_key = v4a::generate_signing_key(creds.access_key_id(), creds.secret_access_key()); - let sig = DerSignature::try_from(hex::decode(out.signature).unwrap().as_slice()).unwrap(); - - let signing_key = SigningKey::from_slice(signing_key.as_ref()).unwrap(); - let peer_public_key = signing_key.verifying_key(); + let sig_bytes = hex::decode(out.signature).unwrap(); let sts = actual_string_to_sign.as_bytes(); - peer_public_key.verify(sts, &sig).unwrap(); + + #[cfg(not(feature = "__aws-lc-rs"))] + { + let sig = DerSignature::try_from(sig_bytes.as_slice()).unwrap(); + let signing_key = SigningKey::from_slice(signing_key.as_ref()).unwrap(); + let peer_public_key = signing_key.verifying_key(); + peer_public_key.verify(sts, &sig).unwrap(); + } + #[cfg(feature = "__aws-lc-rs")] + { + use aws_lc_rs::signature::KeyPair as _; + let scalar: &[u8; 32] = signing_key.as_ref().try_into().unwrap(); + let der = v4a::scalar_to_sec1_p256_der(scalar); + let key_pair = aws_lc_rs::signature::EcdsaKeyPair::from_private_key_der( + &aws_lc_rs::signature::ECDSA_P256_SHA256_ASN1_SIGNING, + &der, + ) + .unwrap(); + let pub_key = key_pair.public_key().as_ref(); + let upk = aws_lc_rs::signature::UnparsedPublicKey::new( + &aws_lc_rs::signature::ECDSA_P256_SHA256_ASN1, + pub_key, + ); + upk.verify(sts, &sig_bytes).unwrap(); + } // TODO(sigv4a) - use public.key.json as verifying key? } diff --git a/aws/rust-runtime/aws-sigv4/src/sign/v4.rs b/aws/rust-runtime/aws-sigv4/src/sign/v4.rs index 42f59801d68..bfc315f49f0 100644 --- a/aws/rust-runtime/aws-sigv4/src/sign/v4.rs +++ b/aws/rust-runtime/aws-sigv4/src/sign/v4.rs @@ -11,19 +11,30 @@ use crate::{ use aws_credential_types::Credentials; use aws_smithy_runtime_api::{client::identity::Identity, http::Headers}; use bytes::Bytes; +#[cfg(not(feature = "__aws-lc-rs"))] use hmac::{digest::FixedOutput, Hmac, KeyInit, Mac}; +#[cfg(not(feature = "__aws-lc-rs"))] use sha2::{Digest, Sha256}; use std::time::SystemTime; /// HashedPayload = Lowercase(HexEncode(Hash(requestPayload))) #[allow(dead_code)] // Unused when compiling without certain features +#[cfg(not(feature = "__aws-lc-rs"))] pub(crate) fn sha256_hex_string(bytes: impl AsRef<[u8]>) -> String { let mut hasher = Sha256::new(); hasher.update(bytes); hex::encode(hasher.finalize_fixed()) } +/// HashedPayload = Lowercase(HexEncode(Hash(requestPayload))) +#[allow(dead_code)] // Unused when compiling without certain features +#[cfg(feature = "__aws-lc-rs")] +pub(crate) fn sha256_hex_string(bytes: impl AsRef<[u8]>) -> String { + hex::encode(aws_lc_rs::digest::digest(&aws_lc_rs::digest::SHA256, bytes.as_ref()).as_ref()) +} + /// Calculates a Sigv4 signature +#[cfg(not(feature = "__aws-lc-rs"))] pub fn calculate_signature(signing_key: impl AsRef<[u8]>, string_to_sign: &[u8]) -> String { let mut mac = Hmac::::new_from_slice(signing_key.as_ref()) .expect("HMAC can take key of any size"); @@ -31,7 +42,15 @@ pub fn calculate_signature(signing_key: impl AsRef<[u8]>, string_to_sign: &[u8]) hex::encode(mac.finalize_fixed()) } +/// Calculates a Sigv4 signature +#[cfg(feature = "__aws-lc-rs")] +pub fn calculate_signature(signing_key: impl AsRef<[u8]>, string_to_sign: &[u8]) -> String { + let key = aws_lc_rs::hmac::Key::new(aws_lc_rs::hmac::HMAC_SHA256, signing_key.as_ref()); + hex::encode(aws_lc_rs::hmac::sign(&key, string_to_sign).as_ref()) +} + /// Generates a signing key for Sigv4 +#[cfg(not(feature = "__aws-lc-rs"))] pub fn generate_signing_key( secret: &str, time: SystemTime, @@ -66,6 +85,26 @@ pub fn generate_signing_key( mac.finalize_fixed() } +/// Generates a signing key for Sigv4 +#[cfg(feature = "__aws-lc-rs")] +pub fn generate_signing_key( + secret: &str, + time: SystemTime, + region: &str, + service: &str, +) -> impl AsRef<[u8]> { + use aws_lc_rs::hmac::{sign, Key, HMAC_SHA256}; + + let secret = format!("AWS4{secret}"); + let tag = sign( + &Key::new(HMAC_SHA256, secret.as_bytes()), + format_date(time).as_bytes(), + ); + let tag = sign(&Key::new(HMAC_SHA256, tag.as_ref()), region.as_bytes()); + let tag = sign(&Key::new(HMAC_SHA256, tag.as_ref()), service.as_bytes()); + sign(&Key::new(HMAC_SHA256, tag.as_ref()), b"aws4_request") +} + /// Parameters to use when signing. #[derive(Debug)] #[non_exhaustive] diff --git a/aws/rust-runtime/aws-sigv4/src/sign/v4a.rs b/aws/rust-runtime/aws-sigv4/src/sign/v4a.rs index 6067d33ca1d..d89a251176c 100644 --- a/aws/rust-runtime/aws-sigv4/src/sign/v4a.rs +++ b/aws/rust-runtime/aws-sigv4/src/sign/v4a.rs @@ -6,9 +6,13 @@ use aws_smithy_runtime_api::client::identity::Identity; use bytes::{BufMut, BytesMut}; use crypto_bigint::{CheckedAdd, CheckedSub, Encoding, U256}; +#[cfg(not(feature = "__aws-lc-rs"))] use hmac::{digest::FixedOutput, Hmac, KeyInit, Mac}; +#[cfg(not(feature = "__aws-lc-rs"))] use p256::ecdsa::signature::Signer; +#[cfg(not(feature = "__aws-lc-rs"))] use p256::ecdsa::{DerSignature, SigningKey}; +#[cfg(not(feature = "__aws-lc-rs"))] use sha2::Sha256; use std::io::Write; use std::sync::LazyLock; @@ -25,13 +29,64 @@ static BIG_N_MINUS_2: LazyLock = LazyLock::new(|| { ORDER.checked_sub(&U256::from(2u32)).unwrap() }); +/// Wraps a P-256 scalar in a minimal RFC 5915 SEC1 `ECPrivateKey` DER blob. +/// +/// AWS-LC parses this via [`aws_lc_rs::signature::EcdsaKeyPair::from_private_key_der`] and +/// derives the public point internally — the `publicKey [1] BIT STRING OPTIONAL` field is +/// allowed to be absent by RFC 5915, which lets the caller avoid pulling in a separate EC +/// implementation just to compute the public key. +/// +/// Output layout (51 bytes): +/// 30 31 SEQUENCE, length 49 +/// 02 01 01 INTEGER 1 (version = ecPrivkeyVer1) +/// 04 20 <32> OCTET STRING (privateKey scalar) +/// A0 0A [0] EXPLICIT (parameters) +/// 06 08 2A 86 48 CE 3D 03 01 07 OID 1.2.840.10045.3.1.7 (prime256v1) +#[cfg(feature = "__aws-lc-rs")] +pub(crate) fn scalar_to_sec1_p256_der(scalar: &[u8; 32]) -> [u8; 51] { + let mut out = [0u8; 51]; + out[0] = 0x30; + out[1] = 0x31; + out[2] = 0x02; + out[3] = 0x01; + out[4] = 0x01; + out[5] = 0x04; + out[6] = 0x20; + out[7..39].copy_from_slice(scalar); + out[39] = 0xA0; + out[40] = 0x0A; + out[41..51].copy_from_slice(&[0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07]); + out +} + /// Calculates a Sigv4a signature +#[cfg(not(feature = "__aws-lc-rs"))] pub fn calculate_signature(signing_key: impl AsRef<[u8]>, string_to_sign: &[u8]) -> String { let signing_key = SigningKey::from_slice(signing_key.as_ref()).unwrap(); let signature: DerSignature = signing_key.sign(string_to_sign); hex::encode(signature.as_bytes()) } +/// Calculates a Sigv4a signature +#[cfg(feature = "__aws-lc-rs")] +pub fn calculate_signature(signing_key: impl AsRef<[u8]>, string_to_sign: &[u8]) -> String { + let scalar: &[u8; 32] = signing_key + .as_ref() + .try_into() + .expect("sigv4a signing key is always a 32-byte P-256 scalar"); + let der = scalar_to_sec1_p256_der(scalar); + let key_pair = aws_lc_rs::signature::EcdsaKeyPair::from_private_key_der( + &aws_lc_rs::signature::ECDSA_P256_SHA256_ASN1_SIGNING, + &der, + ) + .expect("scalar-derived SEC1 DER is well-formed"); + let rng = aws_lc_rs::rand::SystemRandom::new(); + let signature = key_pair + .sign(&rng, string_to_sign) + .expect("ECDSA signing should not fail with a valid key"); + hex::encode(signature.as_ref()) +} + /// Generates a signing key for Sigv4a signing. pub fn generate_signing_key(access_key: &str, secret_access_key: &str) -> impl AsRef<[u8]> { // Capacity is the secret access key length plus the length of "AWS4A" @@ -41,7 +96,7 @@ pub fn generate_signing_key(access_key: &str, secret_access_key: &str) -> impl A // Capacity is the access key length plus the counter byte let mut kdf_context = Zeroizing::new(Vec::with_capacity(access_key.len() + 1)); let mut counter = Zeroizing::new(1u8); - let key = loop { + let d = loop { write!(kdf_context, "{access_key}").unwrap(); kdf_context.push(*counter); @@ -50,14 +105,11 @@ pub fn generate_signing_key(access_key: &str, secret_access_key: &str) -> impl A fis.append(&mut kdf_context); fis.put_i32(256); - let mut mac = - Hmac::::new_from_slice(&input_key).expect("HMAC can take key of any size"); - let mut buf = BytesMut::new(); buf.put_i32(1); buf.put_slice(&fis); - mac.update(&buf); - let k0 = U256::from_be_bytes(mac.finalize_fixed().into()); + + let k0 = hmac_sha256_for_kdf(&input_key, &buf); // It would be more secure for this to be a constant time comparison, but because this // is for client usage, that's not as big a deal. @@ -65,8 +117,7 @@ pub fn generate_signing_key(access_key: &str, secret_access_key: &str) -> impl A let pk = k0 .checked_add(&U256::ONE) .expect("k0 is always less than U256::MAX"); - let d = Zeroizing::new(pk.to_be_bytes()); - break SigningKey::from_slice(d.as_ref()).unwrap(); + break Zeroizing::new(pk.to_be_bytes()); } *counter = counter @@ -74,7 +125,25 @@ pub fn generate_signing_key(access_key: &str, secret_access_key: &str) -> impl A .expect("counter will never get to 255"); }; - key.to_bytes() + *d +} + +#[cfg(not(feature = "__aws-lc-rs"))] +fn hmac_sha256_for_kdf(key: &[u8], msg: &[u8]) -> U256 { + let mut mac = Hmac::::new_from_slice(key).expect("HMAC can take key of any size"); + mac.update(msg); + U256::from_be_bytes(mac.finalize_fixed().into()) +} + +#[cfg(feature = "__aws-lc-rs")] +fn hmac_sha256_for_kdf(key: &[u8], msg: &[u8]) -> U256 { + let key = aws_lc_rs::hmac::Key::new(aws_lc_rs::hmac::HMAC_SHA256, key); + let tag = aws_lc_rs::hmac::sign(&key, msg); + let bytes: [u8; 32] = tag + .as_ref() + .try_into() + .expect("HMAC-SHA256 tag is always 32 bytes"); + U256::from_be_bytes(bytes) } /// Parameters to use when signing. diff --git a/aws/rust-runtime/aws-types/Cargo.toml b/aws/rust-runtime/aws-types/Cargo.toml index 744fb7dacba..e8de478e402 100644 --- a/aws/rust-runtime/aws-types/Cargo.toml +++ b/aws/rust-runtime/aws-types/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-types" -version = "1.3.16" +version = "1.4.0" authors = ["AWS Rust SDK Team ", "Russell Cohen "] description = "Cross-service types for the AWS SDK." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] # This feature is to be used only for doc comments diff --git a/aws/sdk/Cargo.lock b/aws/sdk/Cargo.lock index c38c428851b..0447b0537ea 100644 --- a/aws/sdk/Cargo.lock +++ b/aws/sdk/Cargo.lock @@ -338,9 +338,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "aws-config" @@ -366,7 +366,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "hex", - "http 1.4.0", + "http 1.4.2", "p256", "rand 0.8.6", "serde", @@ -435,7 +435,7 @@ dependencies = [ [[package]] name = "aws-runtime" -version = "1.7.4" +version = "1.7.5" dependencies = [ "arbitrary", "aws-credential-types", @@ -454,7 +454,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -498,7 +498,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body-util", "proptest", "regex-lite", @@ -530,7 +530,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "serde_json", @@ -560,7 +560,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "serde_json", @@ -587,7 +587,7 @@ dependencies = [ "bytes", "fastrand 2.4.1", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "tokio", @@ -618,7 +618,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "serde_json", @@ -649,7 +649,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "serde_json", @@ -676,7 +676,7 @@ dependencies = [ "bytes", "fastrand 2.4.1", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "tokio", @@ -706,7 +706,7 @@ dependencies = [ "futures-util", "hex", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "pretty_assertions", "proptest", "regex-lite", @@ -740,7 +740,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "serde_json", @@ -770,7 +770,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "serde_json", @@ -801,7 +801,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "serde_json", @@ -833,7 +833,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "proptest", "regex-lite", @@ -862,7 +862,7 @@ dependencies = [ "aws-types", "fastrand 2.4.1", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "pretty_assertions", "proptest", "regex-lite", @@ -903,7 +903,7 @@ dependencies = [ "hex", "hmac 0.13.0", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "lru", @@ -946,7 +946,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "md-5", "proptest", "regex-lite", @@ -974,7 +974,7 @@ dependencies = [ "bytes", "fastrand 2.4.1", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "tokio", @@ -1002,7 +1002,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "serde_json", @@ -1028,7 +1028,7 @@ dependencies = [ "bytes", "fastrand 2.4.1", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "tokio", @@ -1052,7 +1052,7 @@ dependencies = [ "bytes", "fastrand 2.4.1", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "tokio", @@ -1080,7 +1080,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "serde_json", @@ -1110,7 +1110,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "serde_json", @@ -1137,7 +1137,7 @@ dependencies = [ "bytes", "fastrand 2.4.1", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "proptest", "regex-lite", "tokio", @@ -1170,7 +1170,7 @@ dependencies = [ "futures-util", "hound", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body-util", "proptest", "regex-lite", @@ -1197,7 +1197,7 @@ dependencies = [ "hex-literal", "hmac 0.13.0", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "httparse", "p256", "percent-encoding", @@ -1226,13 +1226,14 @@ dependencies = [ [[package]] name = "aws-smithy-cbor" -version = "0.61.9" +version = "0.61.10" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-schema", "aws-smithy-types", "criterion", "minicbor", + "num-bigint", ] [[package]] @@ -1245,7 +1246,7 @@ dependencies = [ "bytes-utils", "crc-fast", "hex", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "md-5", @@ -1268,7 +1269,7 @@ dependencies = [ "bytes-utils", "flate2", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "pin-project-lite", @@ -1289,7 +1290,7 @@ dependencies = [ [[package]] name = "aws-smithy-eventstream" -version = "0.60.20" +version = "0.60.21" dependencies = [ "arbitrary", "aws-smithy-types", @@ -1318,10 +1319,10 @@ dependencies = [ "bytes-utils", "futures-core", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", - "hyper 1.9.0", + "hyper 1.10.1", "percent-encoding", "pin-project-lite", "pin-utils", @@ -1343,12 +1344,12 @@ dependencies = [ "h2 0.3.27", "h2 0.4.14", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", "hyper 0.14.32", - "hyper 1.9.0", + "hyper 1.10.1", "hyper-rustls 0.24.2", "hyper-rustls 0.27.9", "hyper-util", @@ -1396,7 +1397,7 @@ dependencies = [ "futures-core", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "hyper 0.14.32", "percent-encoding", @@ -1416,7 +1417,7 @@ dependencies = [ "aws-smithy-runtime", "aws-smithy-runtime-api", "aws-smithy-types", - "http 1.4.0", + "http 1.4.2", "tokio", ] @@ -1453,7 +1454,7 @@ dependencies = [ "cbor-diag", "ciborium", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "pretty_assertions", "regex-lite", "roxmltree", @@ -1485,7 +1486,7 @@ dependencies = [ "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -1508,7 +1509,7 @@ dependencies = [ "aws-smithy-types", "bytes", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "pin-project-lite", "proptest", "tokio", @@ -1531,12 +1532,12 @@ version = "0.1.0" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", - "http 1.4.0", + "http 1.4.2", ] [[package]] name = "aws-smithy-types" -version = "1.4.9" +version = "1.5.0" dependencies = [ "base64 0.13.1", "base64-simd", @@ -1546,7 +1547,7 @@ dependencies = [ "criterion", "futures-core", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -1666,7 +1667,7 @@ version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "cexpr", "clang-sys", "itertools 0.13.0", @@ -1676,7 +1677,7 @@ dependencies = [ "quote", "regex", "rustc-hash", - "shlex", + "shlex 1.3.0", "syn", ] @@ -1703,9 +1704,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.11.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" [[package]] name = "block-buffer" @@ -1749,9 +1750,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "byteorder" @@ -1802,14 +1803,14 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.62" +version = "1.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" dependencies = [ "find-msvc-tools", "jobserver", "libc", - "shlex", + "shlex 2.0.1", ] [[package]] @@ -1829,9 +1830,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "chrono" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "num-traits", ] @@ -1910,9 +1911,9 @@ dependencies = [ [[package]] name = "cmov" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f88a43d011fc4a6876cb7344703e297c71dda42494fee094d5f7c76bf13f746" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" [[package]] name = "concurrent-queue" @@ -2217,9 +2218,9 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", @@ -2248,9 +2249,9 @@ dependencies = [ [[package]] name = "either" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" [[package]] name = "elliptic-curve" @@ -2630,7 +2631,7 @@ dependencies = [ "fnv", "futures-core", "futures-sink", - "http 1.4.0", + "http 1.4.2", "indexmap", "slab", "tokio", @@ -2802,9 +2803,9 @@ dependencies = [ [[package]] name = "http" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" dependencies = [ "bytes", "itoa", @@ -2828,7 +2829,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.4.0", + "http 1.4.2", ] [[package]] @@ -2839,7 +2840,7 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "pin-project-lite", ] @@ -2891,16 +2892,16 @@ dependencies = [ [[package]] name = "hyper" -version = "1.9.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" +checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" dependencies = [ "atomic-waker", "bytes", "futures-channel", "futures-core", "h2 0.4.14", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "httparse", "httpdate", @@ -2933,8 +2934,8 @@ version = "0.27.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" dependencies = [ - "http 1.4.0", - "hyper 1.9.0", + "http 1.4.2", + "hyper 1.10.1", "hyper-util", "rustls 0.23.40", "rustls-native-certs", @@ -2953,14 +2954,14 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", - "hyper 1.9.0", + "hyper 1.10.1", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.3", + "socket2 0.6.4", "system-configuration", "tokio", "tower-layer", @@ -3116,7 +3117,7 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d40460c0ce33d6ce4b0630ad68ff63d6661961c48b6dba35e5a4d81cfb48222" dependencies = [ - "socket2 0.6.3", + "socket2 0.6.4", "widestring", "windows-registry", "windows-result", @@ -3196,13 +3197,12 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.98" +version = "0.3.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" +checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] @@ -3245,9 +3245,9 @@ dependencies = [ [[package]] name = "libmimalloc-sys" -version = "0.1.47" +version = "0.1.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d1eacfa31c33ec25e873c136ba5669f00f9866d0688bea7be4d3f7e43067df6" +checksum = "6a45a52f43e1c16f667ccfe4dd8c85b7f7c204fd5e3bf46c5b0db9a5c3c0b8e9" dependencies = [ "cc", ] @@ -3287,9 +3287,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" dependencies = [ "value-bag", ] @@ -3324,15 +3324,15 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" [[package]] name = "mimalloc" -version = "0.1.50" +version = "0.1.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3627c4272df786b9260cabaa46aec1d59c93ede723d4c3ef646c503816b0640" +checksum = "2d4139bb28d14ad1facf21d5eb8825051b326e172d216b39f6d31df53cc97862" dependencies = [ "libmimalloc-sys", ] @@ -3364,9 +3364,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" dependencies = [ "libc", "wasi", @@ -3741,7 +3741,7 @@ checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.11.1", + "bitflags 2.13.0", "num-traits", "rand 0.9.4", "rand_chacha 0.9.0", @@ -3873,14 +3873,14 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", ] [[package]] name = "regex" -version = "1.12.3" +version = "1.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" dependencies = [ "aho-corasick", "memchr", @@ -3907,9 +3907,9 @@ checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "resolv-conf" @@ -3985,7 +3985,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -3998,7 +3998,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "errno", "libc", "linux-raw-sys 0.12.1", @@ -4035,9 +4035,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -4111,9 +4111,9 @@ checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "s2n-tls" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d22c36f207d0bb6a38272d5d1fa1cd99094335c70db1bfef54e0b8b672ae26f" +checksum = "f60ada8adc59c848686744ff0ca93f1d1edc565a69d96a58a26abd84a521a5a0" dependencies = [ "errno", "hex", @@ -4128,8 +4128,8 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f48b9922eed6521a7f9d5b444bcc36a5df988161b67579112cc5377ca021ed78" dependencies = [ - "http 1.4.0", - "hyper 1.9.0", + "http 1.4.2", + "hyper 1.10.1", "hyper-util", "s2n-tls", "s2n-tls-tokio", @@ -4138,9 +4138,9 @@ dependencies = [ [[package]] name = "s2n-tls-sys" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcf9e3b136cdd2c99f0cee2811d80b9f6bc44b5fd48c172857de32babb506f5e" +checksum = "e6960ccb00e47fe4b641f9c7b769515a4f89cb65459ca7afbed20fa39aac0b1b" dependencies = [ "aws-lc-rs", "cc", @@ -4149,9 +4149,9 @@ dependencies = [ [[package]] name = "s2n-tls-tokio" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0ab00b075ab482e89509de51e1972a8f38ff70e1dbd5279caa0fd8d25f86cb" +checksum = "fdeee0425e44094040f5c3a065a6e42974e9bc1a7587a292f520715b0f9fbbd5" dependencies = [ "errno", "libc", @@ -4169,15 +4169,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "scc" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46e6f046b7fef48e2660c57ed794263155d713de679057f2d0c169bfc6e756cc" -dependencies = [ - "sdd", -] - [[package]] name = "schannel" version = "0.1.29" @@ -4203,12 +4194,6 @@ dependencies = [ "untrusted 0.9.0", ] -[[package]] -name = "sdd" -version = "3.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "490dcfcbfef26be6800d11870ff2df8774fa6e86d047e3e8c8a76b25655e41ca" - [[package]] name = "sec1" version = "0.7.3" @@ -4229,7 +4214,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -4304,24 +4289,23 @@ dependencies = [ [[package]] name = "serial_test" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "911bd979bf1070a3f3aa7b691a3b3e9968f339ceeec89e08c280a8a22207a32f" +checksum = "699f4197115b8a7e7ff19c9a315a4bd6fffec26cc4626ef45ecaea389e081c6d" dependencies = [ "futures-executor", "futures-util", "log", "once_cell", "parking_lot", - "scc", "serial_test_derive", ] [[package]] name = "serial_test_derive" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a7d91949b85b0d2fb687445e448b40d322b6b3e4af6b44a29b21d9a5f33e6d9" +checksum = "94e153fc76e1c6a068703d6d29c508a0b15c061c4b7e43da59cc097bc342673c" dependencies = [ "proc-macro2", "quote", @@ -4387,6 +4371,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + [[package]] name = "signal-hook-registry" version = "1.4.8" @@ -4464,9 +4454,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ "libc", "windows-sys 0.61.2", @@ -4549,7 +4539,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -4710,7 +4700,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.3", + "socket2 0.6.4", "tokio-macros", "windows-sys 0.61.2", ] @@ -4919,9 +4909,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unarray" @@ -4937,9 +4927,9 @@ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-xid" @@ -4985,9 +4975,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.23.1" +version = "1.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7" dependencies = [ "getrandom 0.4.2", "js-sys", @@ -5078,9 +5068,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" +checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" dependencies = [ "cfg-if", "once_cell", @@ -5091,9 +5081,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.71" +version = "0.4.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" +checksum = "54568702fabf5d4849ce2b90fadfa64168a097eaf4b351ce9df8b687a0086aaf" dependencies = [ "js-sys", "wasm-bindgen", @@ -5101,9 +5091,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" +checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5111,9 +5101,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" +checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" dependencies = [ "bumpalo", "proc-macro2", @@ -5124,9 +5114,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" +checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" dependencies = [ "unicode-ident", ] @@ -5159,7 +5149,7 @@ version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "hashbrown 0.15.5", "indexmap", "semver", @@ -5167,9 +5157,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.98" +version = "0.3.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" +checksum = "6e0871acf327f283dc6da28a1696cdc64fb355ba9f935d052021fa77f35cce69" dependencies = [ "js-sys", "wasm-bindgen", @@ -5425,7 +5415,7 @@ version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", ] [[package]] @@ -5477,7 +5467,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", - "bitflags 2.11.1", + "bitflags 2.13.0", "indexmap", "log", "serde", @@ -5523,7 +5513,7 @@ dependencies = [ "async-task", "bytes", "futures-lite 1.13.0", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "itoa", @@ -5559,9 +5549,9 @@ checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] name = "yoke" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -5582,18 +5572,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.48" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.48" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" dependencies = [ "proc-macro2", "quote", diff --git a/aws/sdk/build.gradle.kts b/aws/sdk/build.gradle.kts index 39f9d816c08..02416fedf9b 100644 --- a/aws/sdk/build.gradle.kts +++ b/aws/sdk/build.gradle.kts @@ -441,6 +441,7 @@ fun Project.registerDowngradeFor( "libfuzzer-sys" to "0.4.7", // TODO(https://github.com/rust-fuzz/libfuzzer/issues/126) "crc-fast" to "1.9.0", // TODO(https://github.com/smithy-lang/smithy-rs/issues/3981) "serde_json" to "1.0.146", // TODO(https://github.com/serde-rs/json/issues/1309) + "time" to "0.3.47", // TODO(https://github.com/time-rs/time/issues/783): 0.3.48 has an E0119 regression; remove once 0.3.49 ships ) crateNameToLastKnownWorkingVersions.forEach { (crate, version) -> diff --git a/codegen-client/src/test/kotlin/software/amazon/smithy/rust/codegen/client/smithy/protocols/eventstream/ClientEventStreamMarshallerGeneratorTest.kt b/codegen-client/src/test/kotlin/software/amazon/smithy/rust/codegen/client/smithy/protocols/eventstream/ClientEventStreamMarshallerGeneratorTest.kt index bee2956a347..c6eab25806f 100644 --- a/codegen-client/src/test/kotlin/software/amazon/smithy/rust/codegen/client/smithy/protocols/eventstream/ClientEventStreamMarshallerGeneratorTest.kt +++ b/codegen-client/src/test/kotlin/software/amazon/smithy/rust/codegen/client/smithy/protocols/eventstream/ClientEventStreamMarshallerGeneratorTest.kt @@ -269,7 +269,7 @@ class ClientEventStreamMarshallerGeneratorTest { ) -> Result<(), BoxError> { if let Some(signer_sender) = cfg.load::() { signer_sender - .send(Box::new(TestSigner)) + .send(Box::new(TestSigner) as Box) .expect("failed to send test signer"); } Ok(()) diff --git a/codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/parse/CborParserGenerator.kt b/codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/parse/CborParserGenerator.kt index 53a75a47f6e..95079ab5437 100644 --- a/codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/parse/CborParserGenerator.kt +++ b/codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/parse/CborParserGenerator.kt @@ -599,14 +599,7 @@ class CborParserGenerator( is TimestampShape -> rust("decoder.timestamp()") - // BigInteger/BigDecimal are not supported with CBOR. - // The Smithy RPC v2 CBOR spec requires these to be encoded using CBOR tags 2/3/4 - // (binary bignum representation), but aws-smithy-cbor doesn't implement these tags yet. - is BigIntegerShape -> - throw CodegenException( - "BigInteger is not supported with Concise Binary Object Representation (CBOR) protocol. " + - "See https://github.com/smithy-lang/smithy-rs/issues/4473", - ) + is BigIntegerShape -> rust("decoder.big_integer()") is BigDecimalShape -> throw CodegenException( "BigDecimal is not supported with Concise Binary Object Representation (CBOR) protocol. " + diff --git a/codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/serialize/CborSerializerGenerator.kt b/codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/serialize/CborSerializerGenerator.kt index fcfd28e0606..ee509af4afa 100644 --- a/codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/serialize/CborSerializerGenerator.kt +++ b/codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/serialize/CborSerializerGenerator.kt @@ -496,13 +496,7 @@ class CborSerializerGenerator( is TimestampShape -> rust("$encoder.timestamp(${value.asRef()});") - // BigInteger/BigDecimal are not supported with CBOR. - // The Smithy RPC v2 CBOR spec requires these to be encoded using CBOR tags 2/3/4 - // (binary bignum representation), but aws-smithy-cbor doesn't implement these tags yet. - is BigIntegerShape -> - throw CodegenException( - "BigInteger is not supported with Concise Binary Object Representation (CBOR) protocol", - ) + is BigIntegerShape -> rust("$encoder.big_integer(${value.asRef()});") is BigDecimalShape -> throw CodegenException( "BigDecimal is not supported with Concise Binary Object Representation (CBOR) protocol", diff --git a/codegen-core/src/test/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/parse/CborParserGeneratorTest.kt b/codegen-core/src/test/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/parse/CborParserGeneratorTest.kt index 5931b4712d2..0e5776494cb 100644 --- a/codegen-core/src/test/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/parse/CborParserGeneratorTest.kt +++ b/codegen-core/src/test/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/parse/CborParserGeneratorTest.kt @@ -66,7 +66,7 @@ class CborParserGeneratorTest { """.asSmithyModel() @Test - fun `throws CodegenException when deserializing BigInteger with CBOR`() { + fun `generates parser for BigInteger with CBOR`() { val model = OperationNormalizer.transform(modelWithBigInteger) val codegenContext = testCodegenContext(model) val symbolProvider = codegenContext.symbolProvider @@ -80,25 +80,20 @@ class CborParserGeneratorTest { val project = TestWorkspace.testProject(symbolProvider) - val exception = - assertThrows { - project.lib { - unitTest( - "cbor_parser", - """ - let bytes = &[]; - let _output = ${format(operationParser!!)}; - """, - ) - } - - model.lookup("test#TestOp").outputShape(model).also { output -> - output.renderWithModelBuilder(model, symbolProvider, project) - } - project.compileAndTest() - } + project.lib { + unitTest( + "cbor_big_integer_parser", + """ + let bytes: &[u8] = &[]; + let _output = ${format(operationParser!!)}; + """, + ) + } - assert(exception.message!!.contains("BigInteger is not supported with Concise Binary Object Representation (CBOR)")) + model.lookup("test#TestOp").outputShape(model).also { output -> + output.renderWithModelBuilder(model, symbolProvider, project) + } + project.compileAndTest() } @Test diff --git a/codegen-core/src/test/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/serialize/CborSerializerGeneratorTest.kt b/codegen-core/src/test/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/serialize/CborSerializerGeneratorTest.kt index 5f4afca59a3..940658e8add 100644 --- a/codegen-core/src/test/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/serialize/CborSerializerGeneratorTest.kt +++ b/codegen-core/src/test/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/serialize/CborSerializerGeneratorTest.kt @@ -65,7 +65,7 @@ class CborSerializerGeneratorTest { """.asSmithyModel() @Test - fun `throws CodegenException when serializing BigInteger with CBOR`() { + fun `generates serializer for BigInteger with CBOR`() { val model = OperationNormalizer.transform(modelWithBigInteger) val codegenContext = testCodegenContext(model) val symbolProvider = codegenContext.symbolProvider @@ -78,25 +78,20 @@ class CborSerializerGeneratorTest { val project = TestWorkspace.testProject(symbolProvider) - val exception = - assertThrows { - project.lib { - unitTest( - "cbor_serializer", - """ - let input = crate::test_input::TestOpInput::builder().build(); - let _serialized = ${format(operationGenerator!!)}(&input); - """, - ) - } - - model.lookup("test#TestOp").inputShape(model).also { input -> - input.renderWithModelBuilder(model, symbolProvider, project) - } - project.compileAndTest() - } + project.lib { + unitTest( + "cbor_big_integer_serializer", + """ + let input = crate::test_input::TestOpInput::builder().build().unwrap(); + let _serialized = ${format(operationGenerator!!)}(&input); + """, + ) + } - assert(exception.message!!.contains("BigInteger is not supported with Concise Binary Object Representation (CBOR)")) + model.lookup("test#TestOp").inputShape(model).also { input -> + input.renderWithModelBuilder(model, symbolProvider, project) + } + project.compileAndTest() } @Test diff --git a/codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/protocol/ServerProtocolTestGenerator.kt b/codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/protocol/ServerProtocolTestGenerator.kt index 1c9c6e8425d..a824afcbbe7 100644 --- a/codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/protocol/ServerProtocolTestGenerator.kt +++ b/codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/protocol/ServerProtocolTestGenerator.kt @@ -478,9 +478,9 @@ class ServerProtocolTestGenerator( val sanitizedBody = escape(body.replace("\u000c", "\\u{000c}")).dq() val encodedBodyTemplate = """ - #{Bytes}::copy_from_slice( - &#{decode_body_data}($sanitizedBody.as_bytes(), #{MediaType}::from(${(bodyMediaType ?: "unknown").dq()})) - ) + #{Bytes}::copy_from_slice( + &#{decode_body_data}($sanitizedBody.as_bytes(), #{MediaType}::from(${(bodyMediaType ?: "unknown").dq()})) + ) """ requestBodyConstructor(encodedBodyTemplate, needsSync) @@ -490,8 +490,8 @@ class ServerProtocolTestGenerator( rustTemplate( """ - .body(#{BodyCode}).unwrap(); - """, + .body(#{BodyCode}).unwrap(); + """, *codegenScope, "BodyCode" to bodyCode, ) @@ -605,14 +605,19 @@ class ServerProtocolTestGenerator( let (sender, mut receiver) = #{Tokio}::sync::mpsc::channel(1); let config = crate::service::${serviceName}Config::builder().build(); let service = crate::service::$serviceName::builder::<#{BodyType}, _, _, _>(config) - .$operationName(move |input: $inputT| { - let sender = sender.clone(); - async move { - let result = { #{Body:W} }; - sender.send(()).await.expect("receiver dropped early"); - result + .$operationName( + // Rust 1.94+ flags the moved `sender` as "value captured is never read" + // since `send()` only borrows it. + ##[allow(unused_assignments)] + move |input: $inputT| { + let sender = sender.clone(); + async move { + let result = { #{Body:W} }; + sender.send(()).await.expect("receiver dropped early"); + result + } } - }) + ) .build_unchecked(); let http_response = #{Tower}::ServiceExt::oneshot(service, http_request) .await diff --git a/design/src/server/anatomy.md b/design/src/server/anatomy.md index 47ace208270..91e7ec851e4 100644 --- a/design/src/server/anatomy.md +++ b/design/src/server/anatomy.md @@ -187,7 +187,7 @@ let operation = GetPokemonSpecies::from_handler(get_pokemon_service); Alternatively, `from_service` constructor: -```rust +```rust,ignore # extern crate pokemon_service_server_sdk; # extern crate aws_smithy_http_server; # extern crate tower; @@ -230,7 +230,7 @@ To summarize a _model service_ constructed can be constructed from a `Handler` o A [Smithy protocol](https://awslabs.github.io/smithy/2.0/spec/protocol-traits.html#serialization-and-protocol-traits) specifies the serialization/deserialization scheme - how a HTTP request is transformed into a modelled input and a modelled output to a HTTP response. The is formalized using the [`FromRequest`](https://docs.rs/aws-smithy-http-server/latest/aws_smithy_http_server/request/trait.FromRequest.html) and [`IntoResponse`](https://github.com/smithy-lang/smithy-rs/blob/4c5cbc39384f0d949d7693eb87b5853fe72629cd/rust-runtime/aws-smithy-http-server/src/response.rs#L40-L44) traits: -```rust +```rust,ignore # extern crate aws_smithy_http_server; # extern crate http; # use aws_smithy_http_server::body::BoxBody; @@ -357,7 +357,7 @@ Different protocols supported by Smithy enjoy different routing mechanisms, for Despite their differences, all routing mechanisms satisfy a common interface. This is formalized using the [Router](https://docs.rs/aws-smithy-http-server/latest/aws_smithy_http_server/routing/trait.Router.html) trait: -```rust +```rust,ignore # extern crate aws_smithy_http_server; # extern crate http; /// An interface for retrieving an inner [`Service`] given a [`http::Request`]. @@ -673,7 +673,7 @@ stateDiagram-v2 An additional omitted detail is that we provide an "escape hatch" allowing `Handler`s and `OperationService`s to accept data that isn't modelled. In addition to accepting `Op::Input` they can accept additional arguments which implement the [`FromParts`](https://docs.rs/aws-smithy-http-server/latest/aws_smithy_http_server/request/trait.FromParts.html) trait: -```rust +```rust,ignore # extern crate aws_smithy_http_server; # extern crate http; # use http::request::Parts; @@ -709,7 +709,7 @@ pub struct Parts { This is commonly used to access types stored within [`Extensions`](https://docs.rs/http/0.2.8/http/struct.Extensions.html) which have been inserted by a middleware. An `Extension` struct implements `FromParts` to support this use case: -```rust +```rust,ignore # extern crate aws_smithy_http_server; # extern crate http; # extern crate thiserror; diff --git a/design/src/server/middleware.md b/design/src/server/middleware.md index 2bac52c9e67..9de9486d1e0 100644 --- a/design/src/server/middleware.md +++ b/design/src/server/middleware.md @@ -49,7 +49,7 @@ The `Service` trait can be thought of as an asynchronous function from a request Middleware in `tower` typically conforms to the following pattern, a `Service` implementation of the form -```rust +```rust,ignore pub struct NewService { inner: S, /* auxillary data */ diff --git a/examples/pokemon-service/Cargo.toml b/examples/pokemon-service/Cargo.toml index 8f0ce8d6d93..e99d4d334c4 100644 --- a/examples/pokemon-service/Cargo.toml +++ b/examples/pokemon-service/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" publish = false authors = ["Smithy-rs Server Team "] description = "A smithy Rust service to retrieve information about Pokémon." -rust-version = "1.88" +rust-version = "1.94.1" [dependencies] clap = { version = "4", features = ["derive"] } diff --git a/gradle.properties b/gradle.properties index 6ab5830f75f..c9cd1341354 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ # SPDX-License-Identifier: Apache-2.0 # # Rust MSRV (entered into the generated README) -rust.msrv=1.91.1 +rust.msrv=1.94.1 # To enable debug, swap out the two lines below. # When changing this value, be sure to run `./gradlew --stop` to kill the Gradle daemon. # org.gradle.jvmargs=-Xmx1024M -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=localhost:5006 @@ -17,4 +17,4 @@ allowLocalDeps=false # Avoid registering dependencies/plugins/tasks that are only used for testing purposes isTestingEnabled=true # codegen publication version -codegenVersion=0.1.18 +codegenVersion=0.1.20 diff --git a/rust-runtime/Cargo.lock b/rust-runtime/Cargo.lock index 686e9a31ae0..1b2800b4d06 100644 --- a/rust-runtime/Cargo.lock +++ b/rust-runtime/Cargo.lock @@ -294,9 +294,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "aws-lc-fips-sys" @@ -349,7 +349,7 @@ dependencies = [ [[package]] name = "aws-smithy-async" -version = "1.2.14" +version = "1.3.0" dependencies = [ "futures-util", "pin-project-lite", @@ -370,26 +370,27 @@ dependencies = [ [[package]] name = "aws-smithy-cbor" -version = "0.61.9" +version = "0.62.0" dependencies = [ - "aws-smithy-runtime-api 1.12.3", + "aws-smithy-runtime-api 1.13.0", "aws-smithy-schema", - "aws-smithy-types 1.4.9", + "aws-smithy-types 1.6.0", "criterion", "minicbor 2.2.2", + "num-bigint", ] [[package]] name = "aws-smithy-checksums" -version = "0.64.8" +version = "0.65.0" dependencies = [ - "aws-smithy-http 0.63.6", - "aws-smithy-types 1.4.9", + "aws-smithy-http 0.64.0", + "aws-smithy-types 1.6.0", "bytes", "bytes-utils", "crc-fast", "hex", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "md-5 0.11.0", @@ -404,15 +405,15 @@ dependencies = [ [[package]] name = "aws-smithy-compression" -version = "0.1.6" +version = "0.2.0" dependencies = [ - "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.4.9", + "aws-smithy-runtime-api 1.13.0", + "aws-smithy-types 1.6.0", "bytes", "bytes-utils", "flate2", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "pin-project-lite", @@ -423,9 +424,9 @@ dependencies = [ [[package]] name = "aws-smithy-dns" -version = "0.1.12" +version = "0.2.0" dependencies = [ - "aws-smithy-runtime-api 1.12.3", + "aws-smithy-runtime-api 1.13.0", "criterion", "hickory-resolver", "tokio", @@ -433,10 +434,10 @@ dependencies = [ [[package]] name = "aws-smithy-eventstream" -version = "0.60.20" +version = "0.61.1" dependencies = [ "arbitrary", - "aws-smithy-types 1.4.9", + "aws-smithy-types 1.6.0", "bytes", "bytes-utils", "crc32fast", @@ -448,7 +449,7 @@ dependencies = [ [[package]] name = "aws-smithy-experimental" -version = "0.2.4" +version = "0.3.0" [[package]] name = "aws-smithy-http" @@ -463,7 +464,7 @@ dependencies = [ "futures-core", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "percent-encoding", "pin-project-lite", @@ -473,20 +474,20 @@ dependencies = [ [[package]] name = "aws-smithy-http" -version = "0.63.6" +version = "0.64.0" dependencies = [ "async-stream", "aws-smithy-eventstream", - "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.4.9", + "aws-smithy-runtime-api 1.13.0", + "aws-smithy-types 1.6.0", "bytes", "bytes-utils", "futures-core", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", - "hyper 1.9.0", + "hyper 1.10.1", "percent-encoding", "pin-project-lite", "pin-utils", @@ -497,23 +498,23 @@ dependencies = [ [[package]] name = "aws-smithy-http-client" -version = "1.1.13" +version = "1.2.0" dependencies = [ - "aws-smithy-async 1.2.14", + "aws-smithy-async 1.3.0", "aws-smithy-protocol-test", - "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.4.9", + "aws-smithy-runtime-api 1.13.0", + "aws-smithy-types 1.6.0", "base64 0.22.1", "bytes", "h2 0.3.27", "h2 0.4.14", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", "hyper 0.14.32", - "hyper 1.9.0", + "hyper 1.10.1", "hyper-rustls 0.24.2", "hyper-rustls 0.27.9", "hyper-util", @@ -521,7 +522,7 @@ dependencies = [ "pin-project-lite", "rustls 0.21.12", "rustls 0.23.40", - "rustls-native-certs 0.8.3", + "rustls-native-certs 0.8.4", "rustls-pemfile 2.2.0", "rustls-pki-types", "s2n-tls", @@ -568,22 +569,22 @@ dependencies = [ [[package]] name = "aws-smithy-http-server" -version = "0.66.5" -dependencies = [ - "aws-smithy-cbor 0.61.9", - "aws-smithy-http 0.63.6", - "aws-smithy-json 0.62.7", - "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.4.9", - "aws-smithy-xml 0.60.15", +version = "0.67.0" +dependencies = [ + "aws-smithy-cbor 0.62.0", + "aws-smithy-http 0.64.0", + "aws-smithy-json 0.63.0", + "aws-smithy-runtime-api 1.13.0", + "aws-smithy-types 1.6.0", + "aws-smithy-xml 0.61.1", "bytes", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", - "hyper 1.9.0", + "hyper 1.10.1", "hyper-util", - "lambda_http 1.2.0", + "lambda_http 1.2.1", "mime", "nom", "pin-project-lite", @@ -601,19 +602,19 @@ dependencies = [ [[package]] name = "aws-smithy-http-server-metrics" -version = "0.1.2" +version = "0.2.0" dependencies = [ "aws-smithy-http-server 0.65.10", - "aws-smithy-http-server 0.66.5", + "aws-smithy-http-server 0.67.0", "aws-smithy-http-server-metrics-macro", "aws-smithy-legacy-http-server", "futures", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "hyper 0.14.32", - "hyper 1.9.0", + "hyper 1.10.1", "metrique", "metrique-core", "metrique-writer", @@ -627,7 +628,7 @@ dependencies = [ [[package]] name = "aws-smithy-http-server-metrics-macro" -version = "0.1.1" +version = "0.2.0" dependencies = [ "proc-macro2", "quote", @@ -636,13 +637,13 @@ dependencies = [ [[package]] name = "aws-smithy-http-server-python" -version = "0.67.1" +version = "0.68.0" dependencies = [ - "aws-smithy-http 0.63.6", - "aws-smithy-json 0.62.7", + "aws-smithy-http 0.64.0", + "aws-smithy-json 0.63.0", "aws-smithy-legacy-http-server", - "aws-smithy-types 1.4.9", - "aws-smithy-xml 0.60.15", + "aws-smithy-types 1.6.0", + "aws-smithy-xml 0.61.1", "bytes", "futures", "futures-util", @@ -684,30 +685,30 @@ dependencies = [ [[package]] name = "aws-smithy-json" -version = "0.62.7" +version = "0.63.0" dependencies = [ - "aws-smithy-runtime-api 1.12.3", + "aws-smithy-runtime-api 1.13.0", "aws-smithy-schema", - "aws-smithy-types 1.4.9", + "aws-smithy-types 1.6.0", "proptest", "serde_json", ] [[package]] name = "aws-smithy-legacy-http" -version = "0.62.15" +version = "0.63.0" dependencies = [ "async-stream", "aws-smithy-eventstream", - "aws-smithy-http 0.63.6", - "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.4.9", + "aws-smithy-http 0.64.0", + "aws-smithy-runtime-api 1.13.0", + "aws-smithy-types 1.6.0", "bytes", "bytes-utils", "futures-core", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "hyper 0.14.32", "percent-encoding", @@ -720,14 +721,14 @@ dependencies = [ [[package]] name = "aws-smithy-legacy-http-server" -version = "0.65.15" +version = "0.66.0" dependencies = [ - "aws-smithy-cbor 0.61.9", - "aws-smithy-json 0.62.7", + "aws-smithy-cbor 0.62.0", + "aws-smithy-json 0.63.0", "aws-smithy-legacy-http", - "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.4.9", - "aws-smithy-xml 0.60.15", + "aws-smithy-runtime-api 1.13.0", + "aws-smithy-types 1.6.0", + "aws-smithy-xml 0.61.1", "bytes", "futures-util", "http 0.2.12", @@ -750,28 +751,28 @@ dependencies = [ [[package]] name = "aws-smithy-mocks" -version = "0.2.6" +version = "0.3.0" dependencies = [ - "aws-smithy-async 1.2.14", + "aws-smithy-async 1.3.0", "aws-smithy-http-client", "aws-smithy-runtime", - "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.4.9", - "http 1.4.0", + "aws-smithy-runtime-api 1.13.0", + "aws-smithy-types 1.6.0", + "http 1.4.2", "tokio", ] [[package]] name = "aws-smithy-observability" -version = "0.2.6" +version = "0.3.0" dependencies = [ - "aws-smithy-runtime-api 1.12.3", + "aws-smithy-runtime-api 1.13.0", "serial_test", ] [[package]] name = "aws-smithy-observability-otel" -version = "0.1.11" +version = "0.2.0" dependencies = [ "async-global-executor", "async-task", @@ -786,15 +787,15 @@ dependencies = [ [[package]] name = "aws-smithy-protocol-test" -version = "0.63.14" +version = "0.64.0" dependencies = [ "assert-json-diff", - "aws-smithy-runtime-api 1.12.3", + "aws-smithy-runtime-api 1.13.0", "base64-simd", "cbor-diag", "ciborium", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "pretty_assertions", "regex-lite", "roxmltree", @@ -804,29 +805,29 @@ dependencies = [ [[package]] name = "aws-smithy-query" -version = "0.60.15" +version = "0.61.1" dependencies = [ - "aws-smithy-types 1.4.9", + "aws-smithy-types 1.6.0", "urlencoding", ] [[package]] name = "aws-smithy-runtime" -version = "1.11.3" +version = "1.12.0" dependencies = [ "approx", - "aws-smithy-async 1.2.14", - "aws-smithy-http 0.63.6", + "aws-smithy-async 1.3.0", + "aws-smithy-http 0.64.0", "aws-smithy-http-client", "aws-smithy-observability", - "aws-smithy-runtime-api 1.12.3", + "aws-smithy-runtime-api 1.13.0", "aws-smithy-schema", - "aws-smithy-types 1.4.9", + "aws-smithy-types 1.6.0", "bytes", "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -850,7 +851,7 @@ dependencies = [ "aws-smithy-types 1.4.5", "bytes", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "pin-project-lite", "tokio", "tracing", @@ -858,14 +859,14 @@ dependencies = [ [[package]] name = "aws-smithy-runtime-api" -version = "1.12.3" +version = "1.13.0" dependencies = [ - "aws-smithy-async 1.2.14", + "aws-smithy-async 1.3.0", "aws-smithy-runtime-api-macros", - "aws-smithy-types 1.4.9", + "aws-smithy-types 1.6.0", "bytes", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "pin-project-lite", "proptest", "tokio", @@ -875,7 +876,7 @@ dependencies = [ [[package]] name = "aws-smithy-runtime-api-macros" -version = "1.0.0" +version = "1.1.0" dependencies = [ "proc-macro2", "quote", @@ -884,11 +885,11 @@ dependencies = [ [[package]] name = "aws-smithy-schema" -version = "0.1.0" +version = "0.1.1" dependencies = [ - "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.4.9", - "http 1.4.0", + "aws-smithy-runtime-api 1.13.0", + "aws-smithy-types 1.6.0", + "http 1.4.2", ] [[package]] @@ -902,7 +903,7 @@ dependencies = [ "bytes-utils", "futures-core", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -920,7 +921,7 @@ dependencies = [ [[package]] name = "aws-smithy-types" -version = "1.4.9" +version = "1.6.0" dependencies = [ "base64 0.13.1", "base64-simd", @@ -930,7 +931,7 @@ dependencies = [ "criterion", "futures-core", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -954,10 +955,10 @@ dependencies = [ [[package]] name = "aws-smithy-types-convert" -version = "0.60.14" +version = "0.61.1" dependencies = [ - "aws-smithy-async 1.2.14", - "aws-smithy-types 1.4.9", + "aws-smithy-async 1.3.0", + "aws-smithy-types 1.6.0", "chrono", "futures-core", "time", @@ -965,11 +966,11 @@ dependencies = [ [[package]] name = "aws-smithy-wasm" -version = "0.1.11" +version = "0.2.0" dependencies = [ - "aws-smithy-async 1.2.14", - "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.4.9", + "aws-smithy-async 1.3.0", + "aws-smithy-runtime-api 1.13.0", + "aws-smithy-types 1.6.0", "http-body-util", "sync_wrapper", "wstd", @@ -986,7 +987,7 @@ dependencies = [ [[package]] name = "aws-smithy-xml" -version = "0.60.15" +version = "0.61.1" dependencies = [ "aws-smithy-protocol-test", "base64 0.13.1", @@ -1018,7 +1019,7 @@ checksum = "d02c123e89527e7b424f74f52d11be0d17ef2887819323a42dcae1c7630ca53d" dependencies = [ "base64 0.22.1", "bytes", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-serde 2.1.1", "query_map", @@ -1066,7 +1067,7 @@ version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "cexpr", "clang-sys", "itertools 0.13.0", @@ -1076,7 +1077,7 @@ dependencies = [ "quote", "regex", "rustc-hash", - "shlex", + "shlex 1.3.0", "syn 2.0.117", ] @@ -1103,9 +1104,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.11.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" [[package]] name = "block-buffer" @@ -1149,9 +1150,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "bytes" @@ -1199,14 +1200,14 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.62" +version = "1.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" dependencies = [ "find-msvc-tools", "jobserver", "libc", - "shlex", + "shlex 2.0.1", ] [[package]] @@ -1237,9 +1238,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "num-traits", ] @@ -1638,9 +1639,9 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", @@ -1661,9 +1662,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "either" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" [[package]] name = "encoding_rs" @@ -2010,7 +2011,7 @@ dependencies = [ "fnv", "futures-core", "futures-sink", - "http 1.4.0", + "http 1.4.2", "indexmap 2.14.0", "slab", "tokio", @@ -2153,9 +2154,9 @@ dependencies = [ [[package]] name = "http" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" dependencies = [ "bytes", "itoa", @@ -2179,7 +2180,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.4.0", + "http 1.4.2", ] [[package]] @@ -2190,7 +2191,7 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "pin-project-lite", ] @@ -2217,7 +2218,7 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f056c8559e3757392c8d091e796416e4649d8e49e88b8d76df6c002f05027fd" dependencies = [ - "http 1.4.0", + "http 1.4.2", "serde", ] @@ -2268,16 +2269,16 @@ dependencies = [ [[package]] name = "hyper" -version = "1.9.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" +checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" dependencies = [ "atomic-waker", "bytes", "futures-channel", "futures-core", "h2 0.4.14", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "httparse", "httpdate", @@ -2310,11 +2311,11 @@ version = "0.27.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" dependencies = [ - "http 1.4.0", - "hyper 1.9.0", + "http 1.4.2", + "hyper 1.10.1", "hyper-util", "rustls 0.23.40", - "rustls-native-certs 0.8.3", + "rustls-native-certs 0.8.4", "tokio", "tokio-rustls 0.26.4", "tower-service", @@ -2330,14 +2331,14 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", - "hyper 1.9.0", + "hyper 1.10.1", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.3", + "socket2 0.6.4", "system-configuration", "tokio", "tower-layer", @@ -2496,19 +2497,19 @@ dependencies = [ name = "inlineable" version = "0.1.0" dependencies = [ - "aws-smithy-cbor 0.61.9", + "aws-smithy-cbor 0.62.0", "aws-smithy-compression", - "aws-smithy-http 0.63.6", - "aws-smithy-json 0.62.7", + "aws-smithy-http 0.64.0", + "aws-smithy-json 0.63.0", "aws-smithy-runtime", - "aws-smithy-runtime-api 1.12.3", - "aws-smithy-types 1.4.9", - "aws-smithy-xml 0.60.15", + "aws-smithy-runtime-api 1.13.0", + "aws-smithy-types 1.6.0", + "aws-smithy-xml 0.61.1", "bytes", "fastrand 2.4.1", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -2546,7 +2547,7 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d40460c0ce33d6ce4b0630ad68ff63d6661961c48b6dba35e5a4d81cfb48222" dependencies = [ - "socket2 0.6.3", + "socket2 0.6.4", "widestring", "windows-registry", "windows-result", @@ -2635,13 +2636,12 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.98" +version = "0.3.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" +checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] @@ -2680,19 +2680,19 @@ dependencies = [ [[package]] name = "lambda_http" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fc0b7ef9af5e63e348c4b11e7e31eab573603348b7eb9c3e831d8e87c1ecc" +checksum = "9f7f1395a7854d32e6f0c366448740dceb2e1bcb90bbbbf2785152e0ca3283e0" dependencies = [ "aws_lambda_events 1.2.0", "bytes", "encoding_rs", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", - "hyper 1.9.0", - "lambda_runtime 1.2.0", + "hyper 1.10.1", + "lambda_runtime 1.2.1", "mime", "percent-encoding", "pin-project-lite", @@ -2729,18 +2729,18 @@ dependencies = [ [[package]] name = "lambda_runtime" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc1b380b7fb92ddf3913b01f094c3fcf59e31d995bb609645cd64dcdb56ce63" +checksum = "4de91395937cd37777dce2c98ed95060a6fbd7dfaefb7ae3cc5fec84bb8379d0" dependencies = [ "async-stream", "base64 0.22.1", "bytes", "futures", - "http 1.4.0", + "http 1.4.2", "http-body-util", "http-serde 2.1.1", - "hyper 1.9.0", + "hyper 1.10.1", "lambda_runtime_api_client 1.0.3", "pin-project", "serde", @@ -2773,10 +2773,10 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", - "hyper 1.9.0", + "hyper 1.10.1", "hyper-util", "tower 0.5.3", "tracing", @@ -2813,9 +2813,9 @@ dependencies = [ [[package]] name = "libmimalloc-sys" -version = "0.1.47" +version = "0.1.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d1eacfa31c33ec25e873c136ba5669f00f9866d0688bea7be4d3f7e43067df6" +checksum = "6a45a52f43e1c16f667ccfe4dd8c85b7f7c204fd5e3bf46c5b0db9a5c3c0b8e9" dependencies = [ "cc", ] @@ -2843,9 +2843,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" dependencies = [ "value-bag", ] @@ -2881,9 +2881,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" [[package]] name = "memoffset" @@ -2927,9 +2927,9 @@ dependencies = [ [[package]] name = "metrique" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2638fb6c2325d3e35c7b0d1ce49cf8ce74b89b7439d4dc5ce1c9fff0f7fa18a1" +checksum = "ffdfd0c9954a916c5e1db230cc7593569858afec7744cebfd0fbef45de7b07c7" dependencies = [ "itoa", "metrique-core", @@ -2945,9 +2945,9 @@ dependencies = [ [[package]] name = "metrique-core" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b99ea3484ab9afe6337413bacc842d516e65623a476699f9873803028e6a9e" +checksum = "f56ef332b47a4d2dc14209bf9ce4334682dd2fec43a4b84e5ed063bf2f4ea29a" dependencies = [ "itertools 0.14.0", "metrique-writer-core", @@ -2955,9 +2955,9 @@ dependencies = [ [[package]] name = "metrique-macro" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a02c5cb6e55c1ec5eb3ef2d10d137805547c486ad54b587d42d0a49713e6ef9" +checksum = "403c61cd847b11680ae6cf1feb384cbe06e412e4dc221f1e16ccf48038d190bb" dependencies = [ "Inflector", "darling", @@ -2968,9 +2968,9 @@ dependencies = [ [[package]] name = "metrique-service-metrics" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb71714973a9ba53d609a577311aae4d8beb7df37869b5a92cb777a3f4c905b8" +checksum = "93045b7f5c8b998946b715de07523b1c6d81932512c5c27590bf73328aaf3832" dependencies = [ "metrique-writer", ] @@ -2983,9 +2983,9 @@ checksum = "d607939211e4eaaa8cd35394fa5e57faffb7390d0ac513b39992edcaf3cc526c" [[package]] name = "metrique-writer" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04f770fe8a45a7c2f285c7ce81b9364e0e5604cbb7daf693fef1f624bf8f0bf8" +checksum = "ae9e23184d81616fcdfcdc5768e14c2bca765096094d08e7895259fe658378e4" dependencies = [ "ahash", "crossbeam-queue", @@ -3004,9 +3004,9 @@ dependencies = [ [[package]] name = "metrique-writer-core" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a0b67a72a8849987122ca8ceacaf81d47eaba36cd673767fc3742a086dd04ac" +checksum = "23421d85733c0182613b32f32094080e07cd5e98be5893f1cd3baf7eed16c4d0" dependencies = [ "derive-where", "itertools 0.14.0", @@ -3016,9 +3016,9 @@ dependencies = [ [[package]] name = "metrique-writer-format-emf" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ee9bd51e4107aef22814491a9e2c5e59fe938609a83c31b6f2e76085cc48268" +checksum = "59fca512de7ed9e29644950426fe3810016fb8f8e478a779fffc33d45b9e9b4e" dependencies = [ "bit-set", "dtoa", @@ -3050,9 +3050,9 @@ dependencies = [ [[package]] name = "mimalloc" -version = "0.1.50" +version = "0.1.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3627c4272df786b9260cabaa46aec1d59c93ede723d4c3ef646c503816b0640" +checksum = "2d4139bb28d14ad1facf21d5eb8825051b326e172d216b39f6d31df53cc97862" dependencies = [ "libmimalloc-sys", ] @@ -3111,9 +3111,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" dependencies = [ "libc", "wasi", @@ -3501,7 +3501,7 @@ checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.11.1", + "bitflags 2.13.0", "num-traits", "rand 0.9.4", "rand_chacha 0.9.0", @@ -3775,7 +3775,7 @@ version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", ] [[package]] @@ -3816,14 +3816,14 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", ] [[package]] name = "regex" -version = "1.12.3" +version = "1.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" dependencies = [ "aho-corasick", "memchr", @@ -3850,9 +3850,9 @@ checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "resolv-conf" @@ -3910,7 +3910,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "errno", "libc", "linux-raw-sys", @@ -3959,9 +3959,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" dependencies = [ "openssl-probe 0.2.1", "rustls-pki-types", @@ -4044,9 +4044,9 @@ checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "s2n-tls" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d22c36f207d0bb6a38272d5d1fa1cd99094335c70db1bfef54e0b8b672ae26f" +checksum = "f60ada8adc59c848686744ff0ca93f1d1edc565a69d96a58a26abd84a521a5a0" dependencies = [ "errno", "hex", @@ -4061,8 +4061,8 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f48b9922eed6521a7f9d5b444bcc36a5df988161b67579112cc5377ca021ed78" dependencies = [ - "http 1.4.0", - "hyper 1.9.0", + "http 1.4.2", + "hyper 1.10.1", "hyper-util", "s2n-tls", "s2n-tls-tokio", @@ -4071,9 +4071,9 @@ dependencies = [ [[package]] name = "s2n-tls-sys" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcf9e3b136cdd2c99f0cee2811d80b9f6bc44b5fd48c172857de32babb506f5e" +checksum = "e6960ccb00e47fe4b641f9c7b769515a4f89cb65459ca7afbed20fa39aac0b1b" dependencies = [ "aws-lc-rs", "cc", @@ -4082,9 +4082,9 @@ dependencies = [ [[package]] name = "s2n-tls-tokio" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0ab00b075ab482e89509de51e1972a8f38ff70e1dbd5279caa0fd8d25f86cb" +checksum = "fdeee0425e44094040f5c3a065a6e42974e9bc1a7587a292f520715b0f9fbbd5" dependencies = [ "errno", "libc", @@ -4102,15 +4102,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "scc" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46e6f046b7fef48e2660c57ed794263155d713de679057f2d0c169bfc6e756cc" -dependencies = [ - "sdd", -] - [[package]] name = "schannel" version = "0.1.29" @@ -4136,19 +4127,13 @@ dependencies = [ "untrusted 0.9.0", ] -[[package]] -name = "sdd" -version = "3.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "490dcfcbfef26be6800d11870ff2df8774fa6e86d047e3e8c8a76b25655e41ca" - [[package]] name = "security-framework" version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "core-foundation 0.9.4", "core-foundation-sys", "libc", @@ -4161,7 +4146,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -4259,24 +4244,23 @@ dependencies = [ [[package]] name = "serial_test" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "911bd979bf1070a3f3aa7b691a3b3e9968f339ceeec89e08c280a8a22207a32f" +checksum = "699f4197115b8a7e7ff19c9a315a4bd6fffec26cc4626ef45ecaea389e081c6d" dependencies = [ "futures-executor", "futures-util", "log", "once_cell", "parking_lot", - "scc", "serial_test_derive", ] [[package]] name = "serial_test_derive" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a7d91949b85b0d2fb687445e448b40d322b6b3e4af6b44a29b21d9a5f33e6d9" +checksum = "94e153fc76e1c6a068703d6d29c508a0b15c061c4b7e43da59cc097bc342673c" dependencies = [ "proc-macro2", "quote", @@ -4320,6 +4304,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + [[package]] name = "signal-hook" version = "0.3.18" @@ -4377,9 +4367,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ "libc", "windows-sys 0.61.2", @@ -4491,7 +4481,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -4687,7 +4677,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.3", + "socket2 0.6.4", "tokio-macros", "windows-sys 0.61.2", ] @@ -4813,9 +4803,9 @@ version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "bytes", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "pin-project-lite", "tokio", @@ -4966,9 +4956,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unarray" @@ -5032,9 +5022,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.23.1" +version = "1.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7" dependencies = [ "getrandom 0.4.2", "js-sys", @@ -5126,9 +5116,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" +checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" dependencies = [ "cfg-if", "once_cell", @@ -5139,9 +5129,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.71" +version = "0.4.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" +checksum = "54568702fabf5d4849ce2b90fadfa64168a097eaf4b351ce9df8b687a0086aaf" dependencies = [ "js-sys", "wasm-bindgen", @@ -5149,9 +5139,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" +checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5159,9 +5149,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" +checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" dependencies = [ "bumpalo", "proc-macro2", @@ -5172,9 +5162,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" +checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" dependencies = [ "unicode-ident", ] @@ -5207,7 +5197,7 @@ version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "hashbrown 0.15.5", "indexmap 2.14.0", "semver", @@ -5215,9 +5205,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.98" +version = "0.3.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" +checksum = "6e0871acf327f283dc6da28a1696cdc64fb355ba9f935d052021fa77f35cce69" dependencies = [ "js-sys", "wasm-bindgen", @@ -5392,7 +5382,7 @@ version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", ] [[package]] @@ -5444,7 +5434,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", - "bitflags 2.11.1", + "bitflags 2.13.0", "indexmap 2.14.0", "log", "serde", @@ -5490,7 +5480,7 @@ dependencies = [ "async-task", "bytes", "futures-lite 1.13.0", - "http 1.4.0", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "itoa", @@ -5535,9 +5525,9 @@ dependencies = [ [[package]] name = "yoke" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -5558,18 +5548,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.48" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.48" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" dependencies = [ "proc-macro2", "quote", diff --git a/rust-runtime/aws-smithy-async/Cargo.toml b/rust-runtime/aws-smithy-async/Cargo.toml index d737dbb1ed9..54f80be2695 100644 --- a/rust-runtime/aws-smithy-async/Cargo.toml +++ b/rust-runtime/aws-smithy-async/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-smithy-async" -version = "1.2.14" +version = "1.3.0" authors = ["AWS Rust SDK Team ", "John DiSanti "] description = "Async runtime agnostic abstractions for smithy-rs." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] rt-tokio = ["tokio/time"] diff --git a/rust-runtime/aws-smithy-cbor/Cargo.toml b/rust-runtime/aws-smithy-cbor/Cargo.toml index 5b2708a4371..7349497d392 100644 --- a/rust-runtime/aws-smithy-cbor/Cargo.toml +++ b/rust-runtime/aws-smithy-cbor/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-cbor" -version = "0.61.9" +version = "0.62.0" authors = [ "AWS Rust SDK Team ", "David Pérez ", @@ -9,7 +9,7 @@ description = "CBOR utilities for smithy-rs." edition = "2021" license = "Apache-2.0" repository = "https://github.com/awslabs/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies.minicbor] version = "2.2.1" @@ -24,6 +24,7 @@ features = [ aws-smithy-runtime-api = { path = "../aws-smithy-runtime-api", features = ["client"] } aws-smithy-schema = { path = "../aws-smithy-schema" } aws-smithy-types = { path = "../aws-smithy-types" } +num-bigint = "0.4.6" [dev-dependencies] criterion = "0.5.1" diff --git a/rust-runtime/aws-smithy-cbor/src/decode.rs b/rust-runtime/aws-smithy-cbor/src/decode.rs index 1767c89cbdd..f05cdb84ef7 100644 --- a/rust-runtime/aws-smithy-cbor/src/decode.rs +++ b/rust-runtime/aws-smithy-cbor/src/decode.rs @@ -5,7 +5,7 @@ use std::borrow::Cow; -use aws_smithy_types::{Blob, DateTime}; +use aws_smithy_types::{BigInteger, Blob, DateTime}; use minicbor::decode::Error; use crate::data::Type; @@ -253,6 +253,71 @@ impl<'b> Decoder<'b> { Ok(result) } } + + /// Returns a `BigInteger` from either a CBOR tag 2/3 (bignum) or a plain integer. + /// + /// Per RFC 8949 §3.4.3, tag 2 encodes unsigned bignum `n` and tag 3 encodes + /// negative bignum `-1 - n`, where `n` is the unsigned integer from the byte + /// string in network byte order. Plain CBOR integers (major types 0 and 1) + /// are also accepted per preferred serialization rules. + pub fn big_integer(&mut self) -> Result { + use num_bigint::BigInt; + + match self.decoder.datatype().map_err(DeserializeError::new)? { + minicbor::data::Type::Tag => { + let tag = self.decoder.tag().map_err(DeserializeError::new)?; + let bytes = self.decoder.bytes().map_err(DeserializeError::new)?; + let n = BigInt::from_bytes_be(num_bigint::Sign::Plus, bytes); + + let value = match tag.as_u64() { + 2 => n, + 3 => -n - 1, // tag 3 value = -1 - n + _ => { + return Err(DeserializeError::new(Error::message( + "expected CBOR tag 2 (positive bignum) or tag 3 (negative bignum)", + ))); + } + }; + value + .to_string() + .parse() + .map_err(|_| DeserializeError::new(Error::message("invalid bignum value"))) + } + minicbor::data::Type::U8 + | minicbor::data::Type::U16 + | minicbor::data::Type::U32 + | minicbor::data::Type::U64 => { + let value = self.decoder.u64().map_err(DeserializeError::new)?; + value + .to_string() + .parse() + .map_err(|_| DeserializeError::new(Error::message("invalid integer value"))) + } + minicbor::data::Type::I8 + | minicbor::data::Type::I16 + | minicbor::data::Type::I32 + | minicbor::data::Type::I64 => { + let value = self.decoder.i64().map_err(DeserializeError::new)?; + value + .to_string() + .parse() + .map_err(|_| DeserializeError::new(Error::message("invalid integer value"))) + } + // Int covers CBOR major type 1 values that exceed i64 range + // (argument > i64::MAX, i.e. values from -2^64 to -(i64::MAX+2)). + minicbor::data::Type::Int => { + let int_val = self.decoder.int().map_err(DeserializeError::new)?; + let value: i128 = int_val.into(); + BigInt::from(value) + .to_string() + .parse() + .map_err(|_| DeserializeError::new(Error::message("invalid integer value"))) + } + _ => Err(DeserializeError::new(Error::message( + "expected CBOR integer or bignum tag", + ))), + } + } } #[allow(dead_code)] // to avoid `never constructed` warning @@ -387,6 +452,141 @@ mod tests { ); } + #[test] + fn big_integer_round_trip_positive() { + for value in ["0", "1", "23", "256", "65535", "18446744073709551615"] { + let mut encoder = crate::Encoder::new(Vec::new()); + encoder.big_integer(&value.parse().unwrap()); + let bytes = encoder.into_writer(); + let mut decoder = Decoder::new(&bytes); + let result = decoder.big_integer().expect("should decode"); + assert_eq!(result.as_ref(), value, "round-trip failed for {value}"); + } + } + + #[test] + fn big_integer_round_trip_negative() { + for value in ["-1", "-42", "-256", "-18446744073709551616"] { + let mut encoder = crate::Encoder::new(Vec::new()); + encoder.big_integer(&value.parse().unwrap()); + let bytes = encoder.into_writer(); + let mut decoder = Decoder::new(&bytes); + let result = decoder.big_integer().expect("should decode"); + assert_eq!(result.as_ref(), value, "round-trip failed for {value}"); + } + } + + #[test] + fn big_integer_round_trip_large() { + let large_pos = "123456789012345678901234567890"; + let large_neg = "-123456789012345678901234567890"; + for value in [large_pos, large_neg] { + let mut encoder = crate::Encoder::new(Vec::new()); + encoder.big_integer(&value.parse().unwrap()); + let bytes = encoder.into_writer(); + let mut decoder = Decoder::new(&bytes); + let result = decoder.big_integer().expect("should decode"); + assert_eq!(result.as_ref(), value, "round-trip failed for {value}"); + } + } + + #[test] + fn big_integer_rfc8949_appendix_a_positive() { + // RFC 8949 Appendix A: 18446744073709551616 (2^64) = 0xc249010000000000000000 + let bytes = [ + 0xc2, 0x49, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ]; + let mut decoder = Decoder::new(&bytes); + let result = decoder.big_integer().expect("should decode"); + assert_eq!(result.as_ref(), "18446744073709551616"); + } + + #[test] + fn big_integer_rfc8949_appendix_a_negative() { + // RFC 8949 Appendix A: -18446744073709551617 = 0xc349010000000000000000 + let bytes = [ + 0xc3, 0x49, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ]; + let mut decoder = Decoder::new(&bytes); + let result = decoder.big_integer().expect("should decode"); + assert_eq!(result.as_ref(), "-18446744073709551617"); + } + + #[test] + fn big_integer_from_plain_cbor_unsigned() { + let mut enc = minicbor::Encoder::new(Vec::new()); + enc.u64(9999).unwrap(); + let bytes = enc.into_writer(); + let mut decoder = Decoder::new(&bytes); + let result = decoder.big_integer().expect("should decode plain integer"); + assert_eq!(result.as_ref(), "9999"); + } + + #[test] + fn big_integer_from_plain_cbor_negative() { + let mut enc = minicbor::Encoder::new(Vec::new()); + enc.i64(-500).unwrap(); + let bytes = enc.into_writer(); + let mut decoder = Decoder::new(&bytes); + let result = decoder + .big_integer() + .expect("should decode negative plain integer"); + assert_eq!(result.as_ref(), "-500"); + } + + #[test] + fn big_integer_from_plain_cbor_positive_signed() { + // A positive value such as +123 is encoded as CBOR major type 0 (unsigned) + // per preferred serialization and must decode back to the same value. + let mut enc = minicbor::Encoder::new(Vec::new()); + enc.i64(123).unwrap(); + let bytes = enc.into_writer(); + let mut decoder = Decoder::new(&bytes); + let result = decoder + .big_integer() + .expect("should decode positive plain integer"); + assert_eq!(result.as_ref(), "123"); + } + + #[test] + fn big_integer_tag3_empty_byte_string() { + // Tag 3 with empty byte string = -1 - 0 = -1 + let bytes = [0xc3, 0x40]; // tag 3, empty byte string + let mut decoder = Decoder::new(&bytes); + let result = decoder.big_integer().expect("should decode"); + assert_eq!(result.as_ref(), "-1"); + } + + #[test] + fn big_integer_tag2_empty_byte_string() { + // Tag 2 with empty byte string = 0 + let bytes = [0xc2, 0x40]; // tag 2, empty byte string + let mut decoder = Decoder::new(&bytes); + let result = decoder.big_integer().expect("should decode"); + assert_eq!(result.as_ref(), "0"); + } + + #[test] + fn big_integer_rejects_invalid_tag() { + // Tag 4 (decimal fraction) should be rejected. + let bytes = [0xc4, 0x82, 0x21, 0x19, 0x6a, 0xb3]; + let mut decoder = Decoder::new(&bytes); + assert!(decoder.big_integer().is_err()); + } + + #[test] + fn big_integer_decode_major_type_1_exceeding_i64() { + // CBOR major type 1 with argument u64::MAX (0x3b + 8 bytes of 0xff). + // Value = -1 - u64::MAX = -18446744073709551616. + // This exercises the minicbor Type::Int path in the decoder. + let bytes = [0x3b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]; + let mut decoder = Decoder::new(&bytes); + let result = decoder + .big_integer() + .expect("should decode major type 1 > i64::MAX"); + assert_eq!(result.as_ref(), "-18446744073709551616"); + } + #[test] fn test_timestamp_integer_epoch_seconds() { // RFC 8949 §3.4.2: tag 1 content MUST be int OR float. diff --git a/rust-runtime/aws-smithy-cbor/src/encode.rs b/rust-runtime/aws-smithy-cbor/src/encode.rs index ce99b66ca4e..c40ba0d1214 100644 --- a/rust-runtime/aws-smithy-cbor/src/encode.rs +++ b/rust-runtime/aws-smithy-cbor/src/encode.rs @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -use aws_smithy_types::{Blob, DateTime}; +use aws_smithy_types::{BigInteger, Blob, DateTime}; /// Macro for delegating method calls to the encoder. /// @@ -126,6 +126,68 @@ impl Encoder { self } + /// Writes a `BigInteger` using preferred serialization per RFC 8949 §3.4.3. + /// + /// Values that fit in a CBOR major type 0 or 1 integer are encoded directly + /// (preferred serialization). Larger values use tag 2 (unsigned bignum) or + /// tag 3 (negative bignum). For tag 3, the byte string encodes `n` where + /// the value is `-1 - n`. + pub fn big_integer(&mut self, value: &BigInteger) -> &mut Self { + use num_bigint::{BigInt, Sign}; + + let n: BigInt = value + .as_ref() + .parse() + .expect("BigInteger contains invalid value"); + let (sign, magnitude) = n.to_bytes_be(); + + match sign { + Sign::Plus | Sign::NoSign => { + // Try preferred serialization as major type 0. + if magnitude.len() <= 8 { + let mut buf = [0u8; 8]; + buf[8 - magnitude.len()..].copy_from_slice(&magnitude); + let val = u64::from_be_bytes(buf); + self.encoder.u64(val).expect(INFALLIBLE_WRITE); + } else { + self.encoder + .tag(minicbor::data::Tag::new(2)) + .expect(INFALLIBLE_WRITE); + // Preferred serialization: strip leading zeroes. + let stripped = strip_leading_zeroes(&magnitude); + self.encoder.bytes(stripped).expect(INFALLIBLE_WRITE); + } + } + Sign::Minus => { + // Tag 3 value = -1 - n, so n = -1 - value = |value| - 1. + let one = BigInt::from(1u8); + let n = (-n) - one; + let (_, n_bytes) = n.to_bytes_be(); + + // Try preferred serialization as major type 1. + if n_bytes.len() <= 8 { + let mut buf = [0u8; 8]; + buf[8 - n_bytes.len()..].copy_from_slice(&n_bytes); + let val = u64::from_be_bytes(buf); + // Use i128 to represent -1 - val without overflow, then + // convert to minicbor::data::Int which covers the full + // CBOR major type 1 range. + let neg = -1i128 - (val as i128); + let int_val = minicbor::data::Int::try_from(neg) + .expect("value fits in CBOR integer range"); + self.encoder.int(int_val).expect(INFALLIBLE_WRITE); + } else { + self.encoder + .tag(minicbor::data::Tag::new(3)) + .expect(INFALLIBLE_WRITE); + let stripped = strip_leading_zeroes(&n_bytes); + self.encoder.bytes(stripped).expect(INFALLIBLE_WRITE); + } + } + } + self + } + /// Writes a blob. Collapses header+data into a single reserve+write. pub fn blob(&mut self, x: &Blob) -> &mut Self { let data = x.as_ref(); @@ -168,9 +230,15 @@ impl Encoder { } } +/// Strips leading zero bytes from a big-endian byte slice. +fn strip_leading_zeroes(bytes: &[u8]) -> &[u8] { + let start = bytes.iter().position(|&b| b != 0).unwrap_or(bytes.len()); + &bytes[start..] +} + #[cfg(test)] mod tests { - use super::Encoder; + use super::*; use aws_smithy_types::Blob; /// Verify our `str()` produces byte-identical output to minicbor's. @@ -293,4 +361,102 @@ mod tests { ); } } + + #[test] + fn preferred_serialization_small_positive() { + // Small values use major type 0 directly, not tag 2. + let mut encoder = Encoder::new(Vec::new()); + encoder.big_integer(&"0".parse().unwrap()); + assert_eq!(encoder.into_writer(), vec![0x00]); // major type 0, value 0 + + let mut encoder = Encoder::new(Vec::new()); + encoder.big_integer(&"23".parse().unwrap()); + assert_eq!(encoder.into_writer(), vec![0x17]); // major type 0, value 23 + + let mut encoder = Encoder::new(Vec::new()); + encoder.big_integer(&"256".parse().unwrap()); + // major type 0, additional info 25 (2-byte), 0x0100 + assert_eq!(encoder.into_writer(), vec![0x19, 0x01, 0x00]); + } + + #[test] + fn preferred_serialization_small_negative() { + // Small negatives use major type 1 directly, not tag 3. + // Major type 1 value = -1 - argument. + let mut encoder = Encoder::new(Vec::new()); + encoder.big_integer(&"-1".parse().unwrap()); + assert_eq!(encoder.into_writer(), vec![0x20]); // -1 = -1-0, argument 0 + + let mut encoder = Encoder::new(Vec::new()); + encoder.big_integer(&"-42".parse().unwrap()); + // -42 = -1-41, argument 41 = 0x29 (major type 1, additional info 24, value 41) + assert_eq!(encoder.into_writer(), vec![0x38, 0x29]); + } + + #[test] + fn preferred_serialization_u64_max() { + // u64::MAX = 18446744073709551615 fits in major type 0. + let mut encoder = Encoder::new(Vec::new()); + encoder.big_integer(&"18446744073709551615".parse().unwrap()); + let bytes = encoder.into_writer(); + assert_eq!(bytes[0], 0x1b); // major type 0, 8-byte argument + assert_eq!( + &bytes[1..], + &[0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff] + ); + } + + #[test] + fn tag2_for_values_exceeding_u64() { + // 2^64 = 18446744073709551616 requires tag 2. + // RFC 8949 Appendix A: 0xc249010000000000000000 + let mut encoder = Encoder::new(Vec::new()); + encoder.big_integer(&"18446744073709551616".parse().unwrap()); + let bytes = encoder.into_writer(); + assert_eq!( + bytes, + vec![0xc2, 0x49, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] + ); + } + + #[test] + fn tag3_negative_bignum_rfc8949_example() { + // RFC 8949 Appendix A: -18446744073709551617 = 0xc349010000000000000000 + // value = -1 - n, n = 18446744073709551616 = 2^64 + let mut encoder = Encoder::new(Vec::new()); + encoder.big_integer(&"-18446744073709551617".parse().unwrap()); + let bytes = encoder.into_writer(); + assert_eq!( + bytes, + vec![0xc3, 0x49, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] + ); + } + + #[test] + fn negative_at_major_type_1_boundary() { + // -18446744073709551616 = -1 - 18446744073709551615 = -1 - u64::MAX + // This fits in major type 1 with 8-byte argument = u64::MAX. + let mut encoder = Encoder::new(Vec::new()); + encoder.big_integer(&"-18446744073709551616".parse().unwrap()); + let bytes = encoder.into_writer(); + assert_eq!(bytes[0], 0x3b); // major type 1, 8-byte argument + assert_eq!( + &bytes[1..], + &[0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff] + ); + } + + #[test] + fn tag2_strips_leading_zeroes() { + // A large number whose big-endian representation has no leading zeroes. + let mut encoder = Encoder::new(Vec::new()); + let large = "123456789012345678901234567890"; + encoder.big_integer(&large.parse().unwrap()); + let bytes = encoder.into_writer(); + assert_eq!(bytes[0], 0xc2); // tag 2 + // Verify the byte string has no leading zero bytes. + // bytes[1] is the CBOR byte string length header. + let payload_start = if bytes[1] < 0x58 { 2 } else { 3 }; + assert_ne!(bytes[payload_start], 0x00); + } } diff --git a/rust-runtime/aws-smithy-checksums/Cargo.toml b/rust-runtime/aws-smithy-checksums/Cargo.toml index 103a8cbf2b5..60de6d1fb0c 100644 --- a/rust-runtime/aws-smithy-checksums/Cargo.toml +++ b/rust-runtime/aws-smithy-checksums/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-checksums" -version = "0.64.8" +version = "0.65.0" authors = [ "AWS Rust SDK Team ", "Zelda Hessler ", @@ -9,7 +9,7 @@ description = "Checksum calculation and verification callbacks" edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/rust-runtime/aws-smithy-compression/Cargo.toml b/rust-runtime/aws-smithy-compression/Cargo.toml index e34b8f930b0..c2aa9adf56f 100644 --- a/rust-runtime/aws-smithy-compression/Cargo.toml +++ b/rust-runtime/aws-smithy-compression/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-compression" -version = "0.1.6" +version = "0.2.0" authors = [ "AWS Rust SDK Team ", "Zelda Hessler ", @@ -9,7 +9,7 @@ description = "Request compression for smithy clients." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/rust-runtime/aws-smithy-dns/Cargo.toml b/rust-runtime/aws-smithy-dns/Cargo.toml index 1bb88aac08a..8a77b76523a 100644 --- a/rust-runtime/aws-smithy-dns/Cargo.toml +++ b/rust-runtime/aws-smithy-dns/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-dns" -version = "0.1.12" +version = "0.2.0" authors = [ "AWS Rust SDK Team ", ] @@ -8,7 +8,7 @@ description = "DNS resolvers for smithy-rs" edition = "2021" license = "Apache-2.0" repository = "https://github.com/awslabs/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] diff --git a/rust-runtime/aws-smithy-eventstream/Cargo.toml b/rust-runtime/aws-smithy-eventstream/Cargo.toml index 7683e53c1e2..2d0f0107be1 100644 --- a/rust-runtime/aws-smithy-eventstream/Cargo.toml +++ b/rust-runtime/aws-smithy-eventstream/Cargo.toml @@ -1,14 +1,12 @@ [package] name = "aws-smithy-eventstream" -# Only patch releases can be made to this runtime crate until https://github.com/smithy-lang/smithy-rs/issues/3370 is resolved -version = "0.60.20" -# +version = "0.61.1" authors = ["AWS Rust SDK Team ", "John DiSanti "] description = "Event stream logic for smithy-rs." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] derive-arbitrary = ["dep:arbitrary", "dep:derive_arbitrary", "arbitrary?/derive"] diff --git a/rust-runtime/aws-smithy-eventstream/src/frame.rs b/rust-runtime/aws-smithy-eventstream/src/frame.rs index a30a2015eee..b084acd3282 100644 --- a/rust-runtime/aws-smithy-eventstream/src/frame.rs +++ b/rust-runtime/aws-smithy-eventstream/src/frame.rs @@ -8,15 +8,13 @@ use crate::buf::count::CountBuf; use crate::buf::crc::{CrcBuf, CrcBufMut}; use crate::error::{Error, ErrorKind}; -use aws_smithy_types::config_bag::{Storable, StoreReplace}; -use aws_smithy_types::event_stream::{Header, HeaderValue, Message}; +pub use aws_smithy_types::event_stream::DeferredSignerSender; +use aws_smithy_types::event_stream::{DeferredSignerReceiver, Header, HeaderValue, Message}; use aws_smithy_types::str_bytes::StrBytes; use aws_smithy_types::DateTime; use bytes::{Buf, BufMut}; -use std::error::Error as StdError; use std::fmt; use std::mem::size_of; -use std::sync::{mpsc, Mutex}; const PRELUDE_LENGTH_BYTES: u32 = 3 * size_of::() as u32; const PRELUDE_LENGTH_BYTES_USIZE: usize = PRELUDE_LENGTH_BYTES as usize; @@ -35,42 +33,7 @@ pub(crate) const TYPE_STRING: u8 = 7; pub(crate) const TYPE_TIMESTAMP: u8 = 8; pub(crate) const TYPE_UUID: u8 = 9; -pub type SignMessageError = Box; - -/// Signs an Event Stream message. -pub trait SignMessage: fmt::Debug { - fn sign(&mut self, message: Message) -> Result; - - /// SigV4 requires an empty last signed message to be sent. - /// Other protocols do not require one. - /// Return `Some(_)` to send a signed last empty message, before completing the stream. - /// Return `None` to not send one and terminate the stream immediately. - fn sign_empty(&mut self) -> Option>; -} - -/// A sender that gets placed in the request config to wire up an event stream signer after signing. -#[derive(Debug)] -#[non_exhaustive] -pub struct DeferredSignerSender(Mutex>>); - -impl DeferredSignerSender { - /// Creates a new `DeferredSignerSender` - fn new(tx: mpsc::Sender>) -> Self { - Self(Mutex::new(tx)) - } - - /// Sends a signer on the channel - pub fn send( - &self, - signer: Box, - ) -> Result<(), mpsc::SendError>> { - self.0.lock().unwrap().send(signer) - } -} - -impl Storable for DeferredSignerSender { - type Storer = StoreReplace; -} +pub use aws_smithy_types::event_stream::{SignMessage, SignMessageError}; /// Deferred event stream signer to allow a signer to be wired up later. /// @@ -89,45 +52,35 @@ impl Storable for DeferredSignerSender { /// for the remainder of the operation. #[derive(Debug)] pub struct DeferredSigner { - rx: Option>>>, + rx: Option, signer: Option>, } impl DeferredSigner { pub fn new() -> (Self, DeferredSignerSender) { - let (tx, rx) = mpsc::channel(); + let (rx, sender) = DeferredSignerSender::new(); ( Self { - rx: Some(Mutex::new(rx)), + rx: Some(rx), signer: None, }, - DeferredSignerSender::new(tx), + sender, ) } fn acquire(&mut self) -> &mut (dyn SignMessage + Send + Sync) { - // Can't use `if let Some(signer) = &mut self.signer` because the borrow checker isn't smart enough - if self.signer.is_some() { - self.signer.as_mut().unwrap().as_mut() - } else { + if self.signer.is_none() { self.signer = Some( self.rx .take() .expect("only taken once") - .lock() - .unwrap() - .try_recv() - .ok() - // TODO(enableNewSmithyRuntimeCleanup): When the middleware implementation is removed, - // this should panic rather than default to the `NoOpSigner`. The reason it defaults - // is because middleware-based generic clients don't have any default middleware, - // so there is no way to send a `NoOpSigner` by default when there is no other - // auth scheme. The orchestrator auth setup is a lot more robust and will make - // this problem trivial. - .unwrap_or_else(|| Box::new(NoOpSigner {}) as _), + .recv::>() + // Fall back to NoOpSigner when no signer is sent (e.g., server-side + // event streams or tests that don't configure signing). + .unwrap_or_else(|_| Box::new(NoOpSigner {}) as _), ); - self.acquire() } + self.signer.as_mut().unwrap().as_mut() } } @@ -780,7 +733,9 @@ mod deferred_signer_tests { let (mut signer, sender) = check_send_sync(DeferredSigner::new()); - sender.send(Box::::default()).expect("success"); + sender + .send(Box::::default() as Box) + .expect("success"); let message = signer.sign(Message::new(Bytes::new())).expect("success"); assert_eq!(1, message.headers()[0].value().as_int32().unwrap()); diff --git a/rust-runtime/aws-smithy-experimental/Cargo.toml b/rust-runtime/aws-smithy-experimental/Cargo.toml index 09e73e38285..48e15b1f435 100644 --- a/rust-runtime/aws-smithy-experimental/Cargo.toml +++ b/rust-runtime/aws-smithy-experimental/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-smithy-experimental" -version = "0.2.4" +version = "0.3.0" authors = ["AWS Rust SDK Team "] description = "Experiments for the smithy-rs ecosystem" edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] crypto-ring = [] diff --git a/rust-runtime/aws-smithy-fuzz/Cargo.toml b/rust-runtime/aws-smithy-fuzz/Cargo.toml index aaf9e7c10d8..18797938080 100644 --- a/rust-runtime/aws-smithy-fuzz/Cargo.toml +++ b/rust-runtime/aws-smithy-fuzz/Cargo.toml @@ -1,13 +1,13 @@ [workspace] [package] name = "aws-smithy-fuzz" -version = "0.1.3" +version = "0.2.0" authors = ["AWS Rust SDK Team "] description = "Fuzzing utilities for smithy-rs servers" edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] afl = "0.15.10" diff --git a/rust-runtime/aws-smithy-http-client/Cargo.toml b/rust-runtime/aws-smithy-http-client/Cargo.toml index bbbb87fef10..24893f90f30 100644 --- a/rust-runtime/aws-smithy-http-client/Cargo.toml +++ b/rust-runtime/aws-smithy-http-client/Cargo.toml @@ -2,11 +2,11 @@ name = "aws-smithy-http-client" authors = ["AWS Rust SDK Team "] description = "HTTP client abstractions for generated smithy clients" -version = "1.1.13" +version = "1.2.0" license = "Apache-2.0" edition = "2021" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] hyper-014 = [ diff --git a/rust-runtime/aws-smithy-http-server-metrics-macro/Cargo.toml b/rust-runtime/aws-smithy-http-server-metrics-macro/Cargo.toml index 60a15ccc30b..7e544c29fd3 100644 --- a/rust-runtime/aws-smithy-http-server-metrics-macro/Cargo.toml +++ b/rust-runtime/aws-smithy-http-server-metrics-macro/Cargo.toml @@ -3,7 +3,7 @@ proc-macro = true [package] name = "aws-smithy-http-server-metrics-macro" -version = "0.1.1" +version = "0.2.0" authors = [ "AWS Rust SDK Team ", "Jason Gin ", @@ -12,7 +12,7 @@ description = "Server metrics via metrique integration." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] syn = { version = "2.0.114", features = ["full"] } diff --git a/rust-runtime/aws-smithy-http-server-metrics/Cargo.toml b/rust-runtime/aws-smithy-http-server-metrics/Cargo.toml index 82d4e2998b0..9dff8baff6c 100644 --- a/rust-runtime/aws-smithy-http-server-metrics/Cargo.toml +++ b/rust-runtime/aws-smithy-http-server-metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-http-server-metrics" -version = "0.1.2" +version = "0.2.0" authors = [ "AWS Rust SDK Team ", "Jason Gin ", @@ -9,7 +9,7 @@ description = "Server metrics via metrique integration." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] aws-smithy-http-server = { path = "../aws-smithy-http-server", features = [ diff --git a/rust-runtime/aws-smithy-http-server-python/Cargo.toml b/rust-runtime/aws-smithy-http-server-python/Cargo.toml index 56c3dd0b035..7cccadc2211 100644 --- a/rust-runtime/aws-smithy-http-server-python/Cargo.toml +++ b/rust-runtime/aws-smithy-http-server-python/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-http-server-python" -version = "0.67.1" +version = "0.68.0" authors = ["Smithy Rust Server "] edition = "2021" license = "Apache-2.0" @@ -11,7 +11,7 @@ description = """ Python server runtime for Smithy Rust Server Framework. """ publish = true -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] aws-smithy-http = { path = "../aws-smithy-http" } diff --git a/rust-runtime/aws-smithy-http-server-typescript/Cargo.toml b/rust-runtime/aws-smithy-http-server-typescript/Cargo.toml index ad583574c43..a232c8940d5 100644 --- a/rust-runtime/aws-smithy-http-server-typescript/Cargo.toml +++ b/rust-runtime/aws-smithy-http-server-typescript/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-http-server-typescript" -version = "0.1.2" +version = "0.2.0" authors = ["Smithy Rust Server "] edition = "2021" license = "Apache-2.0" @@ -11,7 +11,7 @@ description = """ Typescript server runtime for Smithy Rust Server Framework. """ publish = false -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] diff --git a/rust-runtime/aws-smithy-http-server/Cargo.toml b/rust-runtime/aws-smithy-http-server/Cargo.toml index 31c8fa8ab42..fc96223dbe7 100644 --- a/rust-runtime/aws-smithy-http-server/Cargo.toml +++ b/rust-runtime/aws-smithy-http-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-http-server" -version = "0.66.5" +version = "0.67.0" authors = ["Smithy Rust Server "] edition = "2021" license = "Apache-2.0" @@ -11,7 +11,7 @@ description = """ Server runtime for Smithy Rust Server Framework. """ publish = true -rust-version = "1.91.1" +rust-version = "1.94.1" [features] default = [] diff --git a/rust-runtime/aws-smithy-http/Cargo.toml b/rust-runtime/aws-smithy-http/Cargo.toml index e379810ec58..fc3b0429f9d 100644 --- a/rust-runtime/aws-smithy-http/Cargo.toml +++ b/rust-runtime/aws-smithy-http/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-http" -version = "0.63.6" +version = "0.64.0" authors = [ "AWS Rust SDK Team ", "Russell Cohen ", @@ -9,7 +9,7 @@ description = "Smithy HTTP logic for smithy-rs." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] event-stream = ["aws-smithy-eventstream"] diff --git a/rust-runtime/aws-smithy-json/Cargo.toml b/rust-runtime/aws-smithy-json/Cargo.toml index 3b775d1efce..978bd384282 100644 --- a/rust-runtime/aws-smithy-json/Cargo.toml +++ b/rust-runtime/aws-smithy-json/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-smithy-json" -version = "0.62.7" +version = "0.63.0" authors = ["AWS Rust SDK Team ", "John DiSanti "] description = "Token streaming JSON parser for smithy-rs." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] aws-smithy-runtime-api = { path = "../aws-smithy-runtime-api", features = ["client"] } diff --git a/rust-runtime/aws-smithy-legacy-http-server/Cargo.toml b/rust-runtime/aws-smithy-legacy-http-server/Cargo.toml index 10acb4dbcd6..8132b30109f 100644 --- a/rust-runtime/aws-smithy-legacy-http-server/Cargo.toml +++ b/rust-runtime/aws-smithy-legacy-http-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-legacy-http-server" -version = "0.65.15" +version = "0.66.0" authors = ["AWS Rust SDK Team ", "Smithy Rust Server "] edition = "2021" license = "Apache-2.0" @@ -11,7 +11,7 @@ description = """ Legacy server runtime for Smithy Rust Server Framework, providing compatibility for code generated with http 0.x and hyper 0.x dependencies. """ publish = true -rust-version = "1.91.1" +rust-version = "1.94.1" [features] aws-lambda = ["dep:lambda_http"] diff --git a/rust-runtime/aws-smithy-legacy-http/Cargo.toml b/rust-runtime/aws-smithy-legacy-http/Cargo.toml index 1023f7db18d..a793518d428 100644 --- a/rust-runtime/aws-smithy-legacy-http/Cargo.toml +++ b/rust-runtime/aws-smithy-legacy-http/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-legacy-http" -version = "0.62.15" +version = "0.63.0" authors = [ "AWS Rust SDK Team ", "Russell Cohen ", @@ -9,7 +9,7 @@ description = "Smithy HTTP-0x logic for smithy-rs." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] event-stream = ["aws-smithy-eventstream", "aws-smithy-http/event-stream"] diff --git a/rust-runtime/aws-smithy-mocks/Cargo.toml b/rust-runtime/aws-smithy-mocks/Cargo.toml index 32f3d620bf4..a359b5773de 100644 --- a/rust-runtime/aws-smithy-mocks/Cargo.toml +++ b/rust-runtime/aws-smithy-mocks/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-smithy-mocks" -version = "0.2.6" +version = "0.3.0" authors = ["AWS Rust SDK Team "] description = "Testing utilities for smithy-rs generated clients" edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] aws-smithy-types = { path = "../aws-smithy-types" } diff --git a/rust-runtime/aws-smithy-observability-otel/Cargo.toml b/rust-runtime/aws-smithy-observability-otel/Cargo.toml index fd037e32d03..a3228b19746 100644 --- a/rust-runtime/aws-smithy-observability-otel/Cargo.toml +++ b/rust-runtime/aws-smithy-observability-otel/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-observability-otel" -version = "0.1.11" +version = "0.2.0" authors = [ "AWS Rust SDK Team ", ] @@ -8,7 +8,7 @@ description = "Smithy OpenTelemetry observability implementation." edition = "2021" license = "Apache-2.0" repository = "https://github.com/awslabs/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] aws-smithy-observability = { path = "../aws-smithy-observability" } diff --git a/rust-runtime/aws-smithy-observability/Cargo.toml b/rust-runtime/aws-smithy-observability/Cargo.toml index 6654ba1a6e1..12ef4a7ba2d 100644 --- a/rust-runtime/aws-smithy-observability/Cargo.toml +++ b/rust-runtime/aws-smithy-observability/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-observability" -version = "0.2.6" +version = "0.3.0" authors = [ "AWS Rust SDK Team ", ] @@ -8,7 +8,7 @@ description = "Smithy observability implementation." edition = "2021" license = "Apache-2.0" repository = "https://github.com/awslabs/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] aws-smithy-runtime-api = { path = "../aws-smithy-runtime-api" } diff --git a/rust-runtime/aws-smithy-protocol-test/Cargo.toml b/rust-runtime/aws-smithy-protocol-test/Cargo.toml index 67823ec7762..db0185296c5 100644 --- a/rust-runtime/aws-smithy-protocol-test/Cargo.toml +++ b/rust-runtime/aws-smithy-protocol-test/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-smithy-protocol-test" -version = "0.63.14" +version = "0.64.0" authors = ["AWS Rust SDK Team ", "Russell Cohen "] description = "A collection of library functions to validate HTTP requests against Smithy protocol tests." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] default = ["http-02x"] diff --git a/rust-runtime/aws-smithy-query/Cargo.toml b/rust-runtime/aws-smithy-query/Cargo.toml index 284eed0ea3d..2e976f29cb4 100644 --- a/rust-runtime/aws-smithy-query/Cargo.toml +++ b/rust-runtime/aws-smithy-query/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-smithy-query" -version = "0.60.15" +version = "0.61.1" authors = ["AWS Rust SDK Team ", "John DiSanti "] description = "AWSQuery and EC2Query Smithy protocol logic for smithy-rs." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] aws-smithy-types = { path = "../aws-smithy-types", features = ["http-body-1-x"] } diff --git a/rust-runtime/aws-smithy-runtime-api-macros/Cargo.toml b/rust-runtime/aws-smithy-runtime-api-macros/Cargo.toml index ecbb806ae04..a82ad021979 100644 --- a/rust-runtime/aws-smithy-runtime-api-macros/Cargo.toml +++ b/rust-runtime/aws-smithy-runtime-api-macros/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-smithy-runtime-api-macros" -version = "1.0.0" +version = "1.1.0" authors = ["AWS Rust SDK Team "] description = "Proc macros for aws-smithy-runtime-api." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.0" +rust-version = "1.94.1" [lib] proc-macro = true diff --git a/rust-runtime/aws-smithy-runtime-api/Cargo.toml b/rust-runtime/aws-smithy-runtime-api/Cargo.toml index c1e260c55fa..219a096f926 100644 --- a/rust-runtime/aws-smithy-runtime-api/Cargo.toml +++ b/rust-runtime/aws-smithy-runtime-api/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-smithy-runtime-api" -version = "1.12.3" +version = "1.13.0" authors = ["AWS Rust SDK Team ", "Zelda Hessler "] description = "Smithy runtime types." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/rust-runtime/aws-smithy-runtime/Cargo.toml b/rust-runtime/aws-smithy-runtime/Cargo.toml index f3b21d5f661..1be975def00 100644 --- a/rust-runtime/aws-smithy-runtime/Cargo.toml +++ b/rust-runtime/aws-smithy-runtime/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-smithy-runtime" -version = "1.11.3" +version = "1.12.0" authors = ["AWS Rust SDK Team ", "Zelda Hessler "] description = "The new smithy runtime crate" edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/rust-runtime/aws-smithy-schema/Cargo.toml b/rust-runtime/aws-smithy-schema/Cargo.toml index 5b7f1b15ae0..0dce33648d9 100644 --- a/rust-runtime/aws-smithy-schema/Cargo.toml +++ b/rust-runtime/aws-smithy-schema/Cargo.toml @@ -1,12 +1,14 @@ [package] name = "aws-smithy-schema" -version = "0.1.0" +# Note: bumping minor (0.1 -> 0.2) for an MSRV update causes semver hazards +# because aws-config depends on ^0.1. Use patch bumps until stable is released. +version = "0.1.1" authors = ["AWS Rust SDK Team "] description = "Schema types for the smithy-rs ecosystem" edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91" +rust-version = "1.94.1" [dependencies] aws-smithy-runtime-api = { path = "../aws-smithy-runtime-api", features = ["client"] } diff --git a/rust-runtime/aws-smithy-types-convert/Cargo.toml b/rust-runtime/aws-smithy-types-convert/Cargo.toml index 14a8007567e..251e1f45085 100644 --- a/rust-runtime/aws-smithy-types-convert/Cargo.toml +++ b/rust-runtime/aws-smithy-types-convert/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-smithy-types-convert" -version = "0.60.14" +version = "0.61.1" authors = ["AWS Rust SDK Team "] description = "Conversion of types from aws-smithy-types to other libraries." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] convert-chrono = ["aws-smithy-types", "chrono"] diff --git a/rust-runtime/aws-smithy-types/Cargo.toml b/rust-runtime/aws-smithy-types/Cargo.toml index 5fd3cb24e42..e3be38a733d 100644 --- a/rust-runtime/aws-smithy-types/Cargo.toml +++ b/rust-runtime/aws-smithy-types/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-types" -version = "1.4.9" +version = "1.6.0" authors = [ "AWS Rust SDK Team ", "Russell Cohen ", @@ -9,7 +9,7 @@ description = "Types for smithy-rs codegen." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] byte-stream-poll-next = [] @@ -46,7 +46,9 @@ num-integer = "0.1.46" pin-project-lite = "0.2.14" pin-utils = "0.1.0" ryu = "1.0.22" -time = { version = "0.3.4", features = ["parsing"] } +# Upper bound excludes the broken 0.3.48, which has an E0119 coherence regression +# (https://github.com/time-rs/time/issues/783). Relax to "0.3.4" once 0.3.49 ships. +time = { version = ">=0.3.4, <0.3.48", features = ["parsing"] } # ByteStream internals futures-core = { version = "0.3.31", optional = true } diff --git a/rust-runtime/aws-smithy-types/src/date_time/mod.rs b/rust-runtime/aws-smithy-types/src/date_time/mod.rs index c0db26ff114..c05da3ffdb7 100644 --- a/rust-runtime/aws-smithy-types/src/date_time/mod.rs +++ b/rust-runtime/aws-smithy-types/src/date_time/mod.rs @@ -392,9 +392,6 @@ mod test { use crate::date_time::Format; use crate::DateTime; use proptest::proptest; - use std::time::SystemTime; - use time::format_description::well_known::Rfc3339; - use time::OffsetDateTime; #[test] fn test_display_date_time() { @@ -621,9 +618,12 @@ mod test { } // TODO(https://github.com/smithy-lang/smithy-rs/issues/1857) - #[cfg(not(any(target_arch = "powerpc", target_arch = "x86")))] + #[cfg(not(any(target_arch = "powerpc", target_arch = "x86", target_os = "windows")))] #[test] fn system_time_conversions() { + use std::time::SystemTime; + use time::format_description::well_known::Rfc3339; + use time::OffsetDateTime; // Check agreement let date_time = DateTime::from_str("1000-01-02T01:23:10.123Z", Format::DateTime).unwrap(); let off_date_time = OffsetDateTime::parse("1000-01-02T01:23:10.123Z", &Rfc3339).unwrap(); diff --git a/rust-runtime/aws-smithy-types/src/event_stream.rs b/rust-runtime/aws-smithy-types/src/event_stream.rs index 0d98dabd991..0e47a4b9a87 100644 --- a/rust-runtime/aws-smithy-types/src/event_stream.rs +++ b/rust-runtime/aws-smithy-types/src/event_stream.rs @@ -5,8 +5,12 @@ //! Types relevant to event stream serialization/deserialization +use crate::config_bag::{Storable, StoreReplace}; use crate::str_bytes::StrBytes; use bytes::Bytes; +use std::any::Any; +use std::fmt; +use std::sync::{mpsc, Mutex}; mod value { use crate::str_bytes::StrBytes; @@ -201,3 +205,124 @@ impl RawMessage { Self::Invalid(bytes) } } + +/// Error returned when sending a deferred signer fails. +#[derive(Debug)] +pub struct DeferredSignerSendError { + kind: DeferredSignerSendErrorKind, +} + +#[derive(Debug)] +enum DeferredSignerSendErrorKind { + Closed, +} + +impl fmt::Display for DeferredSignerSendError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self.kind { + DeferredSignerSendErrorKind::Closed => f.write_str("receiver was dropped"), + } + } +} + +impl std::error::Error for DeferredSignerSendError {} + +/// Error returned when receiving a deferred signer fails. +#[derive(Debug)] +pub struct DeferredSignerRecvError { + kind: DeferredSignerRecvErrorKind, +} + +#[derive(Debug)] +enum DeferredSignerRecvErrorKind { + NoSigner, +} + +impl fmt::Display for DeferredSignerRecvError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self.kind { + DeferredSignerRecvErrorKind::NoSigner => f.write_str("no signer was available"), + } + } +} + +impl std::error::Error for DeferredSignerRecvError {} + +/// Receiver half of the deferred signer channel. +/// +/// Held internally by a deferred signer implementation to receive the concrete +/// signer once it becomes available after HTTP request signing. +#[derive(Debug)] +pub struct DeferredSignerReceiver { + rx: Mutex>>>, +} + +impl DeferredSignerReceiver { + /// Receives the value sent by the corresponding [`DeferredSignerSender`]. + /// + /// This consumes the receiver's channel on first call. Subsequent calls will + /// return an error. + pub fn recv(&self) -> Result { + let mut rx = self.rx.lock().unwrap(); + rx.take() + .and_then(|r| r.try_recv().ok()) + .and_then(|any| any.downcast::().ok()) + .map(|b| *b) + .ok_or(DeferredSignerRecvError { + kind: DeferredSignerRecvErrorKind::NoSigner, + }) + } +} + +/// Sender for wiring up an event stream message signer after HTTP request signing. +/// +/// During serialization, a [`DeferredSignerSender`] is placed in the config bag. +/// After HTTP signing completes, the auth scheme retrieves it and sends the +/// concrete signer implementation through the channel. +#[derive(Debug)] +pub struct DeferredSignerSender { + tx: Mutex>>, +} + +impl DeferredSignerSender { + /// Creates a new sender/receiver pair. + pub fn new() -> (DeferredSignerReceiver, Self) { + let (tx, rx) = mpsc::channel(); + ( + DeferredSignerReceiver { + rx: Mutex::new(Some(rx)), + }, + Self { tx: Mutex::new(tx) }, + ) + } + + /// Sends a value through the channel. + pub fn send(&self, value: T) -> Result<(), DeferredSignerSendError> { + self.tx + .lock() + .unwrap() + .send(Box::new(value)) + .map_err(|_| DeferredSignerSendError { + kind: DeferredSignerSendErrorKind::Closed, + }) + } +} + +impl Storable for DeferredSignerSender { + type Storer = StoreReplace; +} + +/// An error that occurs when signing an Event Stream message. +pub type SignMessageError = Box; + +/// Signs an Event Stream message. +pub trait SignMessage: fmt::Debug { + /// Signs a message, returning the signed version. + fn sign(&mut self, message: Message) -> Result; + + /// SigV4 requires an empty last signed message to be sent. + /// Other protocols do not require one. + /// Return `Some(_)` to send a signed last empty message, before completing the stream. + /// Return `None` to not send one and terminate the stream immediately. + fn sign_empty(&mut self) -> Option>; +} diff --git a/rust-runtime/aws-smithy-types/src/timeout.rs b/rust-runtime/aws-smithy-types/src/timeout.rs index 0a5d868c71b..aca3d6c932a 100644 --- a/rust-runtime/aws-smithy-types/src/timeout.rs +++ b/rust-runtime/aws-smithy-types/src/timeout.rs @@ -46,8 +46,10 @@ impl CanDisable { } } -impl From for CanDisable { - fn from(value: T) -> Self { +// Keep this concrete (not a blanket `impl From`): a blanket impl can clash with +// `From` impls from other crates and break the build (E0119) on a dependency bump. +impl From for CanDisable { + fn from(value: Duration) -> Self { Self::Set(value) } } diff --git a/rust-runtime/aws-smithy-wasm/Cargo.toml b/rust-runtime/aws-smithy-wasm/Cargo.toml index fbed22a1a8f..b3c9f132102 100644 --- a/rust-runtime/aws-smithy-wasm/Cargo.toml +++ b/rust-runtime/aws-smithy-wasm/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aws-smithy-wasm" -version = "0.1.11" +version = "0.2.0" authors = [ "AWS Rust SDK Team ", "Eduardo Rodrigues <16357187+eduardomourar@users.noreply.github.com>", @@ -10,7 +10,7 @@ description = "Smithy WebAssembly wasip2 configuration for smithy-rs." edition = "2021" license = "Apache-2.0" repository = "https://github.com/awslabs/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] aws-smithy-async = { path = "../aws-smithy-async" } diff --git a/rust-runtime/aws-smithy-xml/Cargo.toml b/rust-runtime/aws-smithy-xml/Cargo.toml index 20e72ccb142..661bf0c95f1 100644 --- a/rust-runtime/aws-smithy-xml/Cargo.toml +++ b/rust-runtime/aws-smithy-xml/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "aws-smithy-xml" -version = "0.60.15" +version = "0.61.1" authors = ["AWS Rust SDK Team ", "Russell Cohen "] description = "XML parsing logic for Smithy protocols." edition = "2021" license = "Apache-2.0" repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [dependencies] xmlparser = "0.13.5" diff --git a/rust-runtime/inlineable/Cargo.toml b/rust-runtime/inlineable/Cargo.toml index 26815829261..d0a17047c14 100644 --- a/rust-runtime/inlineable/Cargo.toml +++ b/rust-runtime/inlineable/Cargo.toml @@ -10,7 +10,7 @@ are to allow this crate to be compilable and testable in isolation, no client co license = "Apache-2.0" publish = false repository = "https://github.com/smithy-lang/smithy-rs" -rust-version = "1.91.1" +rust-version = "1.94.1" [features] # this allows the tests to be excluded from downstream crates to keep dependencies / test times reasonable (e.g. no proptests) diff --git a/rust-runtime/inlineable/src/endpoint_lib/coalesce.rs b/rust-runtime/inlineable/src/endpoint_lib/coalesce.rs index 39a74f5f8f0..c597da9ab81 100644 --- a/rust-runtime/inlineable/src/endpoint_lib/coalesce.rs +++ b/rust-runtime/inlineable/src/endpoint_lib/coalesce.rs @@ -99,7 +99,6 @@ pub(crate) use coalesce; #[cfg(test)] mod test { - use super::*; #[test] fn base_cases() { diff --git a/rust-runtime/inlineable/src/endpoint_lib/ite.rs b/rust-runtime/inlineable/src/endpoint_lib/ite.rs index ab430bb9531..5af4f557a01 100644 --- a/rust-runtime/inlineable/src/endpoint_lib/ite.rs +++ b/rust-runtime/inlineable/src/endpoint_lib/ite.rs @@ -101,7 +101,6 @@ pub(crate) use ite; #[cfg(test)] mod test { - use super::*; #[test] fn base_cases() { diff --git a/rust-toolchain.toml b/rust-toolchain.toml index d6d33819778..9cf4a67c474 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.91.1" +channel = "1.94.1" diff --git a/tools/ci-build/Dockerfile b/tools/ci-build/Dockerfile index 0fe66406f8d..c1da37f7d11 100644 --- a/tools/ci-build/Dockerfile +++ b/tools/ci-build/Dockerfile @@ -6,8 +6,8 @@ # This is the base Docker build image used by CI ARG base_image=public.ecr.aws/amazonlinux/amazonlinux:2023 -ARG rust_stable_version=1.91.1 -ARG rust_nightly_version=nightly-2025-10-18 +ARG rust_stable_version=1.94.1 +ARG rust_nightly_version=nightly-2026-03-20 FROM ${base_image} AS bare_base_image RUN yum -y updateinfo && yum clean all && rm -rf /var/cache/yum @@ -84,6 +84,7 @@ RUN yum -y install --allowerasing \ rustup component add clippy; \ rustup toolchain install ${rust_nightly_version} --component clippy; \ rustup target add x86_64-unknown-linux-musl; \ + rustup target add aarch64-unknown-linux-musl; \ rustup target add wasm32-unknown-unknown; \ rustup target add wasm32-wasip1; \ rustup target add wasm32-wasip2; \ @@ -129,7 +130,7 @@ ARG cargo_deny_version=0.16.4 ARG cargo_udeps_version=0.1.56 ARG cargo_hack_version=0.6.27 ARG cargo_minimal_versions_version=0.1.27 -ARG cargo_check_external_types_version=0.4.0 +ARG cargo_check_external_types_version=0.5.0 ARG maturin_version=1.5.1 ARG wasm_pack_version=0.13.1 ARG cargo_wasmtime_version=38.0.4 diff --git a/tools/ci-build/sdk-lints/Cargo.lock b/tools/ci-build/sdk-lints/Cargo.lock index 0d7e7d37e99..2b4fff2fa86 100644 --- a/tools/ci-build/sdk-lints/Cargo.lock +++ b/tools/ci-build/sdk-lints/Cargo.lock @@ -681,9 +681,9 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "openssl" -version = "0.10.79" +version = "0.10.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf0b434746ee2832f4f0baf10137e1cabb18cbe6912c69e2e33263c45250f542" +checksum = "a45fa2aa886c42762255da344f0a0d313e254066c46aad76f300c3d3da62d967" dependencies = [ "bitflags 2.10.0", "cfg-if", @@ -712,9 +712,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.115" +version = "0.9.116" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "158fe5b292746440aa6e7a7e690e55aeb72d41505e2804c23c6973ad0e9c9781" +checksum = "f28a22dc7140cda5f096e5e7724a6962ca81a7f8bfd2979f9b18c11af56318c4" dependencies = [ "cc", "libc", diff --git a/tools/ci-build/smithy-rs-tool-common/src/retry.rs b/tools/ci-build/smithy-rs-tool-common/src/retry.rs index 9daae8e7796..603e0355035 100644 --- a/tools/ci-build/smithy-rs-tool-common/src/retry.rs +++ b/tools/ci-build/smithy-rs-tool-common/src/retry.rs @@ -6,7 +6,7 @@ use std::error::Error; use std::error::Error as StdError; use std::time::Duration; -use tracing::{error, info}; +use tracing::info; pub type BoxError = Box;