I am trying to generate RSA key pair using KEYUTIL.generateKeypair("RSA", 2048)
from a JavaScript file from Swift. However, the result is undefined
.
Below is the JavaScript file:
var myPublicKey = function myKeyFunction() {
return KEYUTIL.generateKeypair("RSA", 2048);
}
var key = KEYUTIL.generateKeypair("RSA", 2048);
pm.environment.set("private_key_client", KEYUTIL.getPEM(key.prvKeyObj, "PKCS8PRV").split("\r\n").join("\n"));
pm.environment.set("public_key_client", KEYUTIL.getPEM(key.pubKeyObj).split("\r\n").join("\n"));
The Swift code I am using is:
if let jsSourcePath = Bundle.main.url(forResource: "rsakeygenerator", withExtension: "js") {
do {
let jsHandler = JSCommunicationHandler()
jsHandler.loadSourceFile(atUrl: jsSourcePath)
let result = jsHandler.evaluateJavaScript("myPublicKey")
}
catch {
print(error.localizedDescription)
}
}
My helper class is:
class JSCommunicationHandler {
private let context = JSContext()
init() {
context?.exceptionHandler = {context, exception in
if let exception = exception {
print(exception.toString()!)
}
}
}
func callFunction<T>(functionName:String, withData dataObject:Codable, type:T.Type) -> JSValue? where T:Codable {
var dataString = ""
if let string = getString(fromObject: dataObject, type:type) {
dataString = string
}
let functionString = functionName + "(\(dataString))"
let result = context?.evaluateScript(functionString)
return result
}
func loadSourceFile(atUrl url:URL) {
guard let stringFromUrl = try? String(contentsOf: url) else {return}
context?.evaluateScript(stringFromUrl)
}
func evaluateJavaScript(_ jsString:String) -> JSValue? {
context?.evaluateScript(jsString)
}
func setObject(object:Any, withName:String) {
context?.setObject(object, forKeyedSubscript: withName as NSCopying & NSObjectProtocol)
}
}
extension JSCommunicationHandler {
private func getString<T>(fromObject jsonObject:Codable, type:T.Type) -> String? where T:Codable {
let encoder = JSONEncoder()
guard let dataObject = jsonObject as? T,
let data = try? encoder.encode(dataObject),
let string = String(data:data, encoding:.utf8) else {
return nil
}
return string
}
}
I am trying to generate RSA key pair using KEYUTIL.generateKeypair("RSA", 2048)
from a JavaScript file from Swift. However, the result is undefined
. The JavaScript file and Swift code I am using is provided below.
JS File:
var myPublicKey = function myKeyFunction() {
return KEYUTIL.generateKeypair("RSA", 2048);
}
var key = KEYUTIL.generateKeypair("RSA", 2048);
pm.environment.set("private_key_client", KEYUTIL.getPEM(key.prvKeyObj, "PKCS8PRV").split("\r\n").join("\n"));
pm.environment.set("public_key_client", KEYUTIL.getPEM(key.pubKeyObj).split("\r\n").join("\n"));
Swift Code:
if let jsSourcePath = Bundle.main.url(forResource: "rsakeygenerator", withExtension: "js") {
do {
let jsHandler = JSCommunicationHandler()
jsHandler.loadSourceFile(atUrl: jsSourcePath)
let result = jsHandler.evaluateJavaScript("myPublicKey")
}
catch {
print(error.localizedDescription)
}
}
Helper Class:
class JSCommunicationHandler {
private let context = JSContext()
init() {
context?.exceptionHandler = {context, exception in
if let exception = exception {
print(exception.toString()!)
}
}
}
func callFunction<T>(functionName:String, withData dataObject:Codable, type:T.Type) -> JSValue? where T:Codable {
var dataString = ""
if let string = getString(fromObject: dataObject, type:type) {
dataString = string
}
let functionString = functionName + "(\(dataString))"
let result = context?.evaluateScript(functionString)
return result
}
func loadSourceFile(atUrl url:URL) {
guard let stringFromUrl = try? String(contentsOf: url) else {return}
context?.evaluateScript(stringFromUrl)
}
func evaluateJavaScript(_ jsString:String) -> JSValue? {
context?.evaluateScript(jsString)
}
func setObject(object:Any, withName:String) {
context?.setObject(object, forKeyedSubscript: withName as NSCopying & NSObjectProtocol)
}
}
extension JSCommunicationHandler {
private func getString<T>(fromObject jsonObject:Codable, type:T.Type) -> String? where T:Codable {
let encoder = JSONEncoder()
guard let dataObject = jsonObject as? T,
let data = try? encoder.encode(dataObject),
let string = String(data:data, encoding:.utf8) else {
return nil
}
return string
}
}
I am trying to generate an RSA key pair from a JavaScript file using Swift. I am using the KEYUTIL.generateKeypair("RSA", 2048)
function, but the result is undefined
. The JavaScript file, Swift code, and helper class used are provided below.
JavaScript File:
var myPublicKey = function myKeyFunction() {
return KEYUTIL.generateKeypair("RSA", 2048);
}
var key = KEYUTIL.generateKeypair("RSA", 2048);
pm.environment.set("private_key_client", KEYUTIL.getPEM(key.prvKeyObj, "PKCS8PRV").split("\r\n").join("\n"));
pm.environment.set("public_key_client", KEYUTIL.getPEM(key.pubKeyObj).split("\r\n").join("\n"));
Swift Code:
if let jsSourcePath = Bundle.main.url(forResource: "rsakeygenerator", withExtension: "js") {
do {
let jsHandler = JSCommunicationHandler()
jsHandler.loadSourceFile(atUrl: jsSourcePath)
let result = jsHandler.evaluateJavaScript("myPublicKey")
}
catch {
print(error.localizedDescription)
}
}
Helper Class:
class JSCommunicationHandler {
private let context = JSContext()
init() {
context?.exceptionHandler = {context, exception in
if let exception = exception {
print(exception.toString()!)
}
}
}
func callFunction<T>(functionName:String, withData dataObject:Codable, type:T.Type) -> JSValue? where T:Codable {
var dataString = ""
if let string = getString(fromObject: dataObject, type:type) {
dataString = string
}
let functionString = functionName + "(\(dataString))"
let result = context?.evaluateScript(functionString)
return result
}