mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2024-12-29 12:28:36 +03:00
cyrpto: Document the SasVerification class
This commit is contained in:
parent
93615ddba9
commit
8089e972a5
2 changed files with 81 additions and 4 deletions
|
@ -203,7 +203,12 @@ internal class QrCodeVerification(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Send out a verification request in a blocking manner */
|
/** Send out a verification request in a blocking manner
|
||||||
|
*
|
||||||
|
* This is useful since the public methods to accept/confirm/cancel the verification
|
||||||
|
* aren't suspendable but sending a request out obviously should be. This bridges the
|
||||||
|
* gap between our suspendable and non-suspendable methods.
|
||||||
|
*/
|
||||||
private fun sendRequest(request: OutgoingVerificationRequest) {
|
private fun sendRequest(request: OutgoingVerificationRequest) {
|
||||||
runBlocking { sender.sendVerificationRequest(request) }
|
runBlocking { sender.sendVerificationRequest(request) }
|
||||||
|
|
||||||
|
|
|
@ -56,16 +56,19 @@ internal class SasVerification(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override val isIncoming: Boolean
|
/** The user ID of the other user that is participating in this verification flow */
|
||||||
get() = !this.inner.weStarted
|
override val otherUserId: String = this.inner.otherUserId
|
||||||
|
|
||||||
|
/** Get the device id of the other user's device participating in this verification flow */
|
||||||
override var otherDeviceId: String?
|
override var otherDeviceId: String?
|
||||||
get() = this.inner.otherDeviceId
|
get() = this.inner.otherDeviceId
|
||||||
@Suppress("UNUSED_PARAMETER")
|
@Suppress("UNUSED_PARAMETER")
|
||||||
set(value) {
|
set(value) {
|
||||||
}
|
}
|
||||||
|
|
||||||
override val otherUserId: String = this.inner.otherUserId
|
/** Did the other side initiate this verification flow */
|
||||||
|
override val isIncoming: Boolean
|
||||||
|
get() = !this.inner.weStarted
|
||||||
|
|
||||||
override var state: VerificationTxState
|
override var state: VerificationTxState
|
||||||
get() {
|
get() {
|
||||||
|
@ -87,23 +90,55 @@ internal class SasVerification(
|
||||||
set(v) {
|
set(v) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Get the unique id of this verification */
|
||||||
override val transactionId: String
|
override val transactionId: String
|
||||||
get() = this.inner.flowId
|
get() = this.inner.flowId
|
||||||
|
|
||||||
|
/** Cancel the verification flow
|
||||||
|
*
|
||||||
|
* This will send out a m.key.verification.cancel event with the cancel
|
||||||
|
* code set to m.user.
|
||||||
|
*
|
||||||
|
* Cancelling the verification request will also cancel the parent VerificationRequest.
|
||||||
|
*
|
||||||
|
* The method turns into a noop, if the verification flow has already been cancelled.
|
||||||
|
* */
|
||||||
override fun cancel() {
|
override fun cancel() {
|
||||||
this.cancelHelper(CancelCode.User)
|
this.cancelHelper(CancelCode.User)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Cancel the verification flow
|
||||||
|
*
|
||||||
|
* This will send out a m.key.verification.cancel event with the cancel
|
||||||
|
* code set to the given CancelCode.
|
||||||
|
*
|
||||||
|
* Cancelling the verification request will also cancel the parent VerificationRequest.
|
||||||
|
*
|
||||||
|
* The method turns into a noop, if the verification flow has already been cancelled.
|
||||||
|
*
|
||||||
|
* @param code The cancel code that should be given as the reason for the cancellation.
|
||||||
|
* */
|
||||||
override fun cancel(code: CancelCode) {
|
override fun cancel(code: CancelCode) {
|
||||||
this.cancelHelper(code)
|
this.cancelHelper(code)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Cancel the verification flow
|
||||||
|
*
|
||||||
|
* This will send out a m.key.verification.cancel event with the cancel
|
||||||
|
* code set to the m.mismatched_sas cancel code.
|
||||||
|
*
|
||||||
|
* Cancelling the verification request will also cancel the parent VerificationRequest.
|
||||||
|
*
|
||||||
|
* The method turns into a noop, if the verification flow has already been cancelled.
|
||||||
|
*/
|
||||||
override fun shortCodeDoesNotMatch() {
|
override fun shortCodeDoesNotMatch() {
|
||||||
this.cancelHelper(CancelCode.MismatchedSas)
|
this.cancelHelper(CancelCode.MismatchedSas)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Is this verification happening over to-device messages */
|
||||||
override fun isToDeviceTransport(): Boolean = this.inner.roomId == null
|
override fun isToDeviceTransport(): Boolean = this.inner.roomId == null
|
||||||
|
|
||||||
|
/** Does the verification flow support showing decimals as the short auth string */
|
||||||
override fun supportsDecimal(): Boolean {
|
override fun supportsDecimal(): Boolean {
|
||||||
// This is ignored anyways, throw it away?
|
// This is ignored anyways, throw it away?
|
||||||
// The spec also mandates that devices support at least decimal and
|
// The spec also mandates that devices support at least decimal and
|
||||||
|
@ -111,25 +146,55 @@ internal class SasVerification(
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Does the verification flow support showing emojis as the short auth string */
|
||||||
override fun supportsEmoji(): Boolean {
|
override fun supportsEmoji(): Boolean {
|
||||||
refreshData()
|
refreshData()
|
||||||
return this.inner.supportsEmoji
|
return this.inner.supportsEmoji
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Confirm that the short authentication code matches on both sides
|
||||||
|
*
|
||||||
|
* This sends a m.key.verification.mac event out, the verification isn't yet
|
||||||
|
* done, we still need to receive such an event from the other side if we haven't
|
||||||
|
* already done so.
|
||||||
|
*
|
||||||
|
* This method is a noop if we're not yet in a presentable state, i.e. we didn't receive
|
||||||
|
* a m.key.verification.key event from the other side or we're cancelled.
|
||||||
|
*/
|
||||||
override fun userHasVerifiedShortCode() {
|
override fun userHasVerifiedShortCode() {
|
||||||
runBlocking { confirm() }
|
runBlocking { confirm() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Accept the verification flow, signaling the other side that we do want to verify
|
||||||
|
*
|
||||||
|
* This sends a m.key.verification.accept event out that is a response to a
|
||||||
|
* m.key.verification.start event from the other side.
|
||||||
|
*
|
||||||
|
* This method is a noop if we send the start event out or if the verification has already
|
||||||
|
* been accepted.
|
||||||
|
*/
|
||||||
override fun acceptVerification() {
|
override fun acceptVerification() {
|
||||||
runBlocking { accept() }
|
runBlocking { accept() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Get the decimal representation of the short auth string
|
||||||
|
*
|
||||||
|
* @return A string of three space delimited numbers that
|
||||||
|
* represent the short auth string or an empty string if we're not yet
|
||||||
|
* in a presentable state.
|
||||||
|
*/
|
||||||
override fun getDecimalCodeRepresentation(): String {
|
override fun getDecimalCodeRepresentation(): String {
|
||||||
val decimals = this.machine.getDecimals(this.inner.otherUserId, this.inner.flowId)
|
val decimals = this.machine.getDecimals(this.inner.otherUserId, this.inner.flowId)
|
||||||
|
|
||||||
return decimals?.joinToString(" ") ?: ""
|
return decimals?.joinToString(" ") ?: ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Get the emoji representation of the short auth string
|
||||||
|
*
|
||||||
|
* @return A list of 7 EmojiRepresentation objects that represent the
|
||||||
|
* short auth string or an empty list if we're not yet in a presentable
|
||||||
|
* state.
|
||||||
|
*/
|
||||||
override fun getEmojiCodeRepresentation(): List<EmojiRepresentation> {
|
override fun getEmojiCodeRepresentation(): List<EmojiRepresentation> {
|
||||||
val emojiIndex = this.machine.getEmojiIndex(this.inner.otherUserId, this.inner.flowId)
|
val emojiIndex = this.machine.getEmojiIndex(this.inner.otherUserId, this.inner.flowId)
|
||||||
|
|
||||||
|
@ -164,6 +229,12 @@ internal class SasVerification(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Send out a verification request in a blocking manner
|
||||||
|
*
|
||||||
|
* This is useful since the public methods to accept/confirm/cancel the verification
|
||||||
|
* aren't suspendable but sending a request out obviously should be. This bridges the
|
||||||
|
* gap between our suspendable and non-suspendable methods.
|
||||||
|
*/
|
||||||
private fun sendRequest(request: OutgoingVerificationRequest) {
|
private fun sendRequest(request: OutgoingVerificationRequest) {
|
||||||
runBlocking { sender.sendVerificationRequest(request) }
|
runBlocking { sender.sendVerificationRequest(request) }
|
||||||
|
|
||||||
|
@ -171,6 +242,7 @@ internal class SasVerification(
|
||||||
dispatchTxUpdated()
|
dispatchTxUpdated()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Fetch fresh data from the Rust side for our verification flow */
|
||||||
private fun refreshData() {
|
private fun refreshData() {
|
||||||
when (val verification = this.machine.getVerification(this.inner.otherUserId, this.inner.flowId)) {
|
when (val verification = this.machine.getVerification(this.inner.otherUserId, this.inner.flowId)) {
|
||||||
is Verification.SasV1 -> {
|
is Verification.SasV1 -> {
|
Loading…
Reference in a new issue