@onekeyfe/react-native-lite-card 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/LICENSE +20 -0
  2. package/android/build.gradle +102 -0
  3. package/android/gradle.properties +5 -0
  4. package/android/src/main/AndroidManifest.xml +3 -0
  5. package/android/src/main/assets/config/command.json +205 -0
  6. package/android/src/main/cpp/CMakeLists.txt +15 -0
  7. package/android/src/main/cpp/validation.c +227 -0
  8. package/android/src/main/cpp/validation.h +19 -0
  9. package/android/src/main/java/so/onekey/app/wallet/LoggerManager.kt +35 -0
  10. package/android/src/main/java/so/onekey/app/wallet/OKLiteManager.kt +399 -0
  11. package/android/src/main/java/so/onekey/app/wallet/OKLitePackage.kt +16 -0
  12. package/android/src/main/java/so/onekey/app/wallet/keys/KeysNativeProvider.kt +13 -0
  13. package/android/src/main/java/so/onekey/app/wallet/nfc/Exceptions.kt +58 -0
  14. package/android/src/main/java/so/onekey/app/wallet/nfc/NfcUtils.kt +151 -0
  15. package/android/src/main/java/so/onekey/app/wallet/nfc/broadcast/NfcStatusChangeBroadcastReceiver.kt +56 -0
  16. package/android/src/main/java/so/onekey/app/wallet/nfc/gpchannel/GPChannelNatives.kt +32 -0
  17. package/android/src/main/java/so/onekey/app/wallet/onekeyLite/NfcConstant.kt +38 -0
  18. package/android/src/main/java/so/onekey/app/wallet/onekeyLite/OnekeyLiteCard.kt +241 -0
  19. package/android/src/main/java/so/onekey/app/wallet/onekeyLite/entitys/APDUParam.kt +17 -0
  20. package/android/src/main/java/so/onekey/app/wallet/onekeyLite/entitys/CardInfo.java +84 -0
  21. package/android/src/main/java/so/onekey/app/wallet/onekeyLite/entitys/CardResponse.java +37 -0
  22. package/android/src/main/java/so/onekey/app/wallet/onekeyLite/entitys/CardState.kt +10 -0
  23. package/android/src/main/java/so/onekey/app/wallet/onekeyLite/entitys/ParsedCertInfo.java +39 -0
  24. package/android/src/main/java/so/onekey/app/wallet/onekeyLite/entitys/SecureChanelParam.java +113 -0
  25. package/android/src/main/java/so/onekey/app/wallet/onekeyLite/entitys/SendResponse.kt +26 -0
  26. package/android/src/main/java/so/onekey/app/wallet/onekeyLite/nfc/CommandGenerator.kt +178 -0
  27. package/android/src/main/java/so/onekey/app/wallet/onekeyLite/nfc/Connection.kt +430 -0
  28. package/android/src/main/java/so/onekey/app/wallet/onekeyLite/nfc/GPCAPDUGenerator.kt +56 -0
  29. package/android/src/main/java/so/onekey/app/wallet/utils/EventUtils.kt +14 -0
  30. package/android/src/main/java/so/onekey/app/wallet/utils/GpsUtil.kt +38 -0
  31. package/android/src/main/java/so/onekey/app/wallet/utils/HexUtils.java +93 -0
  32. package/android/src/main/java/so/onekey/app/wallet/utils/LogUtil.kt +11 -0
  33. package/android/src/main/java/so/onekey/app/wallet/utils/MiUtil.kt +93 -0
  34. package/android/src/main/java/so/onekey/app/wallet/utils/NfcPermissionUtils.kt +24 -0
  35. package/android/src/main/java/so/onekey/app/wallet/utils/Utils.java +433 -0
  36. package/android/src/main/jniLibs/arm64-v8a/libgpchannelNDK.so +0 -0
  37. package/android/src/main/jniLibs/armeabi-v7a/libgpchannelNDK.so +0 -0
  38. package/ios/Classes/OKLiteCommand/OKLiteCommandModal.h +39 -0
  39. package/ios/Classes/OKLiteCommand/OKLiteCommandModal.m +143 -0
  40. package/ios/Classes/OKLiteCommand/OKLiteCommandTool.h +28 -0
  41. package/ios/Classes/OKLiteCommand/OKLiteCommandTool.m +53 -0
  42. package/ios/Classes/OKLiteManager.h +17 -0
  43. package/ios/Classes/OKLiteManager.m +222 -0
  44. package/ios/Classes/OKNFCBridge.h +28 -0
  45. package/ios/Classes/OKNFCBridge.mm +221 -0
  46. package/ios/Classes/OKNFCLiteDefine.h +108 -0
  47. package/ios/Classes/OKNFTLite/OKLiteProtocol.h +37 -0
  48. package/ios/Classes/OKNFTLite/OKLiteV1.h +41 -0
  49. package/ios/Classes/OKNFTLite/OKLiteV1.m +602 -0
  50. package/ios/Classes/OKNFTLite/OKLiteV2.h +17 -0
  51. package/ios/Classes/OKNFTLite/OKLiteV2.m +132 -0
  52. package/ios/Classes/OKNFTLite/OKNFCManager.h +40 -0
  53. package/ios/Classes/OKNFTLite/OKNFCManager.m +330 -0
  54. package/ios/Classes/Utils/NFCConfig.h +19 -0
  55. package/ios/Classes/Utils/NFCConfig.m +18 -0
  56. package/ios/Classes/Utils/NSData+OKNFCHexData.h +17 -0
  57. package/ios/Classes/Utils/NSData+OKNFCHexData.m +24 -0
  58. package/ios/Classes/Utils/NSData+StringToData.h +12 -0
  59. package/ios/Classes/Utils/NSData+StringToData.m +25 -0
  60. package/ios/Classes/Utils/NSString+OKAdd.h +14 -0
  61. package/ios/Classes/Utils/NSString+OKAdd.m +40 -0
  62. package/ios/Classes/Utils/NSString+OKNFCHexStr.h +18 -0
  63. package/ios/Classes/Utils/NSString+OKNFCHexStr.m +38 -0
  64. package/ios/Classes/Utils/OKNFCUtility.h +18 -0
  65. package/ios/Classes/Utils/OKNFCUtility.m +22 -0
  66. package/ios/Classes/Utils/OKTools.h +17 -0
  67. package/ios/Classes/Utils/OKTools.m +21 -0
  68. package/ios/GPChannelSDKCore.framework/GPChannelSDKCore +0 -0
  69. package/ios/GPChannelSDKCore.framework/Headers/GPChannelSDK.h +315 -0
  70. package/ios/GPChannelSDKCore.framework/Headers/GPChannelSDKCore.h +19 -0
  71. package/ios/GPChannelSDKCore.framework/Info.plist +0 -0
  72. package/ios/GPChannelSDKCore.framework/Modules/module.modulemap +7 -0
  73. package/ios/GPChannelSDKCore.framework/_CodeSignature/CodeResources +147 -0
  74. package/keys/keys.c +51 -0
  75. package/keys/keys.h +4 -0
  76. package/lib/commonjs/index.js +114 -0
  77. package/lib/commonjs/index.js.map +1 -0
  78. package/lib/commonjs/types.js +27 -0
  79. package/lib/commonjs/types.js.map +1 -0
  80. package/lib/module/index.js +108 -0
  81. package/lib/module/index.js.map +1 -0
  82. package/lib/module/types.js +21 -0
  83. package/lib/module/types.js.map +1 -0
  84. package/lib/typescript/src/index.d.ts +35 -0
  85. package/lib/typescript/src/index.d.ts.map +1 -0
  86. package/lib/typescript/src/types.d.ts +31 -0
  87. package/lib/typescript/src/types.d.ts.map +1 -0
  88. package/package.json +166 -0
  89. package/react-native-lite-card.podspec +42 -0
  90. package/src/index.ts +154 -0
  91. package/src/types.ts +37 -0
@@ -0,0 +1,39 @@
1
+ //
2
+ // OKLiteCommandModal.h
3
+ // OneKeyWallet
4
+ //
5
+ // Created by linleiqin on 2023/6/27.
6
+ //
7
+
8
+ #import <Foundation/Foundation.h>
9
+ #import <CoreNFC/CoreNFC.h>
10
+ #import "OKNFCLiteDefine.h"
11
+
12
+ NS_ASSUME_NONNULL_BEGIN
13
+
14
+ typedef NFCISO7816APDU* _Nonnull (^BuildStrBlock)(void);
15
+
16
+
17
+ @interface OKLiteCommandModal : NSObject
18
+
19
+ @property (nonatomic,copy) NSString *desc;
20
+ @property(nonatomic,assign)OKLiteCommand command;
21
+
22
+ //@property (nonatomic,assign) OKNFCLiteApp app;
23
+ @property (nonatomic,assign) BOOL parseResp;
24
+
25
+ - (instancetype)initWithCommand:(OKLiteCommand)command version:(OKNFCLiteVersion)version;
26
+
27
+ - (NFCISO7816APDU *)buildAPDU;
28
+
29
+ - (NFCISO7816APDU *)setPIN:(NSString *)pin;
30
+
31
+ - (NFCISO7816APDU *)changePIN:(NSString *)oldPin newPin:(NSString *)newPin;
32
+
33
+ - (NFCISO7816APDU *)verifyPIN:(NSString *)pin;
34
+
35
+ - (NFCISO7816APDU *)importMnemonic:(NSString *)mnemonic;
36
+
37
+ @end
38
+
39
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,143 @@
1
+ //
2
+ // OKLiteCommandModal.m
3
+ // OneKeyWallet
4
+ //
5
+ // Created by linleiqin on 2023/6/27.
6
+ //
7
+
8
+ #import "OKLiteCommandModal.h"
9
+ #import "OKNFCBridge.h"
10
+ #import "OKLiteCommandTool.h"
11
+ #import "NFCConfig.h"
12
+
13
+ @interface OKLiteCommandModal ()
14
+
15
+ @property(nonatomic,assign)OKNFCLiteVersion version;
16
+
17
+ @end
18
+
19
+ @implementation OKLiteCommandModal
20
+
21
+ - (instancetype)initWithCommand:(OKLiteCommand)command version:(OKNFCLiteVersion)version {
22
+ self = [super init];
23
+ if (!self) return self;
24
+ _command = command;
25
+ _version = version;
26
+ // _app = [OKLiteCommandTool getLiteAppWithCommand:command version:version];
27
+ _parseResp = NO;
28
+ [self initDesc];
29
+ return self;
30
+ }
31
+
32
+ - (void)initDesc {
33
+ switch (_command) {
34
+ case OKLiteCommandSelectSecure:
35
+ self.desc = @"设置:主安全域";
36
+ break;
37
+ case OKLiteCommandSelectBackup:
38
+ self.desc = @"设置:备份应用";
39
+ break;
40
+ case OKLiteCommandGetCardSN:
41
+ self.desc = @"获取SN";
42
+ break;
43
+ case OKLiteCommandGetCardCert:
44
+ self.desc = @"获取设备证书";
45
+ break;
46
+ case OKLiteCommandGetBackupStatus:
47
+ self.desc = @"是否存在备份";
48
+ break;
49
+ case OKLiteCommandGetPINStatus:
50
+ self.desc = @"是否设置 PIN";
51
+ break;
52
+ case OKLiteCommandExportMnemonic:
53
+ self.desc = @"导出数据";
54
+ break;
55
+ case OKLiteCommandImportMnemonic:
56
+ self.desc = @"备份数据";
57
+ break;
58
+ case OKLiteCommandPinRTL:
59
+ self.desc = @"获取密码的重试次数";
60
+ break;
61
+ case OKLiteCommandWipeCard:
62
+ self.desc = @"重置卡片";
63
+ break;
64
+ case OKLiteCommandOpenChannel_1:
65
+ self.desc = @"开启安全通道:verify_certificate";
66
+ break;
67
+ case OKLiteCommandOpenChannel_2:
68
+ self.desc = @"开启安全通道:verify_auth_data";
69
+ break;
70
+ case OKLiteCommandSetPIN:
71
+ self.desc = @"设置Pin";
72
+ break;
73
+ case OKLiteCommandChangePIN:
74
+ self.desc = @"修改 Pin";
75
+ break;
76
+ case OKLiteCommandVerifyPIN:
77
+ self.desc = @"验证 Pin";
78
+ break;
79
+ }
80
+ }
81
+
82
+ - (NFCISO7816APDU *)buildAPDU {
83
+ switch (_command) {
84
+ case OKLiteCommandSelectSecure:
85
+ return [OKNFCBridge buildAPDUWithStr:@"0x00a4040008A000000151000000" encrypt:NO];
86
+ case OKLiteCommandSelectBackup:
87
+ if (_version == OKNFCLiteVersionV2) {
88
+ return [OKNFCBridge buildAPDUWithStr:@"0x00a404000e6f6e656b65792e6261636b757001" encrypt:NO];
89
+ } else {
90
+ return [OKNFCBridge buildAPDUWithStr:@"0x00a4040008D156000132834001" encrypt:NO];
91
+ }
92
+ case OKLiteCommandGetCardSN:
93
+ return [OKNFCBridge buildAPDUWithStr:@"0x80CB800005DFFF028101" encrypt:NO];
94
+ case OKLiteCommandGetCardCert:
95
+ return [OKNFCBridge buildAPDUWithStr:@"0x80CABF2106A60483021518" encrypt:NO];
96
+ case OKLiteCommandGetBackupStatus:
97
+ return [OKNFCBridge buildAPDUWithStr:@"0x806a0000" encrypt:NO];
98
+ case OKLiteCommandGetPINStatus:
99
+ return [OKNFCBridge buildAPDUWithStr:@"0x80CB800005DFFF028105" encrypt:NO];
100
+ case OKLiteCommandExportMnemonic:
101
+ if (_version == OKNFCLiteVersionV2) {
102
+ return [OKNFCBridge buildAPDUWith_cla:0x80 ins:0x4b p1:0x00 p2:0x00 data:@"" encrypt:YES];
103
+ } else {
104
+ return [OKNFCBridge buildAPDUWithStr:@"0x804B0000" encrypt:NO];
105
+ }
106
+ case OKLiteCommandPinRTL:
107
+ return [OKNFCBridge buildAPDUWithStr:@"0x80cb800005dfff028102" encrypt:NO];
108
+ case OKLiteCommandWipeCard:
109
+ return [OKNFCBridge buildAPDUWith_cla:0x80 ins:0xcb p1:0x80 p2:0x00 data:@"dffe028205" encrypt:YES];
110
+ case OKLiteCommandOpenChannel_1:
111
+ return [OKNFCBridge buildAPDUWithStr:[@"0x802a1810XX" stringByAppendingString:[NFCConfig envFor:@"crt"]] encrypt:NO];
112
+ case OKLiteCommandOpenChannel_2:
113
+ return [OKNFCBridge buildAPDUWithStr:[@"0x80821815XX" stringByAppendingString:[OKNFCBridge mutualAuthData]] encrypt:NO];
114
+ default:
115
+ return nil;
116
+ }
117
+ }
118
+
119
+ - (NFCISO7816APDU *)setPIN:(NSString *)pin {
120
+ NSString *dataStr = [NSString stringWithFormat:@"DFFE0B8204080006%@", pin.hexString];
121
+ return [OKNFCBridge buildAPDUWith_cla:0x80 ins:0xcb p1:0x80 p2:0x00 data:dataStr encrypt:YES];
122
+ }
123
+
124
+ - (NFCISO7816APDU *)changePIN:(NSString *)oldPin newPin:(NSString *)newPin {
125
+ NSString *dataStr = [NSString stringWithFormat:@"DFFE0B82040e06%@06%@", oldPin.hexString, newPin.hexString];
126
+ return [OKNFCBridge buildAPDUWith_cla:0x80 ins:0xcb p1:0x80 p2:0x00 data:dataStr encrypt:YES];
127
+ }
128
+
129
+ - (NFCISO7816APDU *)verifyPIN:(NSString *)pin {
130
+ NSString *hexPin = [@"06" stringByAppendingString: [pin hexString]];
131
+ return [OKNFCBridge buildAPDUWith_cla:0x80 ins:0x20 p1:0x00 p2:0x00 data:hexPin encrypt:YES];
132
+ }
133
+
134
+ - (NFCISO7816APDU *)importMnemonic:(NSString *)mnemonic {
135
+ /// https://onekeyhq.atlassian.net/wiki/spaces/ONEKEY/pages/10551684/Lite
136
+ if (_version == OKNFCLiteVersionV2) {
137
+ return [OKNFCBridge buildAPDUWith_cla:0x80 ins:0x3B p1:0x00 p2:0x00 data:mnemonic encrypt:YES];
138
+ } else {
139
+ return [OKNFCBridge buildAPDUWithStr:[@"0x803B0000XX" stringByAppendingString:mnemonic] encrypt:NO];
140
+ }
141
+ }
142
+
143
+ @end
@@ -0,0 +1,28 @@
1
+ //
2
+ // OKLiteCommandTool.h
3
+ // OneKeyWallet
4
+ //
5
+ // Created by linleiqin on 2023/6/27.
6
+ //
7
+
8
+ #import <Foundation/Foundation.h>
9
+ #import "OKNFCLiteDefine.h"
10
+ #import <CoreNFC/CoreNFC.h>
11
+ #import "OKLiteCommandModal.h"
12
+ #import "OKNFCManager.h"
13
+
14
+ NS_ASSUME_NONNULL_BEGIN
15
+
16
+ @interface OKLiteCommandTool : NSObject
17
+
18
+ @property (nonatomic, weak) id<OKNFCManagerDelegate> delegate;
19
+
20
+ - (void)sendCommandWithAPDU:(NFCISO7816APDU *)apdu
21
+ modal:(OKLiteCommandModal *)modal
22
+ completionHandler:(void(^)(NSData *responseData, uint8_t sw1, uint8_t sw2, NSError * _Nullable error, NSString *parseRespon))completionHandler;
23
+
24
+ //+ (OKNFCLiteApp)getLiteAppWithCommand:(OKLiteCommand)command version:(OKNFCLiteVersion)version;
25
+
26
+ @end
27
+
28
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,53 @@
1
+ //
2
+ // OKLiteCommandTool.m
3
+ // OneKeyWallet
4
+ //
5
+ // Created by linleiqin on 2023/6/27.
6
+ //
7
+
8
+ #import "OKLiteCommandTool.h"
9
+ #import "OKNFCBridge.h"
10
+ #import "OKNFCUtility.h"
11
+
12
+ @implementation OKLiteCommandTool
13
+
14
+ - (void)sendCommandWithAPDU:(NFCISO7816APDU *)apdu
15
+ modal:(OKLiteCommandModal *)modal
16
+ completionHandler:(void(^)(NSData *responseData, uint8_t sw1, uint8_t sw2, NSError * _Nullable error, NSString *parseRespon))completionHandler {
17
+
18
+ id<NFCISO7816Tag> tag = [self.delegate getNFCsessionTag];
19
+ [tag sendCommandAPDU:apdu completionHandler:^(NSData *responseData, uint8_t sw1, uint8_t sw2, NSError *error) {
20
+ NSString *parseRespon = nil;
21
+ if(modal.parseResp && sw1 == OKNFC_SW1_OK) {
22
+ parseRespon = [OKNFCBridge parseSafeAPDUResponse:responseData sw1:sw1 sw2:sw2];
23
+ }
24
+
25
+ [OKNFCUtility logAPDU:modal.desc response:responseData sw1:sw1 sw2:sw2 error:error];
26
+ if (completionHandler) {
27
+ completionHandler(responseData,sw1,sw2,error,parseRespon);
28
+ }
29
+ }];
30
+ }
31
+
32
+ //
33
+ //+ (OKNFCLiteApp)getLiteAppWithCommand:(OKLiteCommand)command version:(OKNFCLiteVersion)version {
34
+ // switch (command) {
35
+ // case OKLiteCommandGetCardSN:
36
+ // case OKLiteCommandGetPINStatus:
37
+ // case OKLiteCommandPinRTL:
38
+ // case OKLiteCommandSetPIN:
39
+ // case OKLiteCommandChangePIN:
40
+ // case OKLiteCommandWipeCard:
41
+ // return version == OKNFCLiteVersionV1 ? OKNFCLiteAppSecure : OKNFCLiteAppBackup;
42
+ // case OKLiteCommandGetBackupStatus:
43
+ // case OKLiteCommandVerifyPIN:
44
+ // case OKLiteCommandImportMnemonic:
45
+ // case OKLiteCommandExportMnemonic:
46
+ // return OKNFCLiteAppBackup;
47
+ // default:
48
+ // return OKNFCLiteAppNONE;
49
+ // }
50
+ //}
51
+
52
+
53
+ @end
@@ -0,0 +1,17 @@
1
+ //
2
+ // RNEventManager.h
3
+ // OneKeyWallet
4
+ //
5
+ // Created by linleiqin on 2021/11/8.
6
+ //
7
+
8
+ #import <Foundation/Foundation.h>
9
+ #import <React/RCTBridgeModule.h>
10
+
11
+ NS_ASSUME_NONNULL_BEGIN
12
+
13
+ @interface OKLiteManager : NSObject <RCTBridgeModule>
14
+
15
+ @end
16
+
17
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,222 @@
1
+ //
2
+ // RNEventManager.m
3
+ // OneKeyWallet
4
+ //
5
+ // Created by linleiqin on 2021/11/8.
6
+ //
7
+
8
+ #import "OKLiteManager.h"
9
+ #import "NFCConfig.h"
10
+ #import "OKNFCManager.h"
11
+ #import "OKLiteV1.h"
12
+
13
+ typedef NS_ENUM(NSInteger, NFCLiteExceptions) {
14
+ NFCLiteExceptionsInitChannel = 1000,// 初始化异常
15
+ NFCLiteExceptionsNotExistsNFC = 1001,// 没有 NFC 设备
16
+ NFCLiteExceptionsNotEnableNFC = 1002, // 没有开启 NFC 设备
17
+ NFCLiteExceptionsNotNFCPermission = 1003,// 没有使用 NFC 的权限
18
+ NFCLiteExceptionsConnectionFail = 2001,// 连接失败
19
+ NFCLiteExceptionsInterrupt = 2002,// 操作中断(可能是连接问题)
20
+ NFCLiteExceptionsDeviceMismatch = 2003,// 连接设备不匹配
21
+ NFCLiteExceptionsUserCancel = 2004,// 用户取消连接
22
+ NFCLiteExceptionsPasswordWrong = 3001,// 密码错误
23
+ NFCLiteExceptionsInputPasswordEmpty = 3002,// 输入密码为空
24
+ NFCLiteExceptionsPasswordEmpty = 3003,// 未设置过密码
25
+ NFCLiteExceptionsInitPassword = 3004,// 设置初始化密码错误
26
+ NFCLiteExceptionsCardLock = 3005,// 密码重试次数太多已经锁死
27
+ NFCLiteExceptionsAutoReset = 3006,// 密码重试次数太多已经自动重制卡片
28
+ NFCLiteExceptionsExecFailure = 4000,// 未知的命令执行失败
29
+ NFCLiteExceptionsInitialized = 4001,// 已经备份过内容
30
+ NFCLiteExceptionsNotInitialized = 4002,// 没有备份过内容
31
+ };
32
+
33
+ @implementation OKLiteManager
34
+
35
+
36
+ RCT_EXPORT_MODULE();
37
+
38
+ RCT_EXPORT_METHOD(checkNFCPermission:(RCTResponseSenderBlock)callback)
39
+ {
40
+ BOOL permission = [NFCNDEFReaderSession readingAvailable];
41
+ if (![NFCNDEFReaderSession readingAvailable]) {
42
+ callback(@[[NSNull null],@(permission),[NSNull null]]);
43
+ }
44
+ }
45
+
46
+ RCT_EXPORT_METHOD(getCardName:(RCTResponseSenderBlock)callBack)
47
+ {
48
+ if ([OKLiteManager checkSDKVaild:callBack]) {
49
+ __block OKNFCManager *liteManager = [[OKNFCManager alloc] init];
50
+ [liteManager getLiteInfo:^(OKLiteV1 *lite, OKNFCLiteStatus status) {
51
+ NSDictionary *cardInfo = [lite cardInfo];
52
+ BOOL error = status == OKNFCLiteStatusError || status == OKNFCLiteStatusSNNotMatch;
53
+ if (error) {
54
+ callBack(@[@{@"code":@(NFCLiteExceptionsConnectionFail),@"message":@""},[NSNull null],[NSNull null]]);
55
+ } else {
56
+ callBack(@[[NSNull null],lite.SN,cardInfo]);
57
+ }
58
+ liteManager = nil;
59
+ }];
60
+ }
61
+ }
62
+
63
+ RCT_EXPORT_METHOD(getLiteInfo:(RCTResponseSenderBlock)callBack)
64
+ {
65
+ if ([OKLiteManager checkSDKVaild:callBack]) {
66
+ __block OKNFCManager *liteManager = [[OKNFCManager alloc] init];
67
+ [liteManager getLiteInfo:^(OKLiteV1 *lite, OKNFCLiteStatus status) {
68
+ NSDictionary *cardInfo = [lite cardInfo];
69
+ BOOL error = status == OKNFCLiteStatusError || status == OKNFCLiteStatusSNNotMatch;
70
+ if (error) {
71
+ callBack(@[@{@"code":@(NFCLiteExceptionsConnectionFail),@"message":@""},[NSNull null],[NSNull null]]);
72
+ } else {
73
+ callBack(@[[NSNull null],cardInfo,cardInfo]);
74
+ }
75
+ liteManager = nil;
76
+ }];
77
+ }
78
+ }
79
+
80
+ RCT_EXPORT_METHOD(setMnemonic:(NSString *)mnemonic pin:(NSString *)pin overwrite:(BOOL)overwrite callback:(RCTResponseSenderBlock)callBack)
81
+ {
82
+ if ([OKLiteManager checkSDKVaild:callBack]) {
83
+ __block OKNFCManager *liteManager = [[OKNFCManager alloc] init];
84
+ [liteManager setMnemonic:mnemonic withPin:pin overwrite:overwrite complete:^(OKLiteV1 *lite, OKNFCLiteSetMncStatus status) {
85
+ NSDictionary *cardInfo = [lite cardInfo];
86
+ switch (status) {
87
+ case OKNFCLiteSetMncStatusSuccess:
88
+ callBack(@[[NSNull null],@(true),cardInfo]);
89
+ break;
90
+ case OKNFCLiteSetMncStatusError:
91
+ if (lite.status == OKNFCLiteStatusActivated) {
92
+ callBack(@[@{@"code":@(NFCLiteExceptionsInitialized),@"message":@""},[NSNull null],[NSNull null]]);
93
+ } else {
94
+ callBack(@[@{@"code":@(NFCLiteExceptionsConnectionFail),@"message":@""},[NSNull null],[NSNull null]]);
95
+ }
96
+ break;
97
+ case OKNFCLiteSetMncStatusSNNotMatch:
98
+ callBack(@[@{@"code":@(NFCLiteExceptionsDeviceMismatch),@"message":@""},[NSNull null],[NSNull null]]);
99
+ break;
100
+ case OKNFCLiteSetMncStatusPinNotMatch:
101
+ callBack(@[@{@"code":@(NFCLiteExceptionsPasswordWrong),@"message":@""},[NSNull null],cardInfo]);
102
+ break;
103
+ case OKNFCLiteSetMncStatusWiped:
104
+ callBack(@[@{@"code":@(NFCLiteExceptionsAutoReset),@"message":@""},[NSNull null],[NSNull null]]);
105
+ break;
106
+ case OKNFCLiteSetMncStatusCancel:
107
+ callBack(@[@{@"code":@(NFCLiteExceptionsUserCancel),@"message":@""},[NSNull null],[NSNull null]]);
108
+ break;
109
+ default:
110
+ break;
111
+ }
112
+ liteManager = nil;
113
+ }];
114
+ }
115
+ }
116
+
117
+ RCT_EXPORT_METHOD(getMnemonicWithPin:(NSString *)pin callback:(RCTResponseSenderBlock)callBack)
118
+ {
119
+ if ([OKLiteManager checkSDKVaild:callBack]) {
120
+ __block OKNFCManager *liteManager = [[OKNFCManager alloc] init];
121
+ [liteManager getMnemonicWithPin:pin complete:^(OKLiteV1 *lite, NSString *mnemonic, OKNFCLiteGetMncStatus status) {
122
+ NSDictionary *cardInfo = [lite cardInfo];
123
+ switch (status) {
124
+ case OKNFCLiteGetMncStatusSuccess:
125
+ if (mnemonic.length > 0) {
126
+ callBack(@[[NSNull null],mnemonic,cardInfo]);
127
+ }
128
+ break;
129
+ case OKNFCLiteGetMncStatusError:
130
+ if (lite.status == OKNFCLiteStatusNewCard && lite.SN != nil) {
131
+ callBack(@[@{@"code":@(NFCLiteExceptionsNotInitialized),@"message":@""},[NSNull null],[NSNull null]]);
132
+ } else {
133
+ callBack(@[@{@"code":@(NFCLiteExceptionsConnectionFail),@"message":@""},[NSNull null],[NSNull null]]);
134
+ }
135
+ break;
136
+ case OKNFCLiteGetMncStatusSNNotMatch:
137
+ callBack(@[@{@"code":@(NFCLiteExceptionsDeviceMismatch),@"message":@""},[NSNull null],[NSNull null]]);
138
+ break;
139
+ case OKNFCLiteGetMncStatusPinNotMatch:
140
+ callBack(@[@{@"code":@(NFCLiteExceptionsPasswordWrong),@"message":@""},[NSNull null],cardInfo]);
141
+ break;
142
+ case OKNFCLiteGetMncStatusWiped:
143
+ callBack(@[@{@"code":@(NFCLiteExceptionsAutoReset),@"message":@""},[NSNull null],[NSNull null]]);
144
+ break;
145
+ case OKNFCLiteGetMncStatusCancel:
146
+ callBack(@[@{@"code":@(NFCLiteExceptionsUserCancel),@"message":@""},[NSNull null],[NSNull null]]);
147
+ break;
148
+ default:
149
+ break;
150
+ }
151
+ liteManager = nil;
152
+ }];
153
+ }
154
+ }
155
+
156
+ RCT_EXPORT_METHOD(changePin:(NSString *)oldPwd newPwd:(NSString *)newPwd callback:(RCTResponseSenderBlock)callBack)
157
+ {
158
+ if ([OKLiteManager checkSDKVaild:callBack]) {
159
+ __block OKNFCManager *liteManager = [[OKNFCManager alloc] init];
160
+ [liteManager changePin:oldPwd to:newPwd complete:^(OKLiteV1 *lite, OKNFCLiteChangePinStatus status) {
161
+ NSDictionary *cardInfo = [lite cardInfo];
162
+ switch (status) {
163
+ case OKNFCLiteChangePinStatusSuccess: {
164
+ callBack(@[[NSNull null],@(true),cardInfo]);
165
+ } break;
166
+ case OKNFCLiteChangePinStatusWiped: {
167
+ callBack(@[@{@"code":@(NFCLiteExceptionsAutoReset),@"message":@""},[NSNull null],[NSNull null]]);
168
+ } break;
169
+ case OKNFCLiteChangePinStatusPinNotMatch: {
170
+ callBack(@[@{@"code":@(NFCLiteExceptionsPasswordWrong),@"message":@""},[NSNull null],cardInfo]);
171
+ } break;
172
+ case OKNFCLiteChangePinStatusError: {
173
+ if (lite.status == OKNFCLiteStatusNewCard && lite.SN != nil) {
174
+ callBack(@[@{@"code":@(NFCLiteExceptionsNotInitialized),@"message":@""},[NSNull null],[NSNull null]]);
175
+ } else {
176
+ callBack(@[@{@"code":@(NFCLiteExceptionsConnectionFail),@"message":@""},[NSNull null],[NSNull null]]);
177
+ }
178
+ } break;
179
+ case OKNFCLiteChangePinStatusCancel: {
180
+ callBack(@[@{@"code":@(NFCLiteExceptionsUserCancel),@"message":@""},[NSNull null],[NSNull null]]);
181
+ } break;
182
+ default: break;
183
+ }
184
+ liteManager = nil;
185
+ }];
186
+ }
187
+ }
188
+
189
+ RCT_EXPORT_METHOD(reset:(RCTResponseSenderBlock)callBack)
190
+ {
191
+ if ([OKLiteManager checkSDKVaild:callBack]) {
192
+ __block OKNFCManager *liteManager = [[OKNFCManager alloc] init];
193
+ [liteManager reset:^(OKLiteV1 *lite, BOOL isSuccess, NSError *error) {
194
+ if (isSuccess) {
195
+ NSDictionary *cardInfo = [lite cardInfo];
196
+ callBack(@[[NSNull null],@(true),cardInfo]);
197
+ } else {
198
+ if (error && error.code == 200) {
199
+ callBack(@[@{@"code":@(NFCLiteExceptionsUserCancel),@"message":@""},[NSNull null],[NSNull null]]);
200
+ } else {
201
+ callBack(@[@{@"code":@(NFCLiteExceptionsConnectionFail),@"message":@""},[NSNull null],[NSNull null]]);
202
+ }
203
+ }
204
+ liteManager = nil;
205
+ }];
206
+ }
207
+ }
208
+
209
+ + (BOOL)checkSDKVaild:(RCTResponseSenderBlock)callback {
210
+ if (![NFCNDEFReaderSession readingAvailable]) {
211
+ callback(@[@{@"code":@(NFCLiteExceptionsNotNFCPermission),@"message":@""},[NSNull null],[NSNull null]]);
212
+ return NO;
213
+ }
214
+ if ([NFCConfig envFor:@"crt"].length > 0 && [NFCConfig envFor:@"sk"].length > 0) {
215
+ return YES;
216
+ }
217
+ callback(@[@{@"code":@(NFCLiteExceptionsInitChannel),@"message":@""},[NSNull null],[NSNull null]]);
218
+ return NO;
219
+ }
220
+
221
+
222
+ @end
@@ -0,0 +1,28 @@
1
+ //
2
+ // Bridge.h
3
+ // NFCTagReader
4
+ //
5
+ // Created by zj on 2021/3/16.
6
+ // Copyright © 2021 Apple. All rights reserved.
7
+ //
8
+
9
+ #import <Foundation/Foundation.h>
10
+ #import <CoreNFC/CoreNFC.h>
11
+
12
+
13
+ NS_ASSUME_NONNULL_BEGIN
14
+
15
+ @interface OKNFCBridge : NSObject
16
+ + (NFCISO7816APDU *)buildAPDUWith_cla:(unsigned long)cla ins:(unsigned long)ins p1:(unsigned long)p1 p2:(unsigned long)p2 data:(NSString *)data encrypt:(BOOL)encrypt;
17
+ + (NSString *)mutualAuthData;
18
+ + (BOOL)openChannel:(NSData *)authRes;
19
+ + (BOOL)JUB_GPC_Initialize:(NSData *)cert;
20
+ + (NSString *)parseSafeAPDUResponse:(NSData *)data sw1:(uint8_t)sw1 sw2:(uint8_t)sw2;
21
+ + (BOOL)parseAPDUResponse:(NSData *)data;
22
+ + (BOOL)verifySN:(NSString *)SNData withCert:(NSData *)cert;
23
+ + (NFCISO7816APDU *)buildAPDUWithStr:(NSString *)str encrypt:(BOOL)encrypt;
24
+ + (void)closeSecureChannel;
25
+
26
+ @end
27
+
28
+ NS_ASSUME_NONNULL_END