From 0e5f0186d0b63fa32b396d26839ee95ba459dea1 Mon Sep 17 00:00:00 2001 From: Bartosz Rozwarski Date: Tue, 5 Jul 2022 10:32:11 +0200 Subject: [PATCH 1/2] fix bug in encoder --- Sources/WalletConnectRelay/ClientAuth/JWT/JWT+Claims.swift | 1 + Sources/WalletConnectRelay/ClientAuth/JWT/JWT+Header.swift | 1 + Tests/RelayerTests/AuthTests/JWTTests.swift | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Sources/WalletConnectRelay/ClientAuth/JWT/JWT+Claims.swift b/Sources/WalletConnectRelay/ClientAuth/JWT/JWT+Claims.swift index 0d7b9a6ac..5fb9a9412 100644 --- a/Sources/WalletConnectRelay/ClientAuth/JWT/JWT+Claims.swift +++ b/Sources/WalletConnectRelay/ClientAuth/JWT/JWT+Claims.swift @@ -10,6 +10,7 @@ extension JWT { func encode() throws -> String { let jsonEncoder = JSONEncoder() + jsonEncoder.outputFormatting = .withoutEscapingSlashes jsonEncoder.dateEncodingStrategy = .secondsSince1970 let data = try jsonEncoder.encode(self) return JWTEncoder.base64urlEncodedString(data: data) diff --git a/Sources/WalletConnectRelay/ClientAuth/JWT/JWT+Header.swift b/Sources/WalletConnectRelay/ClientAuth/JWT/JWT+Header.swift index ece23914c..eace4116f 100644 --- a/Sources/WalletConnectRelay/ClientAuth/JWT/JWT+Header.swift +++ b/Sources/WalletConnectRelay/ClientAuth/JWT/JWT+Header.swift @@ -13,6 +13,7 @@ extension JWT { func encode() throws -> String { let jsonEncoder = JSONEncoder() jsonEncoder.dateEncodingStrategy = .secondsSince1970 + jsonEncoder.outputFormatting = .withoutEscapingSlashes let data = try jsonEncoder.encode(self) return JWTEncoder.base64urlEncodedString(data: data) } diff --git a/Tests/RelayerTests/AuthTests/JWTTests.swift b/Tests/RelayerTests/AuthTests/JWTTests.swift index 25dde52d4..e18e57f4a 100644 --- a/Tests/RelayerTests/AuthTests/JWTTests.swift +++ b/Tests/RelayerTests/AuthTests/JWTTests.swift @@ -3,7 +3,7 @@ import XCTest @testable import WalletConnectRelay final class JWTTests: XCTestCase { - let expectedJWT = "eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE2NTY5MTAwOTcsImV4cCI6MTY1Njk5NjQ5NywiaXNzIjoiZGlkOmtleTp6Nk1rb2RIWnduZVZSU2h0YUxmOEpLWWt4cERHcDF2R1pucEdtZEJwWDhNMmV4eEgiLCJzdWIiOiJjNDc5ZmU1ZGM0NjRlNzcxZTc4YjE5M2QyMzlhNjViNThkMjc4Y2FkMWMzNGJmYjBiNTcxNmU1YmI1MTQ5MjhlIiwiYXVkIjoid3NzOlwvXC9yZWxheS53YWxsZXRjb25uZWN0LmNvbSJ9.0JkxOM-FV21U7Hk-xycargj_qNRaYV2H5HYtE4GzAeVQYiKWj7YySY5AdSqtCgGzX4Gt98XWXn2kSr9rE1qvCA" + let expectedJWT = "eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE2NTY5MTAwOTcsImV4cCI6MTY1Njk5NjQ5NywiaXNzIjoiZGlkOmtleTp6Nk1rb2RIWnduZVZSU2h0YUxmOEpLWWt4cERHcDF2R1pucEdtZEJwWDhNMmV4eEgiLCJzdWIiOiJjNDc5ZmU1ZGM0NjRlNzcxZTc4YjE5M2QyMzlhNjViNThkMjc4Y2FkMWMzNGJmYjBiNTcxNmU1YmI1MTQ5MjhlIiwiYXVkIjoid3NzOi8vcmVsYXkud2FsbGV0Y29ubmVjdC5jb20ifQ.0JkxOM-FV21U7Hk-xycargj_qNRaYV2H5HYtE4GzAeVQYiKWj7YySY5AdSqtCgGzX4Gt98XWXn2kSr9rE1qvCA" func testJWTEncoding() { let claims = JWT.Claims.stub() From f36fe6b258a4d252221aefc1099bea88d67f5ae3 Mon Sep 17 00:00:00 2001 From: Bartosz Rozwarski Date: Tue, 5 Jul 2022 12:04:55 +0200 Subject: [PATCH 2/2] change jwt date to int --- .../WalletConnectRelay/ClientAuth/JWT/JWT+Claims.swift | 4 ++-- .../ClientAuth/SocketAuthenticator.swift | 9 ++++++--- Tests/RelayerTests/AuthTests/JWTTests.swift | 6 ++++-- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Sources/WalletConnectRelay/ClientAuth/JWT/JWT+Claims.swift b/Sources/WalletConnectRelay/ClientAuth/JWT/JWT+Claims.swift index 5fb9a9412..14ea4cffd 100644 --- a/Sources/WalletConnectRelay/ClientAuth/JWT/JWT+Claims.swift +++ b/Sources/WalletConnectRelay/ClientAuth/JWT/JWT+Claims.swift @@ -5,8 +5,8 @@ extension JWT { let iss: String let sub: String let aud: String - let iat: Date - let exp: Date + let iat: Int + let exp: Int func encode() throws -> String { let jsonEncoder = JSONEncoder() diff --git a/Sources/WalletConnectRelay/ClientAuth/SocketAuthenticator.swift b/Sources/WalletConnectRelay/ClientAuth/SocketAuthenticator.swift index f1f5b4c31..ae6ee4d46 100644 --- a/Sources/WalletConnectRelay/ClientAuth/SocketAuthenticator.swift +++ b/Sources/WalletConnectRelay/ClientAuth/SocketAuthenticator.swift @@ -24,7 +24,8 @@ struct SocketAuthenticator: SocketAuthenticating { private func createAndSignJWT(subject: String, keyPair: SigningPrivateKey) throws -> String { let issuer = didKeyFactory.make(pubKey: keyPair.publicKey.rawRepresentation, prefix: true) - let claims = JWT.Claims(iss: issuer, sub: subject, aud: getAudience(), iat: Date(), exp: getExpiry()) + let now = Int(Date().timeIntervalSince1970) + let claims = JWT.Claims(iss: issuer, sub: subject, aud: getAudience(), iat: now, exp: getExpiry()) var jwt = JWT(claims: claims) try jwt.sign(using: EdDSASigner(keyPair)) return try jwt.encoded() @@ -34,11 +35,13 @@ struct SocketAuthenticator: SocketAuthenticating { return Data.randomBytes(count: 32).toHexString() } - private func getExpiry() -> Date { + private func getExpiry() -> Int { + var components = DateComponents() components.setValue(1, for: .day) // safe to unwrap as the date must be calculated - return Calendar.current.date(byAdding: components, to: Date())! + let date = Calendar.current.date(byAdding: components, to: Date())! + return Int(date.timeIntervalSince1970) } private func getAudience() -> String { diff --git a/Tests/RelayerTests/AuthTests/JWTTests.swift b/Tests/RelayerTests/AuthTests/JWTTests.swift index e18e57f4a..8f20cd961 100644 --- a/Tests/RelayerTests/AuthTests/JWTTests.swift +++ b/Tests/RelayerTests/AuthTests/JWTTests.swift @@ -20,11 +20,13 @@ extension JWT.Claims { static func stub() -> JWT.Claims { let iss = "did:key:z6MkodHZwneVRShtaLf8JKYkxpDGp1vGZnpGmdBpX8M2exxH" let sub = "c479fe5dc464e771e78b193d239a65b58d278cad1c34bfb0b5716e5bb514928e" - let iat = Date(timeIntervalSince1970: 1656910097) + let iatDate = Date(timeIntervalSince1970: 1656910097) + let iat = Int(iatDate.timeIntervalSince1970) var components = DateComponents() components.setValue(1, for: .day) let aud = "wss://relay.walletconnect.com" - let exp = Calendar.current.date(byAdding: components, to: iat)! + let expDate = Calendar.current.date(byAdding: components, to: iatDate)! + let exp = Int(expDate.timeIntervalSince1970) return JWT.Claims(iss: iss, sub: sub, aud: aud, iat: iat, exp: exp) } }