Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(e2ei): add E2EIEnroll usecase (WPB-370) #1833

Merged
merged 73 commits into from
Jul 18, 2023
Merged
Show file tree
Hide file tree
Changes from 65 commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
6c0fc96
feat(e2ei): add E2EIClient provider
mchenani May 9, 2023
aba6db1
Merge branch 'develop' into feat/e2ei/expose_e2eiclient
mchenani May 10, 2023
116e026
feat(e2ei): e2eiEnrolUseCase
mchenani May 11, 2023
ae658c9
Merge branch 'develop' of https://github.com/wireapp/kalium into feat…
mchenani May 11, 2023
03db16d
Merge branch 'develop' of https://github.com/wireapp/kalium into feat…
mchenani May 11, 2023
ea743fe
Merge branch 'develop' of https://github.com/wireapp/kalium into feat…
mchenani May 11, 2023
a8e402c
Merge branch 'develop' of https://github.com/wireapp/kalium into feat…
mchenani May 12, 2023
10222e3
init mls client with E2EI certificate
mchenani May 19, 2023
615c4d3
Merge branch 'develop' of https://github.com/wireapp/kalium into feat…
mchenani May 19, 2023
71df27d
update cc to 0.9.1
mchenani May 19, 2023
8384f62
update cc to 0.9.1
mchenani May 19, 2023
d1bfdf3
Merge branch 'develop' of https://github.com/wireapp/kalium into feat…
mchenani May 19, 2023
b963fe0
change cc credentials type to BASIC
mchenani May 19, 2023
e0b957d
Merge branch 'develop' of https://github.com/wireapp/kalium into feat…
mchenani May 22, 2023
17e9438
expose EnrolE2EIUseCase
mchenani May 22, 2023
fbd933d
temp remove self-usecase from e2ei provider
mchenani May 23, 2023
8a05a5c
Merge branch 'develop' of https://github.com/wireapp/kalium into feat…
mchenani May 26, 2023
27eccb0
Merge remote-tracking branch 'origin/feat/e2ei/e2ei_usecase' into fea…
mchenani May 26, 2023
5f24bb9
update cc to 0.10.0
mchenani May 26, 2023
cee8200
apply cc 0.10.0 changes
mchenani May 26, 2023
5bcaefa
update cc to 0.11.0
mchenani Jun 2, 2023
fa92ed4
Merge branch 'develop' of https://github.com/wireapp/kalium into feat…
mchenani Jun 2, 2023
179957d
Merge branch 'develop' of https://github.com/wireapp/kalium into feat…
mchenani Jun 5, 2023
9467b05
update access token
mchenani Jun 5, 2023
8da85b6
Merge remote-tracking branch 'origin/feat/e2ei/e2ei_usecase' into fea…
mchenani Jun 5, 2023
377c137
pass access token url to CC
mchenani Jun 6, 2023
0e7858c
Revert "pass access token url to CC"
mchenani Jun 6, 2023
26cfa97
remove unneeded functions
mchenani Jun 6, 2023
0ee0e80
remove unneeded functions
mchenani Jun 6, 2023
5361294
remove unneeded functions
mchenani Jun 6, 2023
fe011fd
alter htu value with hardcoded one
mchenani Jun 7, 2023
58b2b58
Merge remote-tracking branch 'origin/feat/e2ei/e2ei_usecase' into fea…
mchenani Jun 7, 2023
9235894
Merge branch 'develop' of https://github.com/wireapp/kalium into feat…
mchenani Jun 7, 2023
f4e17dc
add E2EIClient tests
mchenani Jun 8, 2023
8ef3adf
refactor file places
mchenani Jun 8, 2023
093259c
add e2eiQualifiedClientID tests
mchenani Jun 8, 2023
a867d11
Merge branch 'develop' of https://github.com/wireapp/kalium into feat…
mchenani Jun 15, 2023
65795a6
wip
mchenani Jun 15, 2023
8ad4fc8
add certificate to logs
mchenani Jun 15, 2023
7fafe3e
Merge remote-tracking branch 'origin/feat/e2ei/e2ei_usecase' into fea…
mchenani Jun 15, 2023
acf36cc
add certificate dialog
mchenani Jun 15, 2023
dd18428
Merge branch 'develop' of https://github.com/wireapp/kalium into feat…
mchenani Jun 15, 2023
da5ff58
Merge branch 'develop' of https://github.com/wireapp/kalium into feat…
mchenani Jun 16, 2023
76d28d8
Merge remote-tracking branch 'origin/feat/e2ei/e2ei_usecase' into fea…
mchenani Jun 16, 2023
6f69d1f
test(acme-api): cover all amceApi functions
mchenani Jun 19, 2023
b495406
Merge branch 'develop' of https://github.com/wireapp/kalium into feat…
mchenani Jun 19, 2023
b7f600b
Merge remote-tracking branch 'origin/feat/e2ei/e2ei_usecase' into fea…
mchenani Jun 19, 2023
6d419c5
test(e2ei): add tests for e2eiRepository
mchenani Jun 20, 2023
a918792
Merge remote-tracking branch 'origin/feat/e2ei/e2ei_usecase' into fea…
mchenani Jun 20, 2023
195eb7f
test(e2ei): add tests for e2eiRepository
mchenani Jun 21, 2023
ada80dc
wip
mchenani Jun 22, 2023
665fe22
Merge remote-tracking branch 'origin/feat/e2ei/e2ei_usecase' into fea…
mchenani Jun 22, 2023
a03ecce
test(e2ei): add tests for e2ei usecase
mchenani Jun 23, 2023
5697db5
Merge remote-tracking branch 'origin/feat/e2ei/e2ei_usecase' into fea…
mchenani Jun 23, 2023
32863ca
Merge branch 'develop' of https://github.com/wireapp/kalium into feat…
mchenani Jun 27, 2023
a373149
chore: remove unneeded codes
mchenani Jun 27, 2023
389143e
chore: refactor e2ei usecase
mchenani Jun 27, 2023
1e4b453
fix missing issues
mchenani Jun 27, 2023
beada7f
fix detekt
mchenani Jun 27, 2023
c2aac39
fix detekt
mchenani Jun 27, 2023
1822bc5
Merge branch 'develop' into feat/e2ei/e2ei_usecase
mchenani Jun 27, 2023
2b02cfd
apply review comments
mchenani Jun 27, 2023
dd33eb6
Merge remote-tracking branch 'origin/feat/e2ei/e2ei_usecase' into fea…
mchenani Jun 27, 2023
3106cc1
chore: add documentations on the UseCase
mchenani Jun 27, 2023
3608ad7
chore: apply review comments
mchenani Jun 28, 2023
7b12f78
fix missing return types in e2ei in apple.main codes
mchenani Jun 28, 2023
77fe896
fix naming
mchenani Jun 28, 2023
5cbc7d1
Merge branch 'develop' of https://github.com/wireapp/kalium into feat…
mchenani Jun 28, 2023
18d6200
replace self user
mchenani Jun 28, 2023
9056e52
revert unneeded changes
mchenani Jun 28, 2023
5700bb7
Merge branch 'develop' of https://github.com/wireapp/kalium into feat…
mchenani Jul 3, 2023
90e8dd2
Merge branch 'develop' of https://github.com/wireapp/kalium into feat…
mchenani Jul 13, 2023
0a8123b
Merge branch 'develop' into feat/e2ei/e2ei_usecase
mchenani Jul 18, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ class E2EIClientImpl : E2EIClient {
TODO("Not yet implemented")
}

override fun createDpopToken(accessTokenUrl: String, backendNonce: String): DpopToken {
override fun createDpopToken(backendNonce: String): DpopToken {
TODO("Not yet implemented")
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,11 @@ actual class MLSClientImpl actual constructor(
return toByteArray(coreCrypto.exportSecretKey(toUByteList(groupId.decodeBase64Bytes()), keyLength))
}

override fun newAcmeEnrollment(clientId: CryptoQualifiedClientId, displayName: String, handle: String): E2EIClient {
override fun newAcmeEnrollment(clientId: E2EIQualifiedClientId, displayName: String, handle: String): E2EIClient {
TODO("Not yet implemented")
}

override fun initMLSWithE2EI(e2eiClient: E2EIClient, certificate: CertificateChain) {
TODO("Not yet implemented")
}

Expand Down Expand Up @@ -275,7 +279,8 @@ actual class MLSClientImpl actual constructor(
value.message?.let { toByteArray(it) },
value.commitDelay?.toLong(),
value.senderClientId?.let { CryptoQualifiedClientId.fromEncodedString((toByteArray(it).commonToUtf8String())) },
value.hasEpochChanged
value.hasEpochChanged,
identity = null
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import com.wire.kalium.cryptography.MLSClientImpl.Companion.toUByteList
@Suppress("TooManyFunctions")
@OptIn(ExperimentalUnsignedTypes::class)
class E2EIClientImpl(
private val wireE2eIdentity: WireE2eIdentity
val wireE2eIdentity: WireE2eIdentity
) : E2EIClient {

private val defaultDPoPTokenExpiry: UInt = 30U
Expand All @@ -50,7 +50,7 @@ class E2EIClientImpl(
override fun setAuthzResponse(authz: JsonRawData) =
toNewAcmeAuthz(wireE2eIdentity.newAuthzResponse(toUByteList(authz)))

override fun createDpopToken(accessTokenUrl: String, backendNonce: String) =
override fun createDpopToken(backendNonce: String) =
wireE2eIdentity.createDpopToken(expirySecs = defaultDPoPTokenExpiry, backendNonce)

override fun getNewDpopChallengeRequest(accessToken: String, previousNonce: String) =
Expand All @@ -65,16 +65,14 @@ class E2EIClientImpl(
override fun checkOrderRequest(orderUrl: String, previousNonce: String) =
toByteArray(wireE2eIdentity.checkOrderRequest(orderUrl, previousNonce))

override fun checkOrderResponse(order: JsonRawData) {
override fun checkOrderResponse(order: JsonRawData) =
wireE2eIdentity.checkOrderResponse(toUByteList(order))
}

override fun finalizeRequest(previousNonce: String) =
toByteArray(wireE2eIdentity.finalizeRequest(previousNonce))

override fun finalizeResponse(finalize: JsonRawData) {
override fun finalizeResponse(finalize: JsonRawData) =
wireE2eIdentity.finalizeResponse(toUByteList(finalize))
}

override fun certificateRequest(previousNonce: String) =
toByteArray(wireE2eIdentity.certificateRequest(previousNonce))
Expand All @@ -86,7 +84,7 @@ class E2EIClientImpl(

fun toNewAcmeOrder(value: com.wire.crypto.NewAcmeOrder) = NewAcmeOrder(
value.delegate.toUByteArray().asByteArray(),
value.authorizations,
value.authorizations
)

private fun toAcmeChallenge(value: com.wire.crypto.AcmeChallenge) = AcmeChallenge(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -176,12 +176,18 @@ actual class MLSClientImpl actual constructor(
}

override fun encryptMessage(groupId: MLSGroupId, message: PlainMessage): ApplicationMessage {
val applicationMessage = coreCrypto.encryptMessage(toUByteList(groupId.decodeBase64Bytes()), toUByteList(message))
val applicationMessage =
coreCrypto.encryptMessage(toUByteList(groupId.decodeBase64Bytes()), toUByteList(message))
return toByteArray(applicationMessage)
}

override fun decryptMessage(groupId: MLSGroupId, message: ApplicationMessage): DecryptedMessageBundle {
return toDecryptedMessageBundle(coreCrypto.decryptMessage(toUByteList(groupId.decodeBase64Bytes()), toUByteList(message)))
return toDecryptedMessageBundle(
coreCrypto.decryptMessage(
toUByteList(groupId.decodeBase64Bytes()),
toUByteList(message)
)
)
}

override fun commitAccepted(groupId: MLSGroupId) {
Expand Down Expand Up @@ -237,7 +243,7 @@ actual class MLSClientImpl actual constructor(
return toByteArray(coreCrypto.exportSecretKey(toUByteList(groupId.decodeBase64Bytes()), keyLength))
}

override fun newAcmeEnrollment(clientId: CryptoQualifiedClientId, displayName: String, handle: String): E2EIClient {
override fun newAcmeEnrollment(clientId: E2EIQualifiedClientId, displayName: String, handle: String): E2EIClient {
return E2EIClientImpl(
coreCrypto.e2eiNewEnrollment(
clientId.toString(),
Expand All @@ -249,6 +255,10 @@ actual class MLSClientImpl actual constructor(
)
}

override fun initMLSWithE2EI(e2eiClient: E2EIClient, certificate: CertificateChain) {
coreCrypto.e2eiMlsInit((e2eiClient as E2EIClientImpl).wireE2eIdentity, certificate)
}

companion object {
fun toUByteList(value: ByteArray): List<UByte> = value.asUByteArray().asList()
fun toUByteList(value: String): List<UByte> = value.encodeToByteArray().asUByteArray().asList()
Expand Down Expand Up @@ -293,7 +303,10 @@ actual class MLSClientImpl actual constructor(
value.message?.let { toByteArray(it) },
value.commitDelay?.toLong(),
value.senderClientId?.let { CryptoQualifiedClientId.fromEncodedString(String(toByteArray(it))) },
value.hasEpochChanged
value.hasEpochChanged,
value.identity?.let {
E2EIdentity(it.clientId, it.handle, it.displayName, it.domain)
}
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,13 @@ interface E2EIClient {
fun setOrderResponse(order: JsonRawData): NewAcmeOrder
fun getNewAuthzRequest(url: String, previousNonce: String): JsonRawData
fun setAuthzResponse(authz: JsonRawData): NewAcmeAuthz
fun createDpopToken(accessTokenUrl: String, backendNonce: String): DpopToken
fun createDpopToken(backendNonce: String): DpopToken
fun getNewDpopChallengeRequest(accessToken: String, previousNonce: String): JsonRawData
fun getNewOidcChallengeRequest(idToken: String, previousNonce: String): JsonRawData
fun setChallengeResponse(challenge: JsonRawData)
fun checkOrderRequest(orderUrl: String, previousNonce: String): JsonRawData
fun checkOrderResponse(order: JsonRawData)
fun checkOrderResponse(order: JsonRawData): String
fun finalizeRequest(previousNonce: String): JsonRawData
fun finalizeResponse(finalize: JsonRawData)
fun finalizeResponse(finalize: JsonRawData): String
fun certificateRequest(previousNonce: String): JsonRawData
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@

package com.wire.kalium.cryptography

import io.ktor.util.encodeBase64

typealias MLSGroupId = String

data class CryptoClientId(val value: String) {
Expand Down Expand Up @@ -69,3 +71,17 @@ data class CryptoQualifiedClientId(
}
}
}

data class E2EIdentity(
var clientId: String,
var handle: String,
var displayName: String,
var domain: String
)

data class E2EIQualifiedClientId(
val value: String,
val userId: CryptoQualifiedID
) {
override fun toString() = "${userId.value.encodeBase64()}:${value}@${userId.domain}"
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ typealias HandshakeMessage = ByteArray
typealias ApplicationMessage = ByteArray
typealias PlainMessage = ByteArray
typealias MLSKeyPackage = ByteArray
typealias CertificateChain = String

enum class GroupInfoEncryptionType {
PLAINTEXT,
Expand Down Expand Up @@ -53,7 +54,8 @@ class DecryptedMessageBundle(
val message: ByteArray?,
val commitDelay: Long?,
val senderClientId: CryptoQualifiedClientId?,
val hasEpochChanged: Boolean
val hasEpochChanged: Boolean,
val identity: E2EIdentity?
)

@JvmInline
Expand Down Expand Up @@ -273,10 +275,12 @@ interface MLSClient {
* @return wire end to end identity client
*/
fun newAcmeEnrollment(
clientId: CryptoQualifiedClientId,
clientId: E2EIQualifiedClientId,
displayName: String,
handle: String
): E2EIClient

fun initMLSWithE2EI(e2eiClient: E2EIClient, certificate: CertificateChain)
}

expect class MLSClientImpl(rootDir: String, databaseKey: MlsDBSecret, clientId: CryptoQualifiedClientId) : MLSClient
Loading