Files
inji-wallet/ios/RNSecureKeystoreModule.swift
2024-11-29 15:40:46 +05:30

284 lines
9.6 KiB
Swift

import Foundation
import Security
import React
import securekeystore
@objc(RNSecureKeystoreModule)
class RNSecureKeystoreModule: NSObject,RCTBridgeModule {
static func moduleName() -> String! {
return "RNSecureKeystoreModule"
}
private var secureKeystore:SecureKeystoreProtocol
override init() {
self.secureKeystore=SecureKeystoreImpl()
}
@objc
static func requiresMainQueueSetup() -> Bool {
return true
}
@objc
func generateKeyPair(_ type: String, isAuthRequired: Bool, authTimeout: Int, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
let successLambda: (String) -> Void = { success in
resolve(success)
}
let failureLambda: (String, String) -> Void = { code, message in
reject(code, message, nil)
}
var tag=""
if(type=="RS256")
{
tag="RSA"
}
else
{
tag="ECR1"
}
secureKeystore.generateKeyPair(type: tag, tag: tag, isAuthRequired: isAuthRequired, authTimeout: Int32(authTimeout), onSuccess: successLambda, onFailure: failureLambda)
}
@objc
func deleteKeyPair(_ tag: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
let successLambda: (Bool) -> Void = { success in
resolve(success)
}
let failureLambda: (String, String) -> Void = { code, message in
reject(code, message, nil)
}
secureKeystore.deleteKeyPair(tag: tag,onSuccess: successLambda,onFailure: failureLambda)
}
@objc
func hasAlias(_ tag: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
let successLambda: (Bool) -> Void = { success in
resolve(success)
}
let failureLambda: (String, String) -> Void = { code, message in
reject(code, message, nil)
}
secureKeystore.hasAlias(tag: tag,onSuccess: successLambda,onFailure: failureLambda)
}
@objc
func sign(_ signAlgorithm: String, alias: String, data: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
let successLambda: (String) -> Void = { success in
resolve(success)
}
let failureLambda: (String, String) -> Void = { code, message in
reject(code, message, nil)
}
var tag=""
if(alias=="RS256")
{
tag="RSA"
}
else
{
tag="ECR1"
}
secureKeystore.sign(signAlgorithm: tag,alias: tag,data: data,onSuccess: successLambda,onFailure: failureLambda)
}
@objc
func storeGenericKey(_ publickKey:String,privateKey:String, account: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
let successLambda: (Bool) -> Void = { success in
resolve(success)
}
let failureLambda: (String, String) -> Void = { code, message in
reject(code, message, nil)
}
secureKeystore.storeGenericKey(publicKey: publickKey, privateKey: privateKey, account: account, onSuccess: successLambda, onFailure: failureLambda)
}
@objc
func storeData(_ key:String,value:String,resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
let successLambda: (Bool) -> Void = { success in
resolve(success)
}
let failureLambda: (String, String) -> Void = { code, message in
reject(code, message, nil)
}
secureKeystore.storeGenericKey(publicKey: value, privateKey: "", account: key, onSuccess: successLambda, onFailure: failureLambda)
}
@objc
func retrieveGenericKey(_ account: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
let successLambda: (String?,String?) -> Void = { privateKey,publicKey in
let keyPair=[privateKey,publicKey]
resolve(keyPair)
}
let failureLambda: (String, String) -> Void = { code, message in
reject(code, message, nil)
}
secureKeystore.retrieveGenericKey(account: account,onSuccess: successLambda,onFailure: failureLambda)
}
@objc
func getData(_ key: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock)
{
let successLambda: (String?,String?) -> Void = { privateKey,publicKey in
let keyPair=[privateKey,publicKey]
resolve(keyPair)
}
let failureLambda: (String, String) -> Void = { code, message in
reject(code, message, nil)
}
secureKeystore.retrieveGenericKey(account: key,onSuccess: successLambda,onFailure: failureLambda)
}
@objc
func hasBiometricsEnabled(_ resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
let success = secureKeystore.hasBiometricsEnabled()
resolve(success)
}
@objc
func updatePopup(_ title: String, desc: String) {
secureKeystore.updatePopup(title: title, desc: desc)
}
@objc
func generateKey(_ alias: String, authRequired: Bool, authTimeout: Int, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
let successLambda: (Bool) -> Void = { success in
resolve(success)
}
let failureLambda: (String, String) -> Void = { code, message in
reject(code, message, nil)
}
secureKeystore.generateKey(alias: alias, authRequired: authRequired, authTimeout: Int32(authTimeout), onSuccess: successLambda, onFailure: failureLambda)
}
@objc
func encryptData(_ alias: String, data: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
let successLambda: (String) -> Void = { encryptedData in
resolve(encryptedData)
}
let failureLambda: (String, String) -> Void = { code, message in
reject(code, message, nil)
}
secureKeystore.encryptData(alias: alias, data: data, onSuccess: successLambda, onFailure: failureLambda)
}
@objc
func decryptData(_ alias: String, data: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
let successLambda: (String) -> Void = { decryptedData in
resolve(decryptedData)
}
let failureLambda: (String, String) -> Void = { code, message in
reject(code, message, nil)
}
secureKeystore.decryptData(alias: alias, data: data, onSuccess: successLambda, onFailure: failureLambda)
}
@available(iOS 13.0, *)
@objc
func generateHmacshaKey(_ alias: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
let successLambda: (Bool) -> Void = { success in
resolve(success)
}
let failureLambda: (String, String) -> Void = { code, message in
reject(code, message, nil)
}
secureKeystore.generateHmacshaKey(alias: alias, onSuccess: successLambda, onFailure: failureLambda)
}
@available(iOS 13.0, *)
@objc
func generateHmacSha(_ alias: String, data: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
let successLambda: (String?) -> Void = { hash in
resolve(hash)
}
let failureLambda: (String, String) -> Void = { code, message in
reject(code, message, nil)
}
secureKeystore.generateHmacSha(alias: alias, data: data, onSuccess: successLambda, onFailure: failureLambda)
}
@objc
func clearKeys(_ resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
let successLambda: (Bool) -> Void = { success in
resolve(success)
}
let failureLambda: (String, String) -> Void = { code, message in
reject(code, message, nil)
}
secureKeystore.clearKeys(onSuccess: successLambda, onFailure: failureLambda)
}
@objc
func retrieveKey(_ alias:String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock){
let successLambda: (String) -> Void = { success in
resolve(success)
}
let failureLambda: (String, String) -> Void = { code, message in
reject(code, message, nil)
}
secureKeystore.retrieveKey(tag: alias, onSuccess: successLambda, onFailure: failureLambda)
}
@objc
func storeValueInCloud(_ key: String, value: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
let successLambda: (Bool) -> Void = { success in
resolve(success)
}
let failureLambda: (String, String) -> Void = { code, message in
reject(code, message, nil)
}
secureKeystore.storeValueInCloud(key: key, value: value, onSuccess: successLambda, onFailure: failureLambda)
}
@objc
func retrieveValueFromCloud(_ key: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
let successLambda: (String?) -> Void = { value in
resolve(value)
}
let failureLambda: (String, String) -> Void = { code, message in
reject(code, message, nil)
}
secureKeystore.retrieveValueFromCloud(key: key, onSuccess: successLambda, onFailure: failureLambda)
}
}