swift impl

This commit is contained in:
Hailey
2024-04-15 00:37:12 -07:00
parent 2ada0cbd0d
commit 2c1b3709af
7 changed files with 62 additions and 28 deletions
@@ -1,3 +1,4 @@
import ExpoModulesCore
import JOSESwift
class JWTUtil {
@@ -34,7 +35,7 @@ class JWTUtil {
public static func createJwt(header: JWTHeader, payload: JWTPayload, jwk: JWK) -> String? {
guard let header = try? header.toJWSHeader(),
let payload = try? payload.toPayload(),
let key = try? jwk.toSecKey()
let key = try? jwk.toPrivateSecKey()
else {
print("didn't have one")
return nil
@@ -52,15 +53,34 @@ class JWTUtil {
return jws.compactSerializedString
}
public static func verifyJwt(_ jwkString: String, token tokenString: String, options optionsString: String?) -> Bool {
guard let key = try? jsonToPublicKey(jwkString),
let jws = try? JWS(compactSerialization: tokenString),
public static func verifyJwt(token: String, jwk: JWK) -> JWTVerifyResponse? {
guard let key = try? jwk.toPublicSecKey(),
let jws = try? JWS(compactSerialization: token),
let verifier = Verifier(verifyingAlgorithm: .ES256, key: key),
let isVerified = try? jws.validate(using: verifier).isValid(for: verifier)
let validation = try? jws.validate(using: verifier)
else {
return false
return nil
}
return isVerified
let header = validation.header
let serializedHeader = JWTHeader(
alg: "ES256",
jku: Field(wrappedValue: header.jku?.absoluteString),
kid: Field(wrappedValue:header.kid),
typ: Field(wrappedValue: header.typ),
cty: Field(wrappedValue: header.cty),
crit: Field(wrappedValue: header.cty)
)
let payload = String(data: validation.payload.data(), encoding: .utf8)
guard let payload = payload else {
return nil
}
return JWTVerifyResponse(
protectedHeader: serializedHeader.toField(),
payload: payload.toField()
)
}
}