Skip to content

Commit

Permalink
feat: Update CC to 55 and adopt E2EI changes [WPB-7126] (#2691) (#2693)
Browse files Browse the repository at this point in the history
* feat: Update CC to 55 and adotp E2EI changes

* Fix according to the review

* CodeStyle fix

* Fix tests

Co-authored-by: boris <[email protected]>
  • Loading branch information
github-actions[bot] and borichellow authored Apr 26, 2024
1 parent 33e8a56 commit 64127a5
Show file tree
Hide file tree
Showing 10 changed files with 102 additions and 71 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -326,14 +326,14 @@ class MLSClientImpl(
return clientId?.let {
WireIdentity(
CryptoQualifiedClientId.fromEncodedString(value.clientId)!!,
value.handle,
value.displayName,
value.domain,
value.certificate,
value.x509Identity?.handle,
value.x509Identity?.displayName,
value.x509Identity?.domain,
value.x509Identity?.certificate,
toDeviceStatus(value.status),
value.thumbprint,
value.serialNumber,
value.notAfter.toLong()
value.x509Identity?.serialNumber,
value.x509Identity?.notAfter?.toLong()
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,35 +78,54 @@ data class CryptoQualifiedClientId(

data class WireIdentity(
val clientId: CryptoQualifiedClientId,
val handle: Handle,
val displayName: String,
val domain: String,
val certificate: String,
val certificate: Certificate?,
val status: CryptoCertificateStatus,
val thumbprint: String,
val serialNumber: String,
val endTimestampSeconds: Long
) {
constructor(
clientId: CryptoQualifiedClientId,
handle: String,
displayName: String,
domain: String,
certificate: String,
status: CryptoCertificateStatus,
thumbprint: String,
serialNumber: String,
endTimestampSeconds: Long
) : this(
clientId = clientId,
handle = Handle.fromString(handle, domain),
displayName = displayName,
domain = domain,
certificate = certificate,
status = status,
thumbprint = thumbprint,
serialNumber = serialNumber,
endTimestampSeconds = endTimestampSeconds
companion object {
@Suppress("LongParameterList")
operator fun invoke(
clientId: CryptoQualifiedClientId,
handle: String?,
displayName: String?,
domain: String?,
certificate: String?,
status: CryptoCertificateStatus,
thumbprint: String?,
serialNumber: String?,
endTimestampSeconds: Long?
): WireIdentity {
@Suppress("ComplexCondition")
val certificateData = if (handle == null || displayName == null || domain == null || certificate == null
|| thumbprint == null || serialNumber == null || endTimestampSeconds == null
) {
null
} else {
Certificate(
Handle.fromString(handle, domain),
displayName,
domain,
certificate,
thumbprint,
serialNumber,
endTimestampSeconds
)
}
return WireIdentity(
clientId = clientId,
certificate = certificateData,
status = status
)
}
}

data class Certificate(
val handle: Handle,
val displayName: String,
val domain: String,
val certificate: String,
val thumbprint: String,
val serialNumber: String,
val endTimestampSeconds: Long
)

// WireIdentity handle format is "{scheme}%40{username}@{domain}"
Expand Down
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ pbandk = "0.14.2"
turbine = "1.1.0"
avs = "9.7.9"
jna = "5.14.0"
core-crypto = "1.0.0-rc.54"
core-crypto = "1.0.0-rc.55"
core-crypto-multiplatform = "0.6.0-rc.3-multiplatform-pre1"
completeKotlin = "1.1.0"
desugar-jdk = "2.0.4"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,16 @@ fun com.wire.kalium.cryptography.DecryptedMessageBundle.toModel(groupID: GroupID
},
commitDelay,
identity?.let { identity ->
E2EIdentity(
identity.clientId,
identity.handle.handle,
identity.displayName,
identity.domain,
identity.certificate,
identity.status,
identity.thumbprint
)
identity.certificate?.let { certificate ->
E2EIdentity(
identity.clientId,
certificate.handle.handle,
certificate.displayName,
certificate.domain,
certificate.certificate,
identity.status,
certificate.thumbprint
)
}
}
)
Original file line number Diff line number Diff line change
Expand Up @@ -123,8 +123,9 @@ internal class MLSConversationsVerificationStatusesHandlerImpl(
val persistedMemberInfo = dbData.members[userId.toDao()]
val isUserVerified = wireIdentity.firstOrNull {
it.status != CryptoCertificateStatus.VALID ||
it.displayName != persistedMemberInfo?.name ||
it.handle.handle != persistedMemberInfo.handle
it.certificate == null ||
it.certificate?.displayName != persistedMemberInfo?.name ||
it.certificate?.handle?.handle != persistedMemberInfo?.handle
} == null
if (!isUserVerified) {
newStatus = VerificationStatus.NOT_VERIFIED
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,14 @@ data class E2eiCertificate(
val endAt: Instant
) {
companion object {
fun fromWireIdentity(identity: WireIdentity, certificateStatusMapper: CertificateStatusMapper): E2eiCertificate =
E2eiCertificate(
status = certificateStatusMapper.toCertificateStatus(identity.status),
serialNumber = identity.serialNumber,
certificateDetail = identity.certificate,
endAt = Instant.fromEpochSeconds(identity.endTimestampSeconds)
)
fun fromWireIdentity(identity: WireIdentity, certificateStatusMapper: CertificateStatusMapper): E2eiCertificate? =
identity.certificate?.let {
E2eiCertificate(
status = certificateStatusMapper.toCertificateStatus(identity.status),
serialNumber = it.serialNumber,
certificateDetail = it.certificate,
endAt = Instant.fromEpochSeconds(it.endTimestampSeconds)
)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,9 @@ class GetE2eiCertificateUseCaseImpl internal constructor(
{ GetE2EICertificateUseCaseResult.Failure },
{
it?.let {
val certificate = E2eiCertificate.fromWireIdentity(it, certificateStatusMapper)
GetE2EICertificateUseCaseResult.Success(certificate)
E2eiCertificate.fromWireIdentity(it, certificateStatusMapper)?.let { certificate ->
GetE2EICertificateUseCaseResult.Success(certificate)
}
} ?: GetE2EICertificateUseCaseResult.NotActivated
}
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,11 @@ fun List<WireIdentity>.getUserCertificateStatus(certificateStatusMapper: Certifi
val certificates = this.map {
E2eiCertificate.fromWireIdentity(it, certificateStatusMapper)
}
return if (certificates.isEmpty()) {
return if (certificates.isEmpty() || certificates.any { it == null }) {
null
} else if (certificates.any { it.status == CertificateStatus.REVOKED }) {
} else if (certificates.any { it!!.status == CertificateStatus.REVOKED }) {
CertificateStatus.REVOKED
} else if (certificates.any { it.status == CertificateStatus.EXPIRED }) {
} else if (certificates.any { it!!.status == CertificateStatus.EXPIRED }) {
CertificateStatus.EXPIRED
} else {
CertificateStatus.VALID
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,9 @@ class GetUserE2eiCertificatesUseCaseImpl internal constructor(
mlsConversationRepository.getUserIdentity(userId).map { identities ->
val result = mutableMapOf<String, E2eiCertificate>()
identities.forEach {
val certificate = E2eiCertificate.fromWireIdentity(it, certificateStatusMapper)
result[it.clientId.value] = certificate
E2eiCertificate.fromWireIdentity(it, certificateStatusMapper)?.let { certificate ->
result[it.clientId.value] = certificate
}
}
result
}.getOrElse(mapOf())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,24 +92,21 @@ import io.ktor.util.decodeBase64Bytes
import io.ktor.util.encodeBase64
import io.mockative.Mock
import io.mockative.any
import io.mockative.eq
import io.mockative.coEvery
import io.mockative.coVerify
import io.mockative.eq
import io.mockative.every
import io.mockative.matchers.EqualsMatcher
import io.mockative.matches
import io.mockative.mock
import io.mockative.once
import io.mockative.twice
import io.mockative.verify
import kotlinx.coroutines.async
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.yield
import kotlinx.datetime.Instant
import kotlin.test.Test
import kotlin.test.assertContentEquals
import kotlin.test.assertEquals
import kotlin.test.assertIs

Expand Down Expand Up @@ -1449,7 +1446,11 @@ class MLSConversationRepositoryTest {
val domain = "domain.com"
val handleWithSchemeAndDomain = "$scheme://%40$handle@$domain"
val groupId = Arrangement.GROUP_ID.value
val wireIdentity = WIRE_IDENTITY.copy(handle = WireIdentity.Handle.fromString(handleWithSchemeAndDomain, domain))
val wireIdentity = WIRE_IDENTITY.copy(
certificate = WIRE_IDENTITY.certificate!!.copy(
handle = WireIdentity.Handle.fromString(handleWithSchemeAndDomain, domain)
)
)
val (_, mlsConversationRepository) = Arrangement(testKaliumDispatcher)
.withGetEstablishedSelfMLSGroupIdReturns(groupId)
.withGetMLSClientSuccessful()
Expand All @@ -1460,9 +1461,9 @@ class MLSConversationRepositoryTest {
// then
result.shouldSucceed() {
it.forEach {
assertEquals(scheme, it.handle.scheme)
assertEquals(handle, it.handle.handle)
assertEquals(domain, it.handle.domain)
assertEquals(scheme, it.certificate?.handle?.scheme)
assertEquals(handle, it.certificate?.handle?.handle)
assertEquals(domain, it.certificate?.handle?.domain)
}
}
}
Expand All @@ -1475,7 +1476,11 @@ class MLSConversationRepositoryTest {
val domain = "domain.com"
val handleWithSchemeAndDomain = "$scheme://%40$handle@$domain"
val groupId = Arrangement.GROUP_ID.value
val wireIdentity = WIRE_IDENTITY.copy(handle = WireIdentity.Handle.fromString(handleWithSchemeAndDomain, domain))
val wireIdentity = WIRE_IDENTITY.copy(
certificate = WIRE_IDENTITY.certificate!!.copy(
handle = WireIdentity.Handle.fromString(handleWithSchemeAndDomain, domain)
)
)
val (_, mlsConversationRepository) = Arrangement(testKaliumDispatcher)
.withGetMLSGroupIdByConversationIdReturns(groupId)
.withGetMLSClientSuccessful()
Expand All @@ -1487,9 +1492,9 @@ class MLSConversationRepositoryTest {
result.shouldSucceed() {
it.values.forEach {
it.forEach {
assertEquals(scheme, it.handle.scheme)
assertEquals(handle, it.handle.handle)
assertEquals(domain, it.handle.domain)
assertEquals(scheme, it.certificate?.handle?.scheme)
assertEquals(handle, it.certificate?.handle?.handle)
assertEquals(domain, it.certificate?.handle?.domain)
}
}
}
Expand Down

0 comments on commit 64127a5

Please sign in to comment.