@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
package/src/index.ts ADDED
@@ -0,0 +1,154 @@
1
+ import { NativeEventEmitter, NativeModules, Platform } from 'react-native';
2
+
3
+ import { CardErrors } from './types';
4
+
5
+ import type { Callback, CallbackError, CardInfo } from './types';
6
+
7
+ const { OKLiteManager } = NativeModules;
8
+
9
+ export const LiteFlag = {
10
+ VERSION: '01',
11
+ LANGUAGE: '00', // english
12
+ TAG: 'ffff',
13
+ };
14
+
15
+ export type NfcConnectUiState = {
16
+ code: number;
17
+ message: string;
18
+ };
19
+
20
+ const DEFAULT_FUNCTION = (value: string) => value;
21
+
22
+ class OnekeyLite {
23
+ UiEventEmitter: NativeEventEmitter | null = null;
24
+
25
+ mnemonicToEntropy = DEFAULT_FUNCTION;
26
+
27
+ entropyToMnemonic = DEFAULT_FUNCTION;
28
+ entropyToMnemonicV2 = DEFAULT_FUNCTION;
29
+
30
+ constructor() {
31
+ if (Platform.OS !== 'android') return;
32
+ this.UiEventEmitter = new NativeEventEmitter(OKLiteManager);
33
+ }
34
+
35
+ async encodeMnemonic(
36
+ version: string,
37
+ language: string,
38
+ mnemonic: string
39
+ ): Promise<string> {
40
+ const meta = LiteFlag.TAG + version + language;
41
+ const enMnemonic = await this.mnemonicToEntropy(mnemonic.trim()); // mnemonic to index
42
+ return enMnemonic + meta;
43
+ }
44
+
45
+ async decodeMnemonic(payload: string) {
46
+ try {
47
+ if (payload.length <= 8)
48
+ return Buffer.from(payload, 'hex').toString().trim();
49
+
50
+ const meta = payload.slice(-8);
51
+
52
+ const regexp = /^ffff[a-f0-9]{4}$/;
53
+ if (regexp.test(meta)) {
54
+ const version = parseInt(meta.slice(4, 6), 10);
55
+ const enMnemonic = payload.slice(0, -8);
56
+
57
+ if (version === 1) {
58
+ const deMnemonic = await this.entropyToMnemonic(enMnemonic); // mnemonic to index
59
+
60
+ return deMnemonic.trim();
61
+ }
62
+
63
+ if (version === 2) {
64
+ const deMnemonic = await this.entropyToMnemonicV2(enMnemonic); // mnemonic to index
65
+
66
+ return deMnemonic.trim();
67
+ }
68
+
69
+ // 当前版本不支持
70
+ return '';
71
+ }
72
+
73
+ // 兼容 V0 旧版本
74
+ return Buffer.from(payload, 'hex').toString().trim();
75
+ } catch (error) {
76
+ // 数据解析报错
77
+ return '';
78
+ }
79
+ }
80
+
81
+ addConnectListener(listener: (event: NfcConnectUiState) => void) {
82
+ this.removeConnectListeners();
83
+ return this.UiEventEmitter?.addListener('nfc_ui_event', listener);
84
+ }
85
+
86
+ removeConnectListeners() {
87
+ return this.UiEventEmitter?.removeAllListeners('nfc_ui_event');
88
+ }
89
+
90
+ addAccordListener() {
91
+ if (Platform.OS !== 'android') return;
92
+ const eventEmitter = new NativeEventEmitter(OKLiteManager);
93
+ return eventEmitter.addListener('nfc_active_connection', () => {});
94
+ }
95
+
96
+ getCardName(result: Callback<string>) {
97
+ OKLiteManager.getCardName(result);
98
+ }
99
+
100
+ getLiteInfo(result: Callback<CardInfo>) {
101
+ OKLiteManager.getLiteInfo(result);
102
+ }
103
+
104
+ checkNFCPermission(result: Callback<boolean>) {
105
+ OKLiteManager.checkNFCPermission(result);
106
+ }
107
+
108
+ setMnemonic(
109
+ mnemonic: string,
110
+ pwd: string,
111
+ result: Callback<boolean>,
112
+ overwrite = false
113
+ ) {
114
+ this.encodeMnemonic(LiteFlag.VERSION, LiteFlag.LANGUAGE, mnemonic).then(
115
+ (payload) => OKLiteManager.setMnemonic(payload, pwd, overwrite, result)
116
+ );
117
+ }
118
+
119
+ getMnemonicWithPin(pwd: string, result: Callback<string>) {
120
+ try {
121
+ OKLiteManager.getMnemonicWithPin(
122
+ pwd,
123
+ async (
124
+ error: CallbackError | null,
125
+ data: string | null,
126
+ state: CardInfo | null
127
+ ) => {
128
+ result(error, data ? await this.decodeMnemonic(data) : null, state);
129
+ }
130
+ );
131
+ } catch (error) {
132
+ result({ code: CardErrors.ExecFailure, message: null }, null, null);
133
+ }
134
+ }
135
+
136
+ changePin(oldPin: string, newPin: string, result: Callback<boolean>) {
137
+ OKLiteManager.changePin(oldPin, newPin, result);
138
+ }
139
+
140
+ reset(result: Callback<boolean>) {
141
+ OKLiteManager.reset(result);
142
+ }
143
+
144
+ cancel() {
145
+ if (Platform.OS === 'android') OKLiteManager.cancel();
146
+ }
147
+
148
+ intoSetting() {
149
+ if (Platform.OS === 'android') OKLiteManager.intoSetting();
150
+ }
151
+ }
152
+
153
+ const onekeyLite = new OnekeyLite();
154
+ export default onekeyLite;
package/src/types.ts ADDED
@@ -0,0 +1,37 @@
1
+ export type Callback<T> = (
2
+ error: CallbackError | null,
3
+ data: T | null,
4
+ state: CardInfo | null
5
+ ) => void;
6
+
7
+ export type CallbackError = { code: number; message: string | null } | null;
8
+
9
+ export type CardInfo = {
10
+ hasBackup: boolean;
11
+ isNewCard: boolean;
12
+ serialNum: string;
13
+ pinRetryCount: number;
14
+ } | null;
15
+
16
+ export enum CardErrors {
17
+ InitChannel = 1000,
18
+ NotExistsNFC = 1001,
19
+ NotEnableNFC = 1002,
20
+ NotNFCPermission = 1003,
21
+
22
+ ConnectionFail = 2001,
23
+ InterruptError = 2002,
24
+ DeviceMismatch = 2003,
25
+ UserCancel = 2004,
26
+
27
+ PasswordWrong = 3001,
28
+ InputPasswordEmpty = 3002,
29
+ NotSetPassword = 3003,
30
+ InitPasswordError = 3004,
31
+ CardLock = 3005,
32
+ UpperErrorAutoReset = 3006,
33
+
34
+ ExecFailure = 4000,
35
+ InitializedError = 4001,
36
+ NotInitializedError = 4002,
37
+ }