From 4c782bf75599611db25c359d4dc7403511733915 Mon Sep 17 00:00:00 2001 From: Xinsong Cui Date: Tue, 4 Mar 2025 10:15:24 -0500 Subject: [PATCH 1/7] add support for md5 checksum validation --- runtime/runtime-core/api/runtime-core.api | 1 + .../runtime/config/EnvironmentSetting.kt | 19 +++++++++++++++++++ .../aws/smithy/kotlin/runtime/hashing/Md5.kt | 1 + .../smithy/kotlin/runtime/hashing/Md5JVM.kt | 1 + .../kotlin/runtime/hashing/Md5Native.kt | 4 ++++ 5 files changed, 26 insertions(+) diff --git a/runtime/runtime-core/api/runtime-core.api b/runtime/runtime-core/api/runtime-core.api index 0d5399d430..1c36811265 100644 --- a/runtime/runtime-core/api/runtime-core.api +++ b/runtime/runtime-core/api/runtime-core.api @@ -725,6 +725,7 @@ public final class aws/smithy/kotlin/runtime/hashing/Md5 : aws/smithy/kotlin/run public fun ()V public fun digest ()[B public fun reset ()V + public final fun update (B)V public fun update ([BII)V } diff --git a/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/config/EnvironmentSetting.kt b/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/config/EnvironmentSetting.kt index e5dda44f68..16e87092d1 100644 --- a/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/config/EnvironmentSetting.kt +++ b/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/config/EnvironmentSetting.kt @@ -68,3 +68,22 @@ public inline fun > enumEnvSetting(sysProp: String, envVar: } return EnvironmentSetting(parse, sysProp, envVar) } + +@InternalApi +public inline fun > enumSetEnvSetting(sysProp: String, envVar: String): EnvironmentSetting?> { + val parse = { strValue: String -> + strValue.split(",") + .map { it.trim() } + .filter { it.isNotEmpty() } + .map { enumValue -> + enumValues() + .firstOrNull { it.name.equals(enumValue, ignoreCase = true) } + ?: throw ClientException( + "Value $enumValue is not supported, should be one of ${enumValues().joinToString(", ")}" + ) + } + .toSet() + .takeIf { it.isNotEmpty() } + } + return EnvironmentSetting(parse, sysProp, envVar) +} diff --git a/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/hashing/Md5.kt b/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/hashing/Md5.kt index 176ada4cdb..8e6b946c3f 100644 --- a/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/hashing/Md5.kt +++ b/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/hashing/Md5.kt @@ -18,6 +18,7 @@ public abstract class Md5Base : HashFunction { @InternalApi public expect class Md5() : Md5Base { override fun update(input: ByteArray, offset: Int, length: Int) + public fun update(input: Byte) override fun digest(): ByteArray override fun reset() override val blockSizeBytes: Int diff --git a/runtime/runtime-core/jvm/src/aws/smithy/kotlin/runtime/hashing/Md5JVM.kt b/runtime/runtime-core/jvm/src/aws/smithy/kotlin/runtime/hashing/Md5JVM.kt index 4a1bc6c307..4320067bb1 100644 --- a/runtime/runtime-core/jvm/src/aws/smithy/kotlin/runtime/hashing/Md5JVM.kt +++ b/runtime/runtime-core/jvm/src/aws/smithy/kotlin/runtime/hashing/Md5JVM.kt @@ -11,6 +11,7 @@ import java.security.MessageDigest public actual class Md5 : Md5Base() { private val md = MessageDigest.getInstance("MD5") actual override fun update(input: ByteArray, offset: Int, length: Int): Unit = md.update(input, offset, length) + public actual fun update(input: Byte): Unit = md.update(input) actual override fun digest(): ByteArray = md.digest() actual override fun reset(): Unit = md.reset() } diff --git a/runtime/runtime-core/native/src/aws/smithy/kotlin/runtime/hashing/Md5Native.kt b/runtime/runtime-core/native/src/aws/smithy/kotlin/runtime/hashing/Md5Native.kt index 9614543dad..1cd9db9ef1 100644 --- a/runtime/runtime-core/native/src/aws/smithy/kotlin/runtime/hashing/Md5Native.kt +++ b/runtime/runtime-core/native/src/aws/smithy/kotlin/runtime/hashing/Md5Native.kt @@ -15,6 +15,10 @@ public actual class Md5 actual constructor() : Md5Base() { TODO("Not yet implemented") } + public actual fun update(input: Byte) { + TODO("Not yet implemented") + } + actual override fun digest(): ByteArray { TODO("Not yet implemented") } From f96cb03cbe04f6a90dc5d46c06084a5a5cb29595 Mon Sep 17 00:00:00 2001 From: Xinsong Cui Date: Thu, 13 Mar 2025 18:31:58 -0400 Subject: [PATCH 2/7] add businees metrics --- .../kotlin/runtime/businessmetrics/BusinessMetricsUtils.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtils.kt b/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtils.kt index 0600752a6e..f81ce3c367 100644 --- a/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtils.kt +++ b/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtils.kt @@ -88,8 +88,12 @@ public enum class SmithyBusinessMetric(public override val identifier: String) : GZIP_REQUEST_COMPRESSION("L"), PROTOCOL_RPC_V2_CBOR("M"), SERVICE_ENDPOINT_OVERRIDE("N"), - ACCOUNT_ID_BASED_ENDPOINT("O"), + ACCOUNT_ID_BASED_ENDPOINT("O"), //Should this be Removed?: https://code.amazon.com/packages/AwsDrSeps/blobs/main/--/FEATURES.md + ACCOUNT_ID_MODE_PREFERRED("P"), + ACCOUNT_ID_MODE_DISABLED("Q"), + ACCOUNT_ID_MODE_REQUIRED("R"), SIGV4A_SIGNING("S"), + RESOLVED_ACCOUNT_ID("T"), FLEXIBLE_CHECKSUMS_REQ_CRC32("U"), FLEXIBLE_CHECKSUMS_REQ_CRC32C("V"), FLEXIBLE_CHECKSUMS_REQ_SHA1("X"), From 40ab09aa9b846d3411a232e1709cbe05d7dc914f Mon Sep 17 00:00:00 2001 From: Xinsong Cui Date: Thu, 13 Mar 2025 18:37:02 -0400 Subject: [PATCH 3/7] remove unrelated changes --- runtime/runtime-core/api/runtime-core.api | 1 - .../runtime/config/EnvironmentSetting.kt | 19 ------------------- .../smithy/kotlin/runtime/hashing/Md5JVM.kt | 1 - .../kotlin/runtime/hashing/Md5Native.kt | 4 ---- 4 files changed, 25 deletions(-) diff --git a/runtime/runtime-core/api/runtime-core.api b/runtime/runtime-core/api/runtime-core.api index 1c36811265..0d5399d430 100644 --- a/runtime/runtime-core/api/runtime-core.api +++ b/runtime/runtime-core/api/runtime-core.api @@ -725,7 +725,6 @@ public final class aws/smithy/kotlin/runtime/hashing/Md5 : aws/smithy/kotlin/run public fun ()V public fun digest ()[B public fun reset ()V - public final fun update (B)V public fun update ([BII)V } diff --git a/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/config/EnvironmentSetting.kt b/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/config/EnvironmentSetting.kt index 16e87092d1..e5dda44f68 100644 --- a/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/config/EnvironmentSetting.kt +++ b/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/config/EnvironmentSetting.kt @@ -68,22 +68,3 @@ public inline fun > enumEnvSetting(sysProp: String, envVar: } return EnvironmentSetting(parse, sysProp, envVar) } - -@InternalApi -public inline fun > enumSetEnvSetting(sysProp: String, envVar: String): EnvironmentSetting?> { - val parse = { strValue: String -> - strValue.split(",") - .map { it.trim() } - .filter { it.isNotEmpty() } - .map { enumValue -> - enumValues() - .firstOrNull { it.name.equals(enumValue, ignoreCase = true) } - ?: throw ClientException( - "Value $enumValue is not supported, should be one of ${enumValues().joinToString(", ")}" - ) - } - .toSet() - .takeIf { it.isNotEmpty() } - } - return EnvironmentSetting(parse, sysProp, envVar) -} diff --git a/runtime/runtime-core/jvm/src/aws/smithy/kotlin/runtime/hashing/Md5JVM.kt b/runtime/runtime-core/jvm/src/aws/smithy/kotlin/runtime/hashing/Md5JVM.kt index 4320067bb1..4a1bc6c307 100644 --- a/runtime/runtime-core/jvm/src/aws/smithy/kotlin/runtime/hashing/Md5JVM.kt +++ b/runtime/runtime-core/jvm/src/aws/smithy/kotlin/runtime/hashing/Md5JVM.kt @@ -11,7 +11,6 @@ import java.security.MessageDigest public actual class Md5 : Md5Base() { private val md = MessageDigest.getInstance("MD5") actual override fun update(input: ByteArray, offset: Int, length: Int): Unit = md.update(input, offset, length) - public actual fun update(input: Byte): Unit = md.update(input) actual override fun digest(): ByteArray = md.digest() actual override fun reset(): Unit = md.reset() } diff --git a/runtime/runtime-core/native/src/aws/smithy/kotlin/runtime/hashing/Md5Native.kt b/runtime/runtime-core/native/src/aws/smithy/kotlin/runtime/hashing/Md5Native.kt index 1cd9db9ef1..9614543dad 100644 --- a/runtime/runtime-core/native/src/aws/smithy/kotlin/runtime/hashing/Md5Native.kt +++ b/runtime/runtime-core/native/src/aws/smithy/kotlin/runtime/hashing/Md5Native.kt @@ -15,10 +15,6 @@ public actual class Md5 actual constructor() : Md5Base() { TODO("Not yet implemented") } - public actual fun update(input: Byte) { - TODO("Not yet implemented") - } - actual override fun digest(): ByteArray { TODO("Not yet implemented") } From 94d1b5715c484ddef15fab0d0b1da5b82259fa00 Mon Sep 17 00:00:00 2001 From: Xinsong Cui Date: Thu, 13 Mar 2025 18:37:36 -0400 Subject: [PATCH 4/7] remove unrelated changes --- .../common/src/aws/smithy/kotlin/runtime/hashing/Md5.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/hashing/Md5.kt b/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/hashing/Md5.kt index 8e6b946c3f..176ada4cdb 100644 --- a/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/hashing/Md5.kt +++ b/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/hashing/Md5.kt @@ -18,7 +18,6 @@ public abstract class Md5Base : HashFunction { @InternalApi public expect class Md5() : Md5Base { override fun update(input: ByteArray, offset: Int, length: Int) - public fun update(input: Byte) override fun digest(): ByteArray override fun reset() override val blockSizeBytes: Int From 1f9be98c33c4175ec82f84d5bb81b7f7fedeeef2 Mon Sep 17 00:00:00 2001 From: Xinsong Cui Date: Fri, 14 Mar 2025 10:04:00 -0400 Subject: [PATCH 5/7] update api --- runtime/runtime-core/api/runtime-core.api | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/runtime/runtime-core/api/runtime-core.api b/runtime/runtime-core/api/runtime-core.api index 0d5399d430..d920bcc6c3 100644 --- a/runtime/runtime-core/api/runtime-core.api +++ b/runtime/runtime-core/api/runtime-core.api @@ -104,6 +104,9 @@ public final class aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtil public final class aws/smithy/kotlin/runtime/businessmetrics/SmithyBusinessMetric : java/lang/Enum, aws/smithy/kotlin/runtime/businessmetrics/BusinessMetric { public static final field ACCOUNT_ID_BASED_ENDPOINT Laws/smithy/kotlin/runtime/businessmetrics/SmithyBusinessMetric; + public static final field ACCOUNT_ID_MODE_DISABLED Laws/smithy/kotlin/runtime/businessmetrics/SmithyBusinessMetric; + public static final field ACCOUNT_ID_MODE_PREFERRED Laws/smithy/kotlin/runtime/businessmetrics/SmithyBusinessMetric; + public static final field ACCOUNT_ID_MODE_REQUIRED Laws/smithy/kotlin/runtime/businessmetrics/SmithyBusinessMetric; public static final field FLEXIBLE_CHECKSUMS_REQ_CRC32 Laws/smithy/kotlin/runtime/businessmetrics/SmithyBusinessMetric; public static final field FLEXIBLE_CHECKSUMS_REQ_CRC32C Laws/smithy/kotlin/runtime/businessmetrics/SmithyBusinessMetric; public static final field FLEXIBLE_CHECKSUMS_REQ_SHA1 Laws/smithy/kotlin/runtime/businessmetrics/SmithyBusinessMetric; @@ -115,6 +118,7 @@ public final class aws/smithy/kotlin/runtime/businessmetrics/SmithyBusinessMetri public static final field GZIP_REQUEST_COMPRESSION Laws/smithy/kotlin/runtime/businessmetrics/SmithyBusinessMetric; public static final field PAGINATOR Laws/smithy/kotlin/runtime/businessmetrics/SmithyBusinessMetric; public static final field PROTOCOL_RPC_V2_CBOR Laws/smithy/kotlin/runtime/businessmetrics/SmithyBusinessMetric; + public static final field RESOLVED_ACCOUNT_ID Laws/smithy/kotlin/runtime/businessmetrics/SmithyBusinessMetric; public static final field RETRY_MODE_ADAPTIVE Laws/smithy/kotlin/runtime/businessmetrics/SmithyBusinessMetric; public static final field RETRY_MODE_STANDARD Laws/smithy/kotlin/runtime/businessmetrics/SmithyBusinessMetric; public static final field SERVICE_ENDPOINT_OVERRIDE Laws/smithy/kotlin/runtime/businessmetrics/SmithyBusinessMetric; From 6d6807b139ec8116d3f99e0965a7915afd87a5a5 Mon Sep 17 00:00:00 2001 From: Xinsong Cui Date: Fri, 14 Mar 2025 10:20:57 -0400 Subject: [PATCH 6/7] lint --- .../kotlin/runtime/businessmetrics/BusinessMetricsUtils.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtils.kt b/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtils.kt index f81ce3c367..915d1d39cb 100644 --- a/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtils.kt +++ b/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtils.kt @@ -88,7 +88,7 @@ public enum class SmithyBusinessMetric(public override val identifier: String) : GZIP_REQUEST_COMPRESSION("L"), PROTOCOL_RPC_V2_CBOR("M"), SERVICE_ENDPOINT_OVERRIDE("N"), - ACCOUNT_ID_BASED_ENDPOINT("O"), //Should this be Removed?: https://code.amazon.com/packages/AwsDrSeps/blobs/main/--/FEATURES.md + ACCOUNT_ID_BASED_ENDPOINT("O"), // Should this be Removed?: https://code.amazon.com/packages/AwsDrSeps/blobs/main/--/FEATURES.md ACCOUNT_ID_MODE_PREFERRED("P"), ACCOUNT_ID_MODE_DISABLED("Q"), ACCOUNT_ID_MODE_REQUIRED("R"), From ca3b92b3ecfdcfec95a007e0bc2be67bde5fe480 Mon Sep 17 00:00:00 2001 From: Xinsong Cui Date: Fri, 14 Mar 2025 13:56:22 -0400 Subject: [PATCH 7/7] remove comment --- .../kotlin/runtime/businessmetrics/BusinessMetricsUtils.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtils.kt b/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtils.kt index 915d1d39cb..13a88aea29 100644 --- a/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtils.kt +++ b/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtils.kt @@ -88,7 +88,7 @@ public enum class SmithyBusinessMetric(public override val identifier: String) : GZIP_REQUEST_COMPRESSION("L"), PROTOCOL_RPC_V2_CBOR("M"), SERVICE_ENDPOINT_OVERRIDE("N"), - ACCOUNT_ID_BASED_ENDPOINT("O"), // Should this be Removed?: https://code.amazon.com/packages/AwsDrSeps/blobs/main/--/FEATURES.md + ACCOUNT_ID_BASED_ENDPOINT("O"), ACCOUNT_ID_MODE_PREFERRED("P"), ACCOUNT_ID_MODE_DISABLED("Q"), ACCOUNT_ID_MODE_REQUIRED("R"),