Skip to content

Commit 49090a1

Browse files
committed
Merge remote-tracking branch 'origin/main' into release
2 parents f60c361 + 7408d64 commit 49090a1

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

src/common/src/aws/sdk/kotlin/crt/auth/signing/AwsSigner.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,6 @@ public expect object AwsSigner {
1111
public suspend fun signRequest(request: HttpRequest, config: AwsSigningConfig): HttpRequest
1212

1313
public suspend fun sign(request: HttpRequest, config: AwsSigningConfig): AwsSigningResult
14+
15+
public suspend fun signChunk(chunkBody: ByteArray, prevSignature: ByteArray, config: AwsSigningConfig): AwsSigningResult
1416
}

src/jvm/src/aws/sdk/kotlin/crt/auth/signing/AwsSignerJVM.kt

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ package aws.sdk.kotlin.crt.auth.signing
77

88
import aws.sdk.kotlin.crt.asyncCrtJniCall
99
import aws.sdk.kotlin.crt.auth.credentials.JniCredentialsProvider
10-
import aws.sdk.kotlin.crt.http.HttpRequest
10+
import aws.sdk.kotlin.crt.http.*
1111
import aws.sdk.kotlin.crt.http.from
1212
import aws.sdk.kotlin.crt.http.into
1313
import kotlinx.coroutines.future.await
@@ -50,6 +50,24 @@ public actual object AwsSigner {
5050
AwsSigningResult(signedRequest, jniResult.signature)
5151
}
5252
}
53+
54+
/**
55+
* Signs a body chunk according to the supplied signing configuration
56+
* @param chunkBody the chunk payload to sign
57+
* @param prevSignature the signature of the previous component of the request (either the initial request itself
58+
* for the first chunk or the previous chunk otherwise)
59+
* @param config signing configuration
60+
* @return signing result, which provides access to all signing-related result properties
61+
*/
62+
public actual suspend fun signChunk(chunkBody: ByteArray, prevSignature: ByteArray, config: AwsSigningConfig): AwsSigningResult {
63+
val ktStream = HttpRequestBodyStream.fromByteArray(chunkBody)
64+
val bodyStream = JniRequestBodyStream(ktStream)
65+
return asyncCrtJniCall {
66+
val signFuture = AwsSignerJni.sign(bodyStream, prevSignature, config.into())
67+
val jniResult = signFuture.await()
68+
AwsSigningResult(null, jniResult.signature)
69+
}
70+
}
5371
}
5472

5573
private fun AwsSigningConfig.into(): AwsSigningConfigJni {

0 commit comments

Comments
 (0)