Skip to content

Commit 62cbeb0

Browse files
authored
Update documentWithSignature type to ByteArray and use Base64 encoding in response handling (#73)
1 parent ab69ecc commit 62cbeb0

5 files changed

Lines changed: 22 additions & 15 deletions

File tree

src/main/kotlin/eu/europa/ec/eudi/documentretrieval/ResponseDispatcher.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ sealed interface Consensus : Serializable {
4545
* respond to the request
4646
*/
4747
data class Positive(
48-
val documentWithSignature: List<String>?,
48+
val documentWithSignature: List<ByteArray>?,
4949
val signatureObject: List<String>?,
5050
) : Consensus {
5151
init {

src/main/kotlin/eu/europa/ec/eudi/documentretrieval/internal/response/AuthorizationResponse.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ internal sealed interface AuthorizationResponsePayload : Serializable {
3636
override val nonce: String?,
3737
override val state: String?,
3838
override val clientId: String,
39-
val documentWithSignature: List<String>?,
39+
val documentWithSignature: List<ByteArray>?,
4040
val signatureObject: List<String>?,
4141
) : AuthorizationResponsePayload
4242

src/main/kotlin/eu/europa/ec/eudi/documentretrieval/internal/response/DefaultResponseDispatcher.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import io.ktor.utils.io.*
3030
import kotlinx.serialization.json.*
3131
import java.net.URI
3232
import java.net.URL
33+
import java.util.Base64
3334

3435
/**
3536
* Default implementation of [Dispatcher]
@@ -113,8 +114,8 @@ internal object DirectPostForm {
113114
}
114115

115116
fun of(p: AuthorizationResponsePayload): Map<String, String> {
116-
fun MutableMap<String, String>.putDocumentWithSignature(documentWithSignature: List<String>) {
117-
put(DOCUMENT_WITH_SIGNATURE, documentWithSignature.asParam())
117+
fun MutableMap<String, String>.putDocumentWithSignature(documentWithSignature: List<ByteArray>) {
118+
put(DOCUMENT_WITH_SIGNATURE, documentWithSignature.map { Base64.getEncoder().encode(it).decodeToString() }.asParam())
118119
}
119120

120121
fun MutableMap<String, String>.putSignatureObject(signatureObject: List<String>) {

src/test/kotlin/DocumentRetrievalExample.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import eu.europa.ec.eudi.rqes.SignaturesList
2121
import io.ktor.client.request.*
2222
import io.ktor.client.statement.*
2323
import kotlinx.coroutines.runBlocking
24-
import java.io.ByteArrayInputStream
2524
import java.security.MessageDigest
2625
import java.time.Clock
2726
import java.time.Duration
@@ -74,24 +73,24 @@ fun main() {
7473
}
7574
}.map { it }
7675

77-
// document signing flow starts here, as shown in the Example.kt file
76+
// the document signing flow starts here, as shown in the Example.kt file
7877

79-
// the output of the signing flow is a list of signed documents and a list of signatures
78+
// the output of the signing flow is a list of signed documents and a list of signatures
8079

8180
val signedDocuments =
8281
listOf(
83-
ByteArrayInputStream("signed document".toByteArray()),
82+
"signed document content".toByteArray(),
8483
)
8584
val signatureList = SignaturesList(
8685
listOf(
87-
Signature("signature"),
86+
Signature("signature content"),
8887
),
8988
)
9089

9190
dispatch(
9291
resolution.requestObject,
9392
Consensus.Positive(
94-
documentWithSignature = signedDocuments.map { it.readAllBytes().decodeToString() },
93+
documentWithSignature = signedDocuments,
9594
signatureObject = signatureList.signatures.map { it.value },
9695
),
9796
)

src/test/kotlin/eu/europa/ec/eudi/documentretrieval/response/AuthorizationResponseDispatcherTest.kt

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ import io.ktor.server.response.*
3030
import io.ktor.server.routing.*
3131
import io.ktor.server.testing.*
3232
import kotlinx.coroutines.test.runTest
33+
import java.io.File
3334
import java.net.URI
35+
import java.util.Base64
3436
import kotlin.test.Test
3537
import kotlin.test.assertEquals
3638
import kotlin.test.assertIs
@@ -70,9 +72,14 @@ class AuthorizationResponseDispatcherTest {
7072
clientData = "client data",
7173
)
7274

75+
val signedDocument = File(ClassLoader.getSystemResource("sample.pdf").path).readBytes()
76+
77+
val expectedDocument = Base64.getEncoder().encodeToString(signedDocument)
78+
val expectedSignature = "MIAGCSqAMIACAQExDzANBglghkgBZQMEAgEFADCABgkqhkiGSs4rEsQV4AAAAAAAAA=="
79+
7380
val consensus = Consensus.Positive(
74-
documentWithSignature = listOf("document with signature"),
75-
signatureObject = listOf("signature object"),
81+
documentWithSignature = listOf(signedDocument),
82+
signatureObject = listOf(expectedSignature),
7683
)
7784

7885
testApplication {
@@ -93,8 +100,8 @@ class AuthorizationResponseDispatcherTest {
93100
call.request.headers["Content-Type"],
94101
)
95102
assertEquals(state, stateParam)
96-
assertEquals("[\"document with signature\"]", documentWithSignature)
97-
assertEquals("[\"signature object\"]", signatureObject)
103+
assertEquals("[\"$expectedDocument\"]", documentWithSignature)
104+
assertEquals("[\"$expectedSignature\"]", signatureObject)
98105
assertNotNull(signatureObject)
99106

100107
call.respond(HttpStatusCode.OK)
@@ -116,7 +123,7 @@ class AuthorizationResponseDispatcherTest {
116123
consensus,
117124
)
118125

119-
assertIs<DispatchOutcome>(outcome)
126+
assertIs<DispatchOutcome.Accepted>(outcome)
120127
}
121128
}
122129

0 commit comments

Comments
 (0)