mirror of
https://github.com/status-im/react-native-status-keycard.git
synced 2025-02-28 12:00:36 +00:00
add signPinless method
This commit is contained in:
parent
a7b277e701
commit
f322b67096
@ -4,5 +4,7 @@
|
||||
|
||||
RCT_EXTERN_METHOD(nfcIsSupported:(RCTPromiseResolveBlock)resolve rejecter: (RCTPromiseRejectBlock)reject)
|
||||
RCT_EXTERN_METHOD(openNfcSettings:(RCTPromiseResolveBlock)resolve rejecter: (RCTPromiseRejectBlock)reject)
|
||||
RCT_EXTERN_METHOD(signPinless:(NSString *)hash resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
||||
|
||||
|
||||
@end
|
||||
|
@ -36,6 +36,46 @@ class StatusKeycard: NSObject {
|
||||
reject("E_KEYCARD", "Unsupported on iOS", nil)
|
||||
}
|
||||
|
||||
@objc
|
||||
func signPinless(_ hash: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
||||
if #available(iOS 13.0, *) {
|
||||
DispatchQueue.main.async {
|
||||
self.keycardController = KeycardController(onConnect: { [unowned self] channel in
|
||||
do {
|
||||
let cmdSet = CashCommandSet(cardChannel: channel)
|
||||
let info = try CashApplicationInfo(cmdSet.select().checkOK().data)
|
||||
print("SELECT")
|
||||
print(info)
|
||||
|
||||
let message = self.hexToBytes(hash)
|
||||
let res = try cmdSet.sign(data: message).checkOK()
|
||||
print("SELECT")
|
||||
print(res)
|
||||
|
||||
self.keycardController?.stop(alertMessage: "SELECT: Success")
|
||||
print("DONE!")
|
||||
resolve(res.data.toHexString())
|
||||
} catch {
|
||||
reject("E_KEYCARD", "error", nil)
|
||||
print("Error: \(error)")
|
||||
self.keycardController?.stop(errorMessage: "Read error. Please try again.")
|
||||
}
|
||||
self.keycardController = nil
|
||||
}, onFailure: { [unowned self] error in
|
||||
reject("E_KEYCARD", "disconnected", nil)
|
||||
print("Disconnected: \(error)")
|
||||
self.keycardController = nil
|
||||
})
|
||||
self.keycardController?.start(alertMessage: "Hold your iPhone near a Status Keycard.")
|
||||
}
|
||||
} else {
|
||||
print("Unavailable")
|
||||
reject("E_KEYCARD", "unavailable", nil)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@objc
|
||||
func nfcIsSupported(_ resolve: RCTPromiseResolveBlock, rejecter _: RCTPromiseRejectBlock) -> Void {
|
||||
if #available(iOS 13.0, *) {
|
||||
@ -49,4 +89,20 @@ class StatusKeycard: NSObject {
|
||||
static func requiresMainQueueSetup() -> Bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func hexToBytes(_ hex: String) -> [UInt8] {
|
||||
var last = hex.first
|
||||
return hex.dropFirst().compactMap {
|
||||
guard
|
||||
let lastHexDigitValue = last?.hexDigitValue,
|
||||
let hexDigitValue = $0.hexDigitValue else {
|
||||
last = $0
|
||||
return nil
|
||||
}
|
||||
defer {
|
||||
last = nil
|
||||
}
|
||||
return UInt8(lastHexDigitValue * 16 + hexDigitValue)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user