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

fix: update and fix upgraded torusUtils #65

Closed
wants to merge 8 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
40 changes: 20 additions & 20 deletions Package.resolved
Original file line number Diff line number Diff line change
Expand Up @@ -21,29 +21,38 @@
},
{
"package": "CryptoSwift",
"repositoryURL": "https://github.com/krzyzanowskim/CryptoSwift.git",
"repositoryURL": "https://github.com/krzyzanowskim/CryptoSwift",
"state": {
"branch": null,
"revision": "32f641cf24fc7abc1c591a2025e9f2f572648b0f",
"version": "1.7.2"
"revision": "7892a123f7e8d0fe62f9f03728b17bbd4f94df5c",
"version": "1.8.1"
}
},
{
"package": "curvelib.swift",
"repositoryURL": "https://github.com/tkey/curvelib.swift",
"state": {
"branch": null,
"revision": "7dad3bf1793de263f83406c08c18c9316abf082f",
"version": "0.1.2"
}
},
{
"package": "FetchNodeDetails",
"repositoryURL": "https://github.com/torusresearch/fetch-node-details-swift.git",
"state": {
"branch": null,
"revision": "68459eb481c382bfbbe28345b8eb25b3897c7447",
"version": "5.0.0"
"revision": "d591af500f32ce3c88d04af9bb74d746585acfea",
"version": "5.1.0"
}
},
{
"package": "jwt-kit",
"repositoryURL": "https://github.com/vapor/jwt-kit.git",
"state": {
"branch": null,
"revision": "9e929d925434b91857661bcd455d1bd53f00bf22",
"version": "4.13.0"
"revision": "e05513b5aec24f88012b6e3034115b6bc915356a",
"version": "4.13.2"
}
},
{
Expand All @@ -55,31 +64,22 @@
"version": "3.1.0"
}
},
{
"package": "secp256k1",
"repositoryURL": "https://github.com/GigaBitcoin/secp256k1.swift.git",
"state": {
"branch": null,
"revision": "1a14e189def5eaa92f839afdd2faad8e43b61a6e",
"version": "0.12.2"
}
},
{
"package": "swift-crypto",
"repositoryURL": "https://github.com/apple/swift-crypto.git",
"state": {
"branch": null,
"revision": "33a20e650c33f6d72d822d558333f2085effa3dc",
"version": "2.5.0"
"revision": "cc76b894169a3c86b71bac10c78a4db6beb7a9ad",
"version": "3.2.0"
}
},
{
"package": "TorusUtils",
"repositoryURL": "https://github.com/torusresearch/torus-utils-swift.git",
"state": {
"branch": null,
"revision": "61b36686c2def5f2f40d8cb0d5bc3af34559c1d5",
"version": "6.0.1"
"revision": "3fb829e71caa275556a067a1ffa1ca579bafbf8e",
"version": "7.0.1"
}
}
]
Expand Down
6 changes: 3 additions & 3 deletions Package.swift
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
// swift-tools-version:5.2
// swift-tools-version:5.5
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
name: "CustomAuth",
platforms: [
.iOS(.v13), .macOS(.v10_15)
.iOS(.v13)
],
products: [
.library(
name: "CustomAuth",
targets: ["CustomAuth"])
],
dependencies: [
.package(name: "TorusUtils", url: "https://github.com/torusresearch/torus-utils-swift.git", from: "6.0.1"),
.package(name: "TorusUtils", url: "https://github.com/torusresearch/torus-utils-swift.git", from: "7.0.1"),
.package(name: "jwt-kit", url: "https://github.com/vapor/jwt-kit.git", from: "4.13.0"),
.package(name: "JWTDecode", url: "https://github.com/auth0/JWTDecode.swift.git", from: "3.1.0")
],
Expand Down
17 changes: 10 additions & 7 deletions Sources/CustomAuth/CustomAuth.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@ var tsSdkLogType = OSLogType.default
public struct TorusKeyData {
public let torusKey : TorusKey
public var userInfo : [String: Any]

public init(torusKey: TorusKey, userInfo: [String : Any]) {
self.torusKey = torusKey
self.userInfo = userInfo
}
}

/// Provides integration of an iOS app with Torus CustomAuth.
Expand All @@ -44,7 +49,7 @@ open class CustomAuth {
/// - factory: Providng mocking by implementing TDSDKFactoryProtocol.
/// - network: Etherum network to be used.
/// - loglevel: Indicates the log level of this instance. All logs lower than this level will be ignored.
public init(aggregateVerifierType: verifierTypes, aggregateVerifier: String, subVerifierDetails: [SubVerifierDetails], network: TorusNetwork = .legacy(.MAINNET), loglevel: OSLogType = .debug, urlSession: URLSession = URLSession.shared, enableOneKey: Bool = false, networkUrl: String? = nil) {
public init(web3AuthClientId: String , aggregateVerifierType: verifierTypes, aggregateVerifier: String, subVerifierDetails: [SubVerifierDetails], network: TorusNetwork , loglevel: OSLogType = .debug, urlSession: URLSession = URLSession.shared, enableOneKey: Bool = false, networkUrl: String? = nil) {
tsSdkLogType = loglevel
self.networkUrl = networkUrl
self.enableOneKey = enableOneKey
Expand All @@ -66,14 +71,14 @@ open class CustomAuth {
/// - aggregateVerifierType: Type of the verifier. Use `singleLogin` for single providers. Only `singleLogin` and `singleIdVerifier` is supported currently.
/// - aggregateVerifier: Name of the verifier to be used..
/// - subVerifierDetails: Details of each subverifiers to be used.
public convenience init(aggregateVerifierType: verifierTypes, aggregateVerifier: String, subVerifierDetails: [SubVerifierDetails], enableOneKey: Bool = false, networkUrl: String? = nil) {
public convenience init(web3AuthClientId: String , aggregateVerifierType: verifierTypes, aggregateVerifier: String, subVerifierDetails: [SubVerifierDetails], network: TorusNetwork , enableOneKey: Bool = false, networkUrl: String? = nil) {
// let factory = CASDKFactory()
self.init(aggregateVerifierType: aggregateVerifierType, aggregateVerifier: aggregateVerifier, subVerifierDetails: subVerifierDetails, network: .legacy(.MAINNET), loglevel: .debug, enableOneKey: enableOneKey, networkUrl: networkUrl)
self.init(web3AuthClientId: web3AuthClientId, aggregateVerifierType: aggregateVerifierType, aggregateVerifier: aggregateVerifier, subVerifierDetails: subVerifierDetails, network: network, loglevel: .debug, enableOneKey: enableOneKey, networkUrl: networkUrl)
}

public convenience init(aggregateVerifierType: verifierTypes, aggregateVerifier: String, subVerifierDetails: [SubVerifierDetails], loglevel: OSLogType = .debug, enableOneKey: Bool = false, networkUrl: String? = nil) {
public convenience init(web3AuthClientId: String , aggregateVerifierType: verifierTypes, aggregateVerifier: String, subVerifierDetails: [SubVerifierDetails], network: TorusNetwork , loglevel: OSLogType = .debug, enableOneKey: Bool = false, networkUrl: String? = nil) {
// let factory = CASDKFactory()
self.init(aggregateVerifierType: aggregateVerifierType, aggregateVerifier: aggregateVerifier, subVerifierDetails: subVerifierDetails, network: .legacy(.MAINNET), loglevel: loglevel, enableOneKey: enableOneKey, networkUrl: networkUrl)
self.init(web3AuthClientId: web3AuthClientId, aggregateVerifierType: aggregateVerifierType, aggregateVerifier: aggregateVerifier, subVerifierDetails: subVerifierDetails, network: network, loglevel: loglevel, enableOneKey: enableOneKey, networkUrl: networkUrl)
}

/// Retrieve information of Torus nodes from a predefined Etherum contract.
Expand Down Expand Up @@ -218,7 +223,6 @@ open class CustomAuth {
/// - Returns: A promise that resolve with a Dictionary that contain at least `privateKey` and `publicAddress` field..
open func getTorusKey(verifier: String, verifierId: String, idToken: String, userData: [String: Any] = [:]) async throws -> TorusKey {
let extraParams = ["verifier_id": verifierId] as [String: Codable]
let buffer: Data = try! NSKeyedArchiver.archivedData(withRootObject: extraParams, requiringSecureCoding: false)
let verifierParams = VerifierParams(verifier_id: verifierId)
do {
let nodeDetails = try await nodeDetailManager.getNodeDetails(verifier: verifier, verifierID: verifierId)
Expand All @@ -240,7 +244,6 @@ open class CustomAuth {
/// - Returns: A promise that resolve with a Dictionary that contain at least `privateKey` and `publicAddress` field..
open func getAggregateTorusKey(verifier: String, verifierId: String, idToken: String, subVerifierDetails: SubVerifierDetails, userData: [String: Any] = [:]) async throws -> TorusKey {
let extraParams = ["verifieridentifier": verifier, "verifier_id": verifierId, "sub_verifier_ids": [subVerifierDetails.verifier], "verify_params": [["verifier_id": verifierId, "idtoken": idToken]]] as [String: Codable]
let buffer: Data = try! NSKeyedArchiver.archivedData(withRootObject: extraParams, requiringSecureCoding: false)
let hashedOnce = idToken.sha3(.keccak256)

let verifierParams = VerifierParams(verifier_id: verifierId)
Expand Down
8 changes: 4 additions & 4 deletions Sources/CustomAuth/Extension/CASDK+extension.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,11 @@ public enum verifierTypes: String {
// MARK: - torus extension
extension CustomAuth {

open class var notificationCenter: NotificationCenter {
public class var notificationCenter: NotificationCenter {
return NotificationCenter.default
}

open class var notificationQueue: OperationQueue {
public class var notificationQueue: OperationQueue {
return OperationQueue.main
}

Expand Down Expand Up @@ -108,13 +108,13 @@ extension CustomAuth {
return rq
}

open class func handle(url: URL) {
public class func handle(url: URL) {
// CustomAuth.logger.info("Posting notification after Universal link/deep link flow")
let notification = Notification(name: CustomAuth.didHandleCallbackURL, object: nil, userInfo: ["URL": url])
notificationCenter.post(notification)
}

open class func handleError(err: String) {
public class func handleError(err: String) {
// CustomAuth.logger.info("Posting notification after Universal link/deep link flow")
let notification = Notification(name: CustomAuth.didHandleCallbackURL, object: nil, userInfo: ["ERROR": err])
notificationCenter.post(notification)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,11 @@ extension TorusNetwork {
return "https://signer-polygon.tor.us"
case .CELESTE:
return "https://signer-polygon.tor.us"
case let .CUSTOM(path):
default:
return "https://signer.tor.us"
}
case .sapphire(let network) :
switch network {

case .SAPPHIRE_MAINNET:
return "https://signer.tor.us"
case .SAPPHIRE_DEVNET:
Expand Down
30 changes: 15 additions & 15 deletions Tests/CustomAuthTests/CustomAuthTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import JWTDecode
import TorusUtils
import UIKit
import XCTest
import curveSecp256k1

final class MockSDKTest: XCTestCase {
func test_jwtDecodeTest() {
Expand All @@ -11,19 +12,19 @@ final class MockSDKTest: XCTestCase {
print(decodedData)
}

func testGetTorusKey() async {
func testGetTorusKey() async throws {
let expectation = XCTestExpectation(description: "getTorusKey should correctly proxy input and output to/from TorusUtils")

let expectedPrivateKey = fakeData.generatePrivateKey()
let expectedPublicAddress = fakeData.generatePublicKey()
let expectedPrivateKey = try fakeData.generatePrivateKey()
let expectedPublicAddress = try fakeData.generatePublicKey()
let expectedVerifier = fakeData.generateVerifier()
let expectedVerfierId = fakeData.generateRandomEmail(of: 6)

let subVerifier = [SubVerifierDetails(loginProvider: .jwt, clientId: fakeData.generateVerifier(), verifier: expectedVerifier, redirectURL: fakeData.generateVerifier())]
let factory = MockFactory()

// let CustomAuth = CustomAuth(aggregateVerifierType: .singleLogin, aggregateVerifier: expectedVerifier, subVerifierDetails: subVerifiery)
let CustomAuth = CustomAuth(aggregateVerifierType: .singleLogin, aggregateVerifier: expectedVerifier, subVerifierDetails: [])
let CustomAuth = CustomAuth( web3AuthClientId: "", aggregateVerifierType: .singleLogin, aggregateVerifier: expectedVerifier, subVerifierDetails: [], network: .legacy(.MAINNET))
// var mockTorusUtils = CustomAuth.torusUtils as! MockAbstractTorusUtils
var mockTorusUtils = MockTorusUtils()
CustomAuth.torusUtils = mockTorusUtils
Expand All @@ -48,17 +49,17 @@ final class MockSDKTest: XCTestCase {
}
}

func testGetAggregateTorusKey() async {
func testGetAggregateTorusKey() async throws {
let expectation = XCTestExpectation(description: "getAggregateTorusKey should correctly proxy input and output to/from TorusUtils")

let expectedPrivateKey = fakeData.generatePrivateKey()
let expectedPublicAddress = fakeData.generatePublicKey()
let expectedPrivateKey = try fakeData.generatePrivateKey()
let expectedPublicAddress = try fakeData.generatePublicKey()
let expectedVerifier = fakeData.generateVerifier()
let expectedVerfierId = fakeData.generateRandomEmail(of: 6)

let subVerifier = [SubVerifierDetails(loginProvider: .jwt, clientId: fakeData.generateVerifier(), verifier: expectedVerifier, redirectURL: fakeData.generateVerifier())]

let CustomAuth = CustomAuth(aggregateVerifierType: .singleIdVerifier, aggregateVerifier: expectedVerifier, subVerifierDetails: subVerifier)
let CustomAuth = CustomAuth( web3AuthClientId: "", aggregateVerifierType: .singleIdVerifier, aggregateVerifier: expectedVerifier, subVerifierDetails: subVerifier, network: .legacy(.MAINNET))
// var mockTorusUtils = CustomAuth.torusUtils as! MockAbstractTorusUtils
let mockTorusUtils = MockTorusUtils()
CustomAuth.torusUtils = mockTorusUtils
Expand Down Expand Up @@ -96,15 +97,14 @@ class fakeData {
return String.randomString(length: 10)
}

static func generatePrivateKey() -> String {
let privateKey = Data.randomOfLength(32)
return (privateKey?.toHexString())!
static func generatePrivateKey() throws -> String {
let privateKey = curveSecp256k1.SecretKey()
return try privateKey.serialize()
}

static func generatePublicKey() -> String {
let privateKey = Data.randomOfLength(32)!
let publicKey = SECP256K1.privateToPublic(privateKey: privateKey)?.subdata(in: 1 ..< 65)
return publicKey!.toHexString()
static func generatePublicKey() throws -> String {
// drop "04"
return try String(curveSecp256k1.SecretKey().toPublic().serialize(compressed: false).dropFirst(2))
}

static func generateRandomEmail(of length: Int) -> String {
Expand Down
42 changes: 12 additions & 30 deletions Tests/CustomAuthTests/IntegrationTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,26 +23,17 @@ final class IntegrationTests: XCTestCase {
redirectURL: "com.googleusercontent.apps.238941746713-vfap8uumijal4ump28p9jd3lbe6onqt4:/oauthredirect",
browserRedirectURL: "https://scripts.toruswallet.io/redirect.html")

IntegrationTests.sdk = CustomAuth(aggregateVerifierType: .singleLogin, aggregateVerifier: "torus-test-ios-public", subVerifierDetails: [sub], network: .legacy(.CYAN))
IntegrationTests.sdk = CustomAuth(web3AuthClientId: "", aggregateVerifierType: .singleLogin, aggregateVerifier: "torus-test-ios-public", subVerifierDetails: [sub], network: .legacy(.CYAN))
}

func test_getTorusKey() async {
func test_getTorusKey() async throws {
let TORUS_TEST_VERIFIER = "torus-test-health"
// let TORUS_TEST_VERIFIER = "torus-google-dhruv-test"
let exp1 = XCTestExpectation(description: "Should be able to get key")
let email = "[email protected]"
let jwt = try! generateIdToken(email: email)
do {
let data = try await IntegrationTests.sdk?.getTorusKey(verifier: TORUS_TEST_VERIFIER, verifierId: email, idToken: jwt)
let finalKeyDataDict = data!.finalKeyData!
let evmAddress = finalKeyDataDict.evmAddress
XCTAssertEqual(evmAddress, "0x8AA6C8ddCD868873120aA265Fc63E3a2180375BA")
exp1.fulfill()
} catch {
print(error)
XCTFail(error.localizedDescription)
}
wait(for: [exp1], timeout: 15)
let data = try await IntegrationTests.sdk?.getTorusKey(verifier: TORUS_TEST_VERIFIER, verifierId: email, idToken: jwt)
let finalKeyDataDict = data!.finalKeyData!
let evmAddress = finalKeyDataDict.evmAddress
XCTAssertEqual(evmAddress, "0xC615aA03Dd8C9b2dc6F7c43cBDfF2c34bBa47Ec9")
}


Expand All @@ -57,31 +48,22 @@ final class IntegrationTests: XCTestCase {
let TORUS_TEST_AGGREGATE_VERIFIER = "torus-test-health-aggregate";
let HashEnabledVerifier = "torus-test-verifierid-hash";

func test_Sapphire_getTorusKey() async {
func test_Sapphire_getTorusKey() async throws {

let sub = SubVerifierDetails(loginType: .web,
loginProvider: .google,
clientId: "221898609709-obfn3p63741l5333093430j3qeiinaa8.apps.googleusercontent.com",
verifier: "google-lrc",
redirectURL: "com.googleusercontent.apps.238941746713-vfap8uumijal4ump28p9jd3lbe6onqt4:/oauthredirect",
browserRedirectURL: "https://scripts.toruswallet.io/redirect.html")
let sdk = CustomAuth(aggregateVerifierType: .singleLogin, aggregateVerifier: "torus-test-ios-public", subVerifierDetails: [sub], network: .sapphire(.SAPPHIRE_DEVNET))
let sdk = CustomAuth(web3AuthClientId: "", aggregateVerifierType: .singleLogin, aggregateVerifier: "torus-test-ios-public", subVerifierDetails: [sub], network: .sapphire(.SAPPHIRE_DEVNET))


let exp1 = XCTestExpectation(description: "Should be able to get key")
let email = "[email protected]"
let jwt = try! generateIdToken(email: TORUS_TEST_EMAIL)
do {
let data = try await sdk.getTorusKey(verifier: TORUS_TEST_VERIFIER, verifierId: TORUS_TEST_EMAIL, idToken: jwt)
let finalKeyDataDict = data.finalKeyData!
let evmAddress = finalKeyDataDict.evmAddress
XCTAssertEqual(evmAddress, "0x4924F91F5d6701dDd41042D94832bB17B76F316F")
exp1.fulfill()
} catch {
print(error)
XCTFail(error.localizedDescription)
}
wait(for: [exp1], timeout: 15)
let data = try await sdk.getTorusKey(verifier: TORUS_TEST_VERIFIER, verifierId: TORUS_TEST_EMAIL, idToken: jwt)
let finalKeyDataDict = data.finalKeyData!
let evmAddress = finalKeyDataDict.evmAddress
XCTAssertEqual(evmAddress, "0x81001206C06AD09b3611b593aEEd3A607d79871E")
}
}

Expand Down
2 changes: 1 addition & 1 deletion Tests/CustomAuthTests/StubURLProtocolTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public class StubMockTorusUtils: TorusUtils {
return ret
}

override open func generatePrivateKeyData() -> Data? {
open func generatePrivateKeyData() -> Data? {
// empty bytes
// let ret = Data(count: 32)

Expand Down
Loading