Files
bsky-social-app/modules/expo-bluesky-oauth-client/ios/JWK.swift
T
2024-04-15 00:37:12 -07:00

59 lines
1.2 KiB
Swift

import ExpoModulesCore
import JOSESwift
struct JWK : Record {
@Field
var alg: String
@Field
var kty: String
@Field
var crv: String?
@Field
var x: String?
@Field
var y: String?
@Field
var e: String?
@Field
var n: String?
@Field
var d: String?
@Field
var use: String?
@Field
var kid: String?
func toField() -> Field<JWK> {
return Field(wrappedValue: self)
}
func toPrivateSecKey() throws -> SecKey? {
let jsonData = try JSONSerialization.data(withJSONObject: self.toDictionary())
guard let jwk = try? JSONDecoder().decode(ECPrivateKey.self, from: jsonData),
let key = try? jwk.converted(to: SecKey.self)
else {
print("Error creating SecKey.")
return nil
}
return key
}
func toPublicSecKey() throws -> SecKey? {
let jsonData = try JSONSerialization.data(withJSONObject: self.toDictionary())
guard let jwk = try? JSONDecoder().decode(ECPublicKey.self, from: jsonData),
let key = try? jwk.converted(to: SecKey.self)
else {
print("Error creating SecKey.")
return nil
}
return key
}
}
struct JWKPair : Record {
@Field
var privateKey: JWK
@Field
var publicKey: JWK
}