Skip to content

Commit 3ccd89d

Browse files
committed
feat: SFA aggregateVerifier login added.
Signed-off-by: Gaurav Goel <[email protected]>
1 parent 1cce83e commit 3ccd89d

File tree

3 files changed

+54
-21
lines changed

3 files changed

+54
-21
lines changed

app/src/main/java/com/web3auth/app/MainActivity.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ class MainActivity : AppCompatActivity(), AdapterView.OnItemClickListener {
6060

6161
private val gson = Gson()
6262
private var TEST_VERIFIER = "torus-test-health"
63-
private var TORUS_TEST_EMAIL = "[email protected]"
63+
private var TORUS_TEST_EMAIL = "[email protected]"
64+
var TEST_AGGREGRATE_VERIFIER = "torus-aggregate-sapphire-mainnet"
6465

6566
private fun signIn() {
6667
val hintEmailEditText = findViewById<EditText>(R.id.etEmailHint)
@@ -119,7 +120,8 @@ class MainActivity : AppCompatActivity(), AdapterView.OnItemClickListener {
119120
LoginParams(
120121
authConnection = selectedLoginProvider,
121122
authConnectionId = TEST_VERIFIER,
122-
idToken = idToken
123+
idToken = idToken,
124+
groupedAuthConnectionId = TEST_AGGREGRATE_VERIFIER,
123125
), ctx = this
124126
)
125127
loginCompletableFuture.whenComplete { _, error ->

core/src/main/java/com/web3auth/core/Web3Auth.kt

Lines changed: 44 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import com.web3auth.core.types.WEBVIEW_URL
3030
import com.web3auth.core.types.Web3AuthError
3131
import com.web3auth.core.types.Web3AuthOptions
3232
import com.web3auth.core.types.Web3AuthResponse
33+
import com.web3auth.core.types.Web3AuthSubVerifierInfo
3334
import com.web3auth.core.types.WebViewResultCallback
3435
import com.web3auth.session_manager_android.SessionManager
3536
import kotlinx.coroutines.CoroutineScope
@@ -41,9 +42,11 @@ import org.torusresearch.fetchnodedetails.FetchNodeDetails
4142
import org.torusresearch.fetchnodedetails.types.NodeDetails
4243
import org.torusresearch.torusutils.TorusUtils
4344
import org.torusresearch.torusutils.types.VerifierParams
45+
import org.torusresearch.torusutils.types.VerifyParams
4446
import org.torusresearch.torusutils.types.common.SessionToken
4547
import org.torusresearch.torusutils.types.common.TorusKey
4648
import org.torusresearch.torusutils.types.common.TorusOptions
49+
import org.web3j.crypto.Hash
4750
import java.util.Locale
4851
import java.util.concurrent.CompletableFuture
4952

@@ -358,8 +361,25 @@ class Web3Auth(web3AuthOptions: Web3AuthOptions, context: Context) : WebViewResu
358361
isSFA = false
359362
} else {
360363
isSFA = true
364+
loginParams.groupedAuthConnectionId?.let {
365+
if (it.isNullOrEmpty()) {
366+
connect(loginParams, ctx)
367+
} else {
368+
val _loginParams = LoginParams(
369+
AuthConnection.GOOGLE,
370+
authConnectionId = loginParams.groupedAuthConnectionId,
371+
idToken = loginParams.idToken
372+
)
373+
val subVerifierInfoArray = arrayOf(
374+
Web3AuthSubVerifierInfo(
375+
loginParams.authConnectionId.toString(),
376+
idToken = loginParams.idToken.toString()
377+
)
378+
)
379+
connect(_loginParams, ctx, subVerifierInfoArray = subVerifierInfoArray)
380+
}
381+
}
361382
connect(loginParams, ctx) // SFA login
362-
loginParams
363383
}
364384

365385
loginCompletableFuture = CompletableFuture()
@@ -369,9 +389,16 @@ class Web3Auth(web3AuthOptions: Web3AuthOptions, context: Context) : WebViewResu
369389

370390
private fun connect(
371391
loginParams: LoginParams,
372-
ctx: Context
392+
ctx: Context,
393+
subVerifierInfoArray: Array<Web3AuthSubVerifierInfo>? = null,
373394
) {
374-
val torusKey = getTorusKey(loginParams)
395+
val torusKey = subVerifierInfoArray.let {
396+
if (it.isNullOrEmpty()) {
397+
getTorusKey(loginParams)
398+
} else {
399+
getTorusKey(loginParams, it)
400+
}
401+
}
375402

376403
val publicAddress = torusKey.finalKeyData?.walletAddress
377404
val privateKey = if (torusKey.finalKeyData?.privKey?.isEmpty() == true) {
@@ -421,7 +448,8 @@ class Web3Auth(web3AuthOptions: Web3AuthOptions, context: Context) : WebViewResu
421448
}
422449

423450
private fun getTorusKey(
424-
loginParams: LoginParams
451+
loginParams: LoginParams,
452+
subVerifierInfoArray: Array<Web3AuthSubVerifierInfo>? = null
425453
): TorusKey {
426454
lateinit var retrieveSharesResponse: TorusKey
427455

@@ -430,32 +458,38 @@ class Web3Auth(web3AuthOptions: Web3AuthOptions, context: Context) : WebViewResu
430458
nodeDetailManager.getNodeDetails(loginParams.authConnectionId, userId)
431459
.get()
432460

433-
/*loginParams.subVerifierInfoArray?.let {
461+
subVerifierInfoArray?.let {
434462
val aggregateIdTokenSeeds: ArrayList<String> = ArrayList()
435463
val subVerifierIds: ArrayList<String> = ArrayList()
436464
val verifyParams: ArrayList<VerifyParams> = ArrayList()
437465

438-
for(value: TorusSubVerifierInfo in it) {
466+
for (value: Web3AuthSubVerifierInfo in it) {
439467
aggregateIdTokenSeeds.add(value.idToken)
440468
val verifyParam = VerifyParams(userId, value.idToken)
441469
verifyParams.add(verifyParam)
442470
subVerifierIds.add(value.verifier)
443471
}
444472

445473
aggregateIdTokenSeeds.sort()
446-
val verifierParams = VerifierParams(userId.toString(), null,
474+
val verifierParams = VerifierParams(
475+
userId.toString(), null,
447476
subVerifierIds.toTypedArray(), verifyParams.toTypedArray()
448477
)
449478

450-
val aggregateIdToken = Hash.sha3String(java.lang.String.join(29.toChar().toString(), aggregateIdTokenSeeds)).replace("0x", "")
479+
val aggregateIdToken = Hash.sha3String(
480+
java.lang.String.join(
481+
29.toChar().toString(),
482+
aggregateIdTokenSeeds
483+
)
484+
).replace("0x", "")
451485
retrieveSharesResponse = torusUtils.retrieveShares(
452486
nodeDetails.torusNodeEndpoints,
453487
loginParams.authConnectionId.toString(),
454488
verifierParams,
455489
aggregateIdToken,
456490
null
457491
)
458-
} ?: run{
492+
} ?: run {
459493
val verifierParams = VerifierParams(userId.toString(), null, null, null)
460494
retrieveSharesResponse = torusUtils.retrieveShares(
461495
nodeDetails.torusNodeEndpoints,
@@ -464,16 +498,7 @@ class Web3Auth(web3AuthOptions: Web3AuthOptions, context: Context) : WebViewResu
464498
loginParams.idToken.toString(),
465499
null
466500
)
467-
}*/
468-
469-
val verifierParams = VerifierParams(userId.toString(), null, null, null)
470-
retrieveSharesResponse = torusUtils.retrieveShares(
471-
nodeDetails.torusNodeEndpoints,
472-
loginParams.authConnectionId.toString(),
473-
verifierParams,
474-
loginParams.idToken.toString(),
475-
null
476-
)
501+
}
477502

478503
val isUpgraded = retrieveSharesResponse.metadata?.isUpgraded
479504

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.web3auth.core.types
2+
3+
class Web3AuthSubVerifierInfo(
4+
var verifier: String,
5+
var idToken: String
6+
)

0 commit comments

Comments
 (0)