@onekeyfe/react-native-lite-card 1.0.0 → 1.0.2
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.
- package/android/build.gradle +1 -1
- package/android/src/main/AndroidManifest.xml +1 -1
- package/android/src/main/java/so/onekey/app/wallet/{LoggerManager.kt → lite/LoggerManager.kt} +2 -2
- package/android/src/main/java/so/onekey/app/wallet/{OKLiteManager.kt → lite/OKLiteManager.kt} +55 -49
- package/android/src/main/java/so/onekey/app/wallet/{OKLitePackage.kt → lite/OKLitePackage.kt} +1 -1
- package/android/src/main/java/so/onekey/app/wallet/{keys → lite/keys}/KeysNativeProvider.kt +1 -1
- package/android/src/main/java/so/onekey/app/wallet/{nfc → lite/nfc}/Exceptions.kt +1 -1
- package/android/src/main/java/so/onekey/app/wallet/{nfc → lite/nfc}/NfcUtils.kt +2 -2
- package/android/src/main/java/so/onekey/app/wallet/{nfc → lite/nfc}/broadcast/NfcStatusChangeBroadcastReceiver.kt +1 -1
- package/android/src/main/java/so/onekey/app/wallet/{onekeyLite → lite/onekeyLite}/NfcConstant.kt +2 -2
- package/android/src/main/java/so/onekey/app/wallet/{onekeyLite → lite/onekeyLite}/OnekeyLiteCard.kt +9 -18
- package/android/src/main/java/so/onekey/app/wallet/{onekeyLite → lite/onekeyLite}/entitys/APDUParam.kt +1 -1
- package/android/src/main/java/so/onekey/app/wallet/{onekeyLite → lite/onekeyLite}/entitys/CardInfo.java +1 -1
- package/android/src/main/java/so/onekey/app/wallet/{onekeyLite → lite/onekeyLite}/entitys/CardResponse.java +1 -1
- package/android/src/main/java/so/onekey/app/wallet/{onekeyLite → lite/onekeyLite}/entitys/CardState.kt +1 -1
- package/android/src/main/java/so/onekey/app/wallet/{onekeyLite → lite/onekeyLite}/entitys/ParsedCertInfo.java +1 -1
- package/android/src/main/java/so/onekey/app/wallet/{onekeyLite → lite/onekeyLite}/entitys/SecureChanelParam.java +1 -1
- package/android/src/main/java/so/onekey/app/wallet/{onekeyLite → lite/onekeyLite}/entitys/SendResponse.kt +2 -2
- package/android/src/main/java/so/onekey/app/wallet/{onekeyLite → lite/onekeyLite}/nfc/CommandGenerator.kt +6 -6
- package/android/src/main/java/so/onekey/app/wallet/{onekeyLite → lite/onekeyLite}/nfc/Connection.kt +12 -12
- package/android/src/main/java/so/onekey/app/wallet/{onekeyLite → lite/onekeyLite}/nfc/GPCAPDUGenerator.kt +3 -3
- package/android/src/main/java/so/onekey/app/wallet/{utils → lite/utils}/EventUtils.kt +1 -1
- package/android/src/main/java/so/onekey/app/wallet/{utils → lite/utils}/GpsUtil.kt +1 -1
- package/android/src/main/java/so/onekey/app/wallet/{utils → lite/utils}/HexUtils.java +1 -1
- package/android/src/main/java/so/onekey/app/wallet/{utils → lite/utils}/LogUtil.kt +3 -3
- package/android/src/main/java/so/onekey/app/wallet/{utils → lite/utils}/MiUtil.kt +5 -5
- package/android/src/main/java/so/onekey/app/wallet/{utils → lite/utils}/NfcPermissionUtils.kt +1 -1
- package/android/src/main/java/so/onekey/app/wallet/{utils → lite/utils}/Utils.java +1 -1
- package/ios/Classes/OKLiteManager.m +5 -19
- package/ios/GPChannelSDKCore.framework/GPChannelSDKCore +0 -0
- package/ios/GPChannelSDKCore.framework/Headers/GPChannelSDK.h +0 -0
- package/ios/GPChannelSDKCore.framework/Headers/GPChannelSDKCore.h +0 -0
- package/keys/keys.c +1 -1
- package/lib/commonjs/index.js +8 -52
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/index.js +8 -52
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/index.d.ts +0 -11
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +2 -2
- package/react-native-lite-card.podspec +1 -1
- package/src/index.ts +13 -69
- /package/android/src/main/java/so/onekey/app/wallet/{nfc → lite/nfc}/gpchannel/GPChannelNatives.kt +0 -0
package/android/build.gradle
CHANGED
package/android/src/main/java/so/onekey/app/wallet/{LoggerManager.kt → lite/LoggerManager.kt}
RENAMED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
package so.onekey.app.wallet
|
|
1
|
+
package so.onekey.app.wallet.lite
|
|
2
2
|
|
|
3
3
|
import android.util.Log
|
|
4
4
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
5
5
|
import com.facebook.react.bridge.ReactContextBaseJavaModule
|
|
6
6
|
import com.facebook.react.bridge.ReactMethod
|
|
7
|
-
import so.onekey.app.wallet.utils.sendEvent
|
|
7
|
+
import so.onekey.app.wallet.lite.utils.sendEvent
|
|
8
8
|
|
|
9
9
|
class LoggerManager(private val context: ReactApplicationContext) :
|
|
10
10
|
ReactContextBaseJavaModule(context) {
|
package/android/src/main/java/so/onekey/app/wallet/{OKLiteManager.kt → lite/OKLiteManager.kt}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package so.onekey.app.wallet
|
|
1
|
+
package so.onekey.app.wallet.lite
|
|
2
2
|
|
|
3
3
|
import android.content.Intent
|
|
4
4
|
import android.nfc.NfcAdapter
|
|
@@ -11,13 +11,13 @@ import com.facebook.react.bridge.*
|
|
|
11
11
|
import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter
|
|
12
12
|
import kotlinx.coroutines.*
|
|
13
13
|
import kotlinx.coroutines.channels.Channel
|
|
14
|
-
import so.onekey.app.wallet.nfc.NFCExceptions
|
|
15
|
-
import so.onekey.app.wallet.nfc.NfcUtils
|
|
16
|
-
import so.onekey.app.wallet.nfc.broadcast.NfcStatusChangeBroadcastReceiver
|
|
17
|
-
import so.onekey.app.wallet.onekeyLite.OneKeyLiteCard
|
|
18
|
-
import so.onekey.app.wallet.onekeyLite.entitys.CardState
|
|
19
|
-
import so.onekey.app.wallet.utils.NfcPermissionUtils
|
|
20
|
-
import so.onekey.app.wallet.utils.Utils
|
|
14
|
+
import so.onekey.app.wallet.lite.nfc.NFCExceptions
|
|
15
|
+
import so.onekey.app.wallet.lite.nfc.NfcUtils
|
|
16
|
+
import so.onekey.app.wallet.lite.nfc.broadcast.NfcStatusChangeBroadcastReceiver
|
|
17
|
+
import so.onekey.app.wallet.lite.onekeyLite.OneKeyLiteCard
|
|
18
|
+
import so.onekey.app.wallet.lite.onekeyLite.entitys.CardState
|
|
19
|
+
import so.onekey.app.wallet.lite.utils.NfcPermissionUtils
|
|
20
|
+
import so.onekey.app.wallet.lite.utils.Utils
|
|
21
21
|
import java.util.concurrent.Executors
|
|
22
22
|
import java.util.concurrent.atomic.AtomicInteger
|
|
23
23
|
|
|
@@ -46,6 +46,7 @@ class OKLiteManager(private val context: ReactApplicationContext) :
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
private val mNFCConnectedChannel = Channel<IsoDep?>(1)
|
|
49
|
+
private var lastIsoDep: IsoDep? = null
|
|
49
50
|
private val mNFCState = AtomicInteger(NFCState.Dead)
|
|
50
51
|
private val mShowDialogNumber = AtomicInteger(0)
|
|
51
52
|
private var mCurrentCardState: CardState? = null
|
|
@@ -78,7 +79,7 @@ class OKLiteManager(private val context: ReactApplicationContext) :
|
|
|
78
79
|
delay(100)
|
|
79
80
|
if (!mNFCConnectedChannel.isEmpty) {
|
|
80
81
|
Log.e(TAG, "There is no way to use NFC")
|
|
81
|
-
mNFCConnectedChannel.receive()
|
|
82
|
+
// mNFCConnectedChannel.receive()
|
|
82
83
|
val startRequest = OneKeyLiteCard.initRequest(isoDep)
|
|
83
84
|
val dataMap = Arguments.createMap().apply {
|
|
84
85
|
putInt("code", -1)
|
|
@@ -118,11 +119,11 @@ class OKLiteManager(private val context: ReactApplicationContext) :
|
|
|
118
119
|
mNfcStateBroadcastReceiver,
|
|
119
120
|
NfcStatusChangeBroadcastReceiver.nfcBroadcastReceiverIntentFilter
|
|
120
121
|
)
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
122
|
+
Utils.getTopActivity()?.let {
|
|
123
|
+
launch(Dispatchers.IO) {
|
|
124
|
+
OneKeyLiteCard.startNfc(it as FragmentActivity) {}
|
|
125
|
+
}
|
|
124
126
|
}
|
|
125
|
-
}
|
|
126
127
|
|
|
127
128
|
}
|
|
128
129
|
|
|
@@ -211,11 +212,14 @@ class OKLiteManager(private val context: ReactApplicationContext) :
|
|
|
211
212
|
it.putString("message", "show_connect_ui")
|
|
212
213
|
})
|
|
213
214
|
mShowDialogNumber.incrementAndGet()
|
|
214
|
-
|
|
215
|
-
|
|
215
|
+
var receiveIsoDep = lastIsoDep
|
|
216
|
+
val tryReceiveResult = mNFCConnectedChannel.tryReceive()
|
|
217
|
+
if (tryReceiveResult.isSuccess) {
|
|
218
|
+
receiveIsoDep = tryReceiveResult.getOrNull();
|
|
219
|
+
} else if (lastIsoDep == null || lastIsoDep?.isConnected == false) {
|
|
220
|
+
receiveIsoDep = mNFCConnectedChannel.receive()
|
|
216
221
|
}
|
|
217
|
-
|
|
218
|
-
mCurrentCardState = null
|
|
222
|
+
lastIsoDep = receiveIsoDep
|
|
219
223
|
if (receiveIsoDep == null) {
|
|
220
224
|
// 取消连接
|
|
221
225
|
releaseDevice()
|
|
@@ -259,27 +263,7 @@ class OKLiteManager(private val context: ReactApplicationContext) :
|
|
|
259
263
|
callback: Callback,
|
|
260
264
|
execute: (isoDep: IsoDep) -> T
|
|
261
265
|
) {
|
|
262
|
-
val topActivity = Utils.getTopActivity()
|
|
263
|
-
if (topActivity == null) {
|
|
264
|
-
callback.invoke(NFCExceptions.InitializedException().createArguments(), null, null)
|
|
265
|
-
return
|
|
266
|
-
}
|
|
267
|
-
val isNfcExists = NfcUtils.isNfcExits(topActivity)
|
|
268
|
-
if (!isNfcExists) {
|
|
269
|
-
// 没有 NFC 设备
|
|
270
|
-
Log.d(TAG, "NFC device not found")
|
|
271
|
-
callback.invoke(NFCExceptions.NotExistsNFC().createArguments(), null, null)
|
|
272
|
-
return
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
val isNfcEnable = NfcUtils.isNfcEnable(topActivity)
|
|
276
|
-
if (!isNfcEnable) {
|
|
277
|
-
// 没有打开 NFC 开关
|
|
278
|
-
Log.d(TAG, "NFC device not enable")
|
|
279
|
-
callback.invoke(NFCExceptions.NotEnableNFC().createArguments(), null, null)
|
|
280
|
-
return
|
|
281
|
-
}
|
|
282
|
-
|
|
266
|
+
val topActivity = Utils.getTopActivity() ?: return
|
|
283
267
|
NfcPermissionUtils.checkPermission(topActivity) {
|
|
284
268
|
try {
|
|
285
269
|
Log.d(TAG, "NFC permission check success")
|
|
@@ -324,17 +308,6 @@ class OKLiteManager(private val context: ReactApplicationContext) :
|
|
|
324
308
|
}
|
|
325
309
|
}
|
|
326
310
|
|
|
327
|
-
@ReactMethod
|
|
328
|
-
fun getCardName(callback: Callback) = launch {
|
|
329
|
-
Log.d(TAG, "getCardName")
|
|
330
|
-
handleOperation(callback) { isoDep ->
|
|
331
|
-
Log.e(TAG, "getCardName Obtain the device")
|
|
332
|
-
val cardName = OneKeyLiteCard.getCardName(isoDep)
|
|
333
|
-
Log.e(TAG, "getCardName result $cardName")
|
|
334
|
-
cardName
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
|
|
338
311
|
@ReactMethod
|
|
339
312
|
fun getLiteInfo(callback: Callback) = launch {
|
|
340
313
|
Log.d(TAG, "getLiteInfo")
|
|
@@ -377,6 +350,39 @@ class OKLiteManager(private val context: ReactApplicationContext) :
|
|
|
377
350
|
}
|
|
378
351
|
}
|
|
379
352
|
|
|
353
|
+
@ReactMethod
|
|
354
|
+
fun checkNFCPermission(callback: Callback) {
|
|
355
|
+
val topActivity = Utils.getTopActivity()
|
|
356
|
+
if (topActivity == null) {
|
|
357
|
+
callback.invoke(NFCExceptions.InitializedException().createArguments(), null, null)
|
|
358
|
+
return
|
|
359
|
+
}
|
|
360
|
+
val isNfcExists = NfcUtils.isNfcExits(topActivity)
|
|
361
|
+
if (!isNfcExists) {
|
|
362
|
+
// 没有 NFC 设备
|
|
363
|
+
Log.d(TAG, "NFC device not found")
|
|
364
|
+
callback.invoke(NFCExceptions.NotExistsNFC().createArguments(), null, null)
|
|
365
|
+
return
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
val isNfcEnable = NfcUtils.isNfcEnable(topActivity)
|
|
369
|
+
if (!isNfcEnable) {
|
|
370
|
+
// 没有打开 NFC 开关
|
|
371
|
+
Log.d(TAG, "NFC device not enable")
|
|
372
|
+
callback.invoke(NFCExceptions.NotEnableNFC().createArguments(), null, null)
|
|
373
|
+
return
|
|
374
|
+
}
|
|
375
|
+
NfcPermissionUtils.checkPermission(topActivity) {
|
|
376
|
+
// 没有 NFC 使用权限
|
|
377
|
+
Log.d(TAG, "NFC device not permission")
|
|
378
|
+
callback.invoke(null, null, null)
|
|
379
|
+
return
|
|
380
|
+
}
|
|
381
|
+
// 没有 NFC 使用权限
|
|
382
|
+
Log.d(TAG, "NFC device not permission")
|
|
383
|
+
callback.invoke(NFCExceptions.NotNFCPermission().createArguments(), null, null)
|
|
384
|
+
}
|
|
385
|
+
|
|
380
386
|
@ReactMethod
|
|
381
387
|
fun reset(callback: Callback) = launch {
|
|
382
388
|
Log.d(TAG, "reset")
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package so.onekey.app.wallet.nfc
|
|
1
|
+
package so.onekey.app.wallet.lite.nfc
|
|
2
2
|
|
|
3
3
|
import android.app.Activity
|
|
4
4
|
import android.app.PendingIntent
|
|
@@ -9,7 +9,7 @@ import android.nfc.NfcAdapter
|
|
|
9
9
|
import android.nfc.tech.*
|
|
10
10
|
import android.os.Build
|
|
11
11
|
import android.provider.Settings
|
|
12
|
-
import so.onekey.app.wallet.utils.MiUtil
|
|
12
|
+
import so.onekey.app.wallet.lite.utils.MiUtil
|
|
13
13
|
|
|
14
14
|
object NfcUtils {
|
|
15
15
|
|
package/android/src/main/java/so/onekey/app/wallet/{onekeyLite → lite/onekeyLite}/OnekeyLiteCard.kt
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package so.onekey.app.wallet.onekeyLite
|
|
1
|
+
package so.onekey.app.wallet.lite.onekeyLite
|
|
2
2
|
|
|
3
3
|
import android.app.Activity
|
|
4
4
|
import android.nfc.tech.IsoDep
|
|
@@ -7,14 +7,14 @@ import androidx.fragment.app.FragmentActivity
|
|
|
7
7
|
import com.google.gson.Gson
|
|
8
8
|
import kotlinx.coroutines.Dispatchers
|
|
9
9
|
import kotlinx.coroutines.withContext
|
|
10
|
-
import so.onekey.app.wallet.nfc.NFCExceptions
|
|
11
|
-
import so.onekey.app.wallet.nfc.NfcUtils
|
|
12
|
-
import so.onekey.app.wallet.onekeyLite.entitys.CardState
|
|
13
|
-
import so.onekey.app.wallet.onekeyLite.nfc.AppleCardType
|
|
14
|
-
import so.onekey.app.wallet.onekeyLite.nfc.Connection
|
|
15
|
-
import so.onekey.app.wallet.onekeyLite.nfc.CommandGenerator
|
|
16
|
-
import so.onekey.app.wallet.utils.LogUtil.printLog
|
|
17
|
-
import so.onekey.app.wallet.utils.NfcPermissionUtils
|
|
10
|
+
import so.onekey.app.wallet.lite.nfc.NFCExceptions
|
|
11
|
+
import so.onekey.app.wallet.lite.nfc.NfcUtils
|
|
12
|
+
import so.onekey.app.wallet.lite.onekeyLite.entitys.CardState
|
|
13
|
+
import so.onekey.app.wallet.lite.onekeyLite.nfc.AppleCardType
|
|
14
|
+
import so.onekey.app.wallet.lite.onekeyLite.nfc.Connection
|
|
15
|
+
import so.onekey.app.wallet.lite.onekeyLite.nfc.CommandGenerator
|
|
16
|
+
import so.onekey.app.wallet.lite.utils.LogUtil.printLog
|
|
17
|
+
import so.onekey.app.wallet.lite.utils.NfcPermissionUtils
|
|
18
18
|
|
|
19
19
|
object OneKeyLiteCard {
|
|
20
20
|
const val TAG = "OneKeyLiteCard"
|
|
@@ -91,15 +91,6 @@ object OneKeyLiteCard {
|
|
|
91
91
|
return mCardConnection?.startVerifyPin(verifyPin) ?: 0
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
@Throws(NFCExceptions::class)
|
|
95
|
-
fun getCardName(isoDep: IsoDep): String {
|
|
96
|
-
val cardInfo = mCardConnection?.getSerialNumber()
|
|
97
|
-
if (cardInfo.isNullOrEmpty() || cardInfo == NfcConstant.NOT_MATCH_DEVICE) {
|
|
98
|
-
throw NFCExceptions.InterruptException()
|
|
99
|
-
}
|
|
100
|
-
return cardInfo
|
|
101
|
-
}
|
|
102
|
-
|
|
103
94
|
@Throws(NFCExceptions::class)
|
|
104
95
|
fun getCardInfo(isoDep: IsoDep): CardState {
|
|
105
96
|
return mCardConnection?.getCardInfo() ?: throw NFCExceptions.ConnectionFailException()
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
package so.onekey.app.wallet.onekeyLite.nfc
|
|
1
|
+
package so.onekey.app.wallet.lite.onekeyLite.nfc
|
|
2
2
|
|
|
3
3
|
import com.google.gson.JsonObject
|
|
4
4
|
import com.google.gson.JsonParser
|
|
5
5
|
import org.haobtc.onekey.card.gpchannel.GPChannelNatives.nativeGPCParseAPDUResponse
|
|
6
6
|
import org.haobtc.onekey.card.gpchannel.GPChannelNatives.nativeGPCParseSafeAPDUResponse
|
|
7
|
-
import so.onekey.app.wallet.nfc.NFCExceptions
|
|
8
|
-
import so.onekey.app.wallet.onekeyLite.entitys.APDUParam
|
|
9
|
-
import so.onekey.app.wallet.onekeyLite.entitys.CardResponse
|
|
10
|
-
import so.onekey.app.wallet.onekeyLite.entitys.SendResponse
|
|
11
|
-
import so.onekey.app.wallet.utils.Utils
|
|
7
|
+
import so.onekey.app.wallet.lite.nfc.NFCExceptions
|
|
8
|
+
import so.onekey.app.wallet.lite.onekeyLite.entitys.APDUParam
|
|
9
|
+
import so.onekey.app.wallet.lite.onekeyLite.entitys.CardResponse
|
|
10
|
+
import so.onekey.app.wallet.lite.onekeyLite.entitys.SendResponse
|
|
11
|
+
import so.onekey.app.wallet.lite.utils.Utils
|
|
12
12
|
|
|
13
13
|
enum class AppleCardType(val aid: String, val prefixSN: String) {
|
|
14
14
|
V1("D156000132834001", "OKLFT"),
|
package/android/src/main/java/so/onekey/app/wallet/{onekeyLite → lite/onekeyLite}/nfc/Connection.kt
RENAMED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
package so.onekey.app.wallet.onekeyLite.nfc
|
|
1
|
+
package so.onekey.app.wallet.lite.onekeyLite.nfc
|
|
2
2
|
|
|
3
3
|
import android.nfc.tech.IsoDep
|
|
4
4
|
import org.haobtc.onekey.card.gpchannel.GPChannelNatives
|
|
5
5
|
import org.haobtc.onekey.card.gpchannel.GPChannelNatives.nativeGPCFinalize
|
|
6
|
-
import so.onekey.app.wallet.keys.KeysNativeProvider
|
|
7
|
-
import so.onekey.app.wallet.nfc.NFCExceptions
|
|
8
|
-
import so.onekey.app.wallet.onekeyLite.NfcConstant
|
|
9
|
-
import so.onekey.app.wallet.onekeyLite.entitys.*
|
|
10
|
-
import so.onekey.app.wallet.onekeyLite.nfc.GPCAPDUGenerator.buildGPCAPDU
|
|
11
|
-
import so.onekey.app.wallet.onekeyLite.nfc.GPCAPDUGenerator.combCommand
|
|
12
|
-
import so.onekey.app.wallet.utils.HexUtils
|
|
13
|
-
import so.onekey.app.wallet.utils.HexUtils.byteArr2HexStr
|
|
14
|
-
import so.onekey.app.wallet.utils.HexUtils.hexString2Bytes
|
|
15
|
-
import so.onekey.app.wallet.utils.LogUtil.printLog
|
|
16
|
-
import so.onekey.app.wallet.utils.Utils
|
|
6
|
+
import so.onekey.app.wallet.lite.keys.KeysNativeProvider
|
|
7
|
+
import so.onekey.app.wallet.lite.nfc.NFCExceptions
|
|
8
|
+
import so.onekey.app.wallet.lite.onekeyLite.NfcConstant
|
|
9
|
+
import so.onekey.app.wallet.lite.onekeyLite.entitys.*
|
|
10
|
+
import so.onekey.app.wallet.lite.onekeyLite.nfc.GPCAPDUGenerator.buildGPCAPDU
|
|
11
|
+
import so.onekey.app.wallet.lite.onekeyLite.nfc.GPCAPDUGenerator.combCommand
|
|
12
|
+
import so.onekey.app.wallet.lite.utils.HexUtils
|
|
13
|
+
import so.onekey.app.wallet.lite.utils.HexUtils.byteArr2HexStr
|
|
14
|
+
import so.onekey.app.wallet.lite.utils.HexUtils.hexString2Bytes
|
|
15
|
+
import so.onekey.app.wallet.lite.utils.LogUtil.printLog
|
|
16
|
+
import so.onekey.app.wallet.lite.utils.Utils
|
|
17
17
|
import java.io.IOException
|
|
18
18
|
|
|
19
19
|
class Connection(val isoDep: IsoDep, private val mCommandGenerator: CommandGenerator) {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
package so.onekey.app.wallet.onekeyLite.nfc
|
|
1
|
+
package so.onekey.app.wallet.lite.onekeyLite.nfc
|
|
2
2
|
|
|
3
3
|
import com.google.gson.Gson
|
|
4
4
|
import org.haobtc.onekey.card.gpchannel.GPChannelNatives
|
|
5
|
-
import so.onekey.app.wallet.onekeyLite.entitys.APDUParam
|
|
6
|
-
import so.onekey.app.wallet.utils.LogUtil.printLog
|
|
5
|
+
import so.onekey.app.wallet.lite.onekeyLite.entitys.APDUParam
|
|
6
|
+
import so.onekey.app.wallet.lite.utils.LogUtil.printLog
|
|
7
7
|
|
|
8
8
|
object GPCAPDUGenerator {
|
|
9
9
|
private const val TAG = "GPCAPDUGenerator"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
package so.onekey.app.wallet.utils
|
|
1
|
+
package so.onekey.app.wallet.lite.utils
|
|
2
2
|
|
|
3
|
-
import so.onekey.app.wallet.onekeyLite.NfcConstant
|
|
4
|
-
import so.onekey.app.wallet.LoggerManager
|
|
3
|
+
import so.onekey.app.wallet.lite.onekeyLite.NfcConstant
|
|
4
|
+
import so.onekey.app.wallet.lite.LoggerManager
|
|
5
5
|
|
|
6
6
|
object LogUtil {
|
|
7
7
|
@JvmStatic
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package so.onekey.app.wallet.utils
|
|
1
|
+
package so.onekey.app.wallet.lite.utils
|
|
2
2
|
|
|
3
3
|
import android.app.AppOpsManager
|
|
4
4
|
import android.content.Context
|
|
@@ -9,10 +9,10 @@ import android.provider.Settings
|
|
|
9
9
|
import android.util.Log
|
|
10
10
|
import androidx.annotation.IntDef
|
|
11
11
|
import androidx.annotation.RequiresApi
|
|
12
|
-
import so.onekey.app.wallet.utils.MiUtil.PermissionResult.Companion.PERMISSION_ASK
|
|
13
|
-
import so.onekey.app.wallet.utils.MiUtil.PermissionResult.Companion.PERMISSION_DENIED
|
|
14
|
-
import so.onekey.app.wallet.utils.MiUtil.PermissionResult.Companion.PERMISSION_GRANTED
|
|
15
|
-
import so.onekey.app.wallet.utils.MiUtil.PermissionResult.Companion.PERMISSION_UNKNOWN
|
|
12
|
+
import so.onekey.app.wallet.lite.utils.MiUtil.PermissionResult.Companion.PERMISSION_ASK
|
|
13
|
+
import so.onekey.app.wallet.lite.utils.MiUtil.PermissionResult.Companion.PERMISSION_DENIED
|
|
14
|
+
import so.onekey.app.wallet.lite.utils.MiUtil.PermissionResult.Companion.PERMISSION_GRANTED
|
|
15
|
+
import so.onekey.app.wallet.lite.utils.MiUtil.PermissionResult.Companion.PERMISSION_UNKNOWN
|
|
16
16
|
|
|
17
17
|
object MiUtil {
|
|
18
18
|
val TAG = MiUtil::class.simpleName
|
|
@@ -38,26 +38,12 @@ RCT_EXPORT_MODULE();
|
|
|
38
38
|
RCT_EXPORT_METHOD(checkNFCPermission:(RCTResponseSenderBlock)callback)
|
|
39
39
|
{
|
|
40
40
|
BOOL permission = [NFCNDEFReaderSession readingAvailable];
|
|
41
|
-
if (
|
|
42
|
-
|
|
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
|
-
}];
|
|
41
|
+
if (permission) {
|
|
42
|
+
callback(@[[NSNull null],@(permission),[NSNull null]]);
|
|
43
|
+
} else {
|
|
44
|
+
callback(@[@{@"code":@(NFCLiteExceptionsNotExistsNFC),@"message":@""},[NSNull null],[NSNull null]]);
|
|
60
45
|
}
|
|
46
|
+
|
|
61
47
|
}
|
|
62
48
|
|
|
63
49
|
RCT_EXPORT_METHOD(getLiteInfo:(RCTResponseSenderBlock)callBack)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/keys/keys.c
CHANGED
|
@@ -28,7 +28,7 @@ char *getInitParams() {
|
|
|
28
28
|
#ifdef __ANDROID__
|
|
29
29
|
|
|
30
30
|
JNIEXPORT jstring JNICALL
|
|
31
|
-
|
|
31
|
+
Java_so_onekey_app_wallet_lite_keys_KeysNativeProvider_getLiteSecureChannelInitParams(JNIEnv *env,
|
|
32
32
|
jobject this,
|
|
33
33
|
jobject context) {
|
|
34
34
|
char *result = getInitParams();
|
package/lib/commonjs/index.js
CHANGED
|
@@ -3,63 +3,18 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.default =
|
|
6
|
+
exports.default = void 0;
|
|
7
7
|
var _reactNative = require("react-native");
|
|
8
8
|
var _types = require("./types");
|
|
9
9
|
const {
|
|
10
10
|
OKLiteManager
|
|
11
11
|
} = _reactNative.NativeModules;
|
|
12
|
-
const LiteFlag = exports.LiteFlag = {
|
|
13
|
-
VERSION: '01',
|
|
14
|
-
LANGUAGE: '00',
|
|
15
|
-
// english
|
|
16
|
-
TAG: 'ffff'
|
|
17
|
-
};
|
|
18
|
-
const DEFAULT_FUNCTION = value => value;
|
|
19
12
|
class OnekeyLite {
|
|
20
13
|
UiEventEmitter = null;
|
|
21
|
-
mnemonicToEntropy = DEFAULT_FUNCTION;
|
|
22
|
-
entropyToMnemonic = DEFAULT_FUNCTION;
|
|
23
|
-
entropyToMnemonicV2 = DEFAULT_FUNCTION;
|
|
24
14
|
constructor() {
|
|
25
15
|
if (_reactNative.Platform.OS !== 'android') return;
|
|
26
16
|
this.UiEventEmitter = new _reactNative.NativeEventEmitter(OKLiteManager);
|
|
27
17
|
}
|
|
28
|
-
async encodeMnemonic(version, language, mnemonic) {
|
|
29
|
-
const meta = LiteFlag.TAG + version + language;
|
|
30
|
-
const enMnemonic = await this.mnemonicToEntropy(mnemonic.trim()); // mnemonic to index
|
|
31
|
-
return enMnemonic + meta;
|
|
32
|
-
}
|
|
33
|
-
async decodeMnemonic(payload) {
|
|
34
|
-
try {
|
|
35
|
-
if (payload.length <= 8) return Buffer.from(payload, 'hex').toString().trim();
|
|
36
|
-
const meta = payload.slice(-8);
|
|
37
|
-
const regexp = /^ffff[a-f0-9]{4}$/;
|
|
38
|
-
if (regexp.test(meta)) {
|
|
39
|
-
const version = parseInt(meta.slice(4, 6), 10);
|
|
40
|
-
const enMnemonic = payload.slice(0, -8);
|
|
41
|
-
if (version === 1) {
|
|
42
|
-
const deMnemonic = await this.entropyToMnemonic(enMnemonic); // mnemonic to index
|
|
43
|
-
|
|
44
|
-
return deMnemonic.trim();
|
|
45
|
-
}
|
|
46
|
-
if (version === 2) {
|
|
47
|
-
const deMnemonic = await this.entropyToMnemonicV2(enMnemonic); // mnemonic to index
|
|
48
|
-
|
|
49
|
-
return deMnemonic.trim();
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// 当前版本不支持
|
|
53
|
-
return '';
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// 兼容 V0 旧版本
|
|
57
|
-
return Buffer.from(payload, 'hex').toString().trim();
|
|
58
|
-
} catch (error) {
|
|
59
|
-
// 数据解析报错
|
|
60
|
-
return '';
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
18
|
addConnectListener(listener) {
|
|
64
19
|
this.removeConnectListeners();
|
|
65
20
|
return this.UiEventEmitter?.addListener('nfc_ui_event', listener);
|
|
@@ -72,9 +27,6 @@ class OnekeyLite {
|
|
|
72
27
|
const eventEmitter = new _reactNative.NativeEventEmitter(OKLiteManager);
|
|
73
28
|
return eventEmitter.addListener('nfc_active_connection', () => {});
|
|
74
29
|
}
|
|
75
|
-
getCardName(result) {
|
|
76
|
-
OKLiteManager.getCardName(result);
|
|
77
|
-
}
|
|
78
30
|
getLiteInfo(result) {
|
|
79
31
|
OKLiteManager.getLiteInfo(result);
|
|
80
32
|
}
|
|
@@ -82,12 +34,12 @@ class OnekeyLite {
|
|
|
82
34
|
OKLiteManager.checkNFCPermission(result);
|
|
83
35
|
}
|
|
84
36
|
setMnemonic(mnemonic, pwd, result, overwrite = false) {
|
|
85
|
-
|
|
37
|
+
OKLiteManager.setMnemonic(mnemonic, pwd, overwrite, result);
|
|
86
38
|
}
|
|
87
39
|
getMnemonicWithPin(pwd, result) {
|
|
88
40
|
try {
|
|
89
41
|
OKLiteManager.getMnemonicWithPin(pwd, async (error, data, state) => {
|
|
90
|
-
result(error, data ? await
|
|
42
|
+
result(error, data ? await data : null, state);
|
|
91
43
|
});
|
|
92
44
|
} catch (error) {
|
|
93
45
|
result({
|
|
@@ -106,7 +58,11 @@ class OnekeyLite {
|
|
|
106
58
|
if (_reactNative.Platform.OS === 'android') OKLiteManager.cancel();
|
|
107
59
|
}
|
|
108
60
|
intoSetting() {
|
|
109
|
-
if (_reactNative.Platform.OS === 'android')
|
|
61
|
+
if (_reactNative.Platform.OS === 'android') {
|
|
62
|
+
OKLiteManager.intoSetting();
|
|
63
|
+
} else {
|
|
64
|
+
_reactNative.Linking.openSettings();
|
|
65
|
+
}
|
|
110
66
|
}
|
|
111
67
|
}
|
|
112
68
|
const onekeyLite = new OnekeyLite();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_types","OKLiteManager","NativeModules","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_types","OKLiteManager","NativeModules","OnekeyLite","UiEventEmitter","constructor","Platform","OS","NativeEventEmitter","addConnectListener","listener","removeConnectListeners","addListener","removeAllListeners","addAccordListener","eventEmitter","getLiteInfo","result","checkNFCPermission","setMnemonic","mnemonic","pwd","overwrite","getMnemonicWithPin","error","data","state","code","CardErrors","ExecFailure","message","changePin","oldPin","newPin","reset","cancel","intoSetting","Linking","openSettings","onekeyLite","_default","exports","default"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAOA,IAAAC,MAAA,GAAAD,OAAA;AAIA,MAAM;EAAEE;AAAc,CAAC,GAAGC,0BAAa;AAOvC,MAAMC,UAAU,CAAC;EACfC,cAAc,GAA8B,IAAI;EAEhDC,WAAWA,CAAA,EAAG;IACZ,IAAIC,qBAAQ,CAACC,EAAE,KAAK,SAAS,EAAE;IAC/B,IAAI,CAACH,cAAc,GAAG,IAAII,+BAAkB,CAACP,aAAa,CAAC;EAC7D;EAEAQ,kBAAkBA,CAACC,QAA4C,EAAE;IAC/D,IAAI,CAACC,sBAAsB,CAAC,CAAC;IAC7B,OAAO,IAAI,CAACP,cAAc,EAAEQ,WAAW,CAAC,cAAc,EAAEF,QAAQ,CAAC;EACnE;EAEAC,sBAAsBA,CAAA,EAAG;IACvB,OAAO,IAAI,CAACP,cAAc,EAAES,kBAAkB,CAAC,cAAc,CAAC;EAChE;EAEAC,iBAAiBA,CAAA,EAAG;IAClB,IAAIR,qBAAQ,CAACC,EAAE,KAAK,SAAS,EAAE;IAC/B,MAAMQ,YAAY,GAAG,IAAIP,+BAAkB,CAACP,aAAa,CAAC;IAC1D,OAAOc,YAAY,CAACH,WAAW,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC,CAAC;EACpE;EAEAI,WAAWA,CAACC,MAA0B,EAAE;IACtChB,aAAa,CAACe,WAAW,CAACC,MAAM,CAAC;EACnC;EAEAC,kBAAkBA,CAACD,MAAyB,EAAE;IAC5ChB,aAAa,CAACiB,kBAAkB,CAACD,MAAM,CAAC;EAC1C;EAEAE,WAAWA,CACTC,QAAgB,EAChBC,GAAW,EACXJ,MAAyB,EACzBK,SAAS,GAAG,KAAK,EACjB;IACArB,aAAa,CAACkB,WAAW,CAACC,QAAQ,EAAEC,GAAG,EAAEC,SAAS,EAAEL,MAAM,CAAC;EAC7D;EAEAM,kBAAkBA,CAACF,GAAW,EAAEJ,MAAwB,EAAE;IACxD,IAAI;MACFhB,aAAa,CAACsB,kBAAkB,CAC9BF,GAAG,EACH,OACEG,KAA2B,EAC3BC,IAAmB,EACnBC,KAAsB,KACnB;QACHT,MAAM,CAACO,KAAK,EAAEC,IAAI,GAAG,MAAMA,IAAI,GAAG,IAAI,EAAEC,KAAK,CAAC;MAChD,CACF,CAAC;IACH,CAAC,CAAC,OAAOF,KAAK,EAAE;MACdP,MAAM,CAAC;QAAEU,IAAI,EAAEC,iBAAU,CAACC,WAAW;QAAEC,OAAO,EAAE;MAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IACrE;EACF;EAEAC,SAASA,CAACC,MAAc,EAAEC,MAAc,EAAEhB,MAAyB,EAAE;IACnEhB,aAAa,CAAC8B,SAAS,CAACC,MAAM,EAAEC,MAAM,EAAEhB,MAAM,CAAC;EACjD;EAEAiB,KAAKA,CAACjB,MAAyB,EAAE;IAC/BhB,aAAa,CAACiC,KAAK,CAACjB,MAAM,CAAC;EAC7B;EAEAkB,MAAMA,CAAA,EAAG;IACP,IAAI7B,qBAAQ,CAACC,EAAE,KAAK,SAAS,EAAEN,aAAa,CAACkC,MAAM,CAAC,CAAC;EACvD;EAEAC,WAAWA,CAAA,EAAG;IACZ,IAAI9B,qBAAQ,CAACC,EAAE,KAAK,SAAS,EAAE;MAC7BN,aAAa,CAACmC,WAAW,CAAC,CAAC;IAC7B,CAAC,MAAM;MACLC,oBAAO,CAACC,YAAY,CAAC,CAAC;IACxB;EACF;AACF;AAEA,MAAMC,UAAU,GAAG,IAAIpC,UAAU,CAAC,CAAC;AAAC,IAAAqC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GACrBH,UAAU"}
|
package/lib/module/index.js
CHANGED
|
@@ -1,59 +1,14 @@
|
|
|
1
|
-
import { NativeEventEmitter, NativeModules, Platform } from 'react-native';
|
|
1
|
+
import { Linking, NativeEventEmitter, NativeModules, Platform } from 'react-native';
|
|
2
2
|
import { CardErrors } from './types';
|
|
3
3
|
const {
|
|
4
4
|
OKLiteManager
|
|
5
5
|
} = NativeModules;
|
|
6
|
-
export const LiteFlag = {
|
|
7
|
-
VERSION: '01',
|
|
8
|
-
LANGUAGE: '00',
|
|
9
|
-
// english
|
|
10
|
-
TAG: 'ffff'
|
|
11
|
-
};
|
|
12
|
-
const DEFAULT_FUNCTION = value => value;
|
|
13
6
|
class OnekeyLite {
|
|
14
7
|
UiEventEmitter = null;
|
|
15
|
-
mnemonicToEntropy = DEFAULT_FUNCTION;
|
|
16
|
-
entropyToMnemonic = DEFAULT_FUNCTION;
|
|
17
|
-
entropyToMnemonicV2 = DEFAULT_FUNCTION;
|
|
18
8
|
constructor() {
|
|
19
9
|
if (Platform.OS !== 'android') return;
|
|
20
10
|
this.UiEventEmitter = new NativeEventEmitter(OKLiteManager);
|
|
21
11
|
}
|
|
22
|
-
async encodeMnemonic(version, language, mnemonic) {
|
|
23
|
-
const meta = LiteFlag.TAG + version + language;
|
|
24
|
-
const enMnemonic = await this.mnemonicToEntropy(mnemonic.trim()); // mnemonic to index
|
|
25
|
-
return enMnemonic + meta;
|
|
26
|
-
}
|
|
27
|
-
async decodeMnemonic(payload) {
|
|
28
|
-
try {
|
|
29
|
-
if (payload.length <= 8) return Buffer.from(payload, 'hex').toString().trim();
|
|
30
|
-
const meta = payload.slice(-8);
|
|
31
|
-
const regexp = /^ffff[a-f0-9]{4}$/;
|
|
32
|
-
if (regexp.test(meta)) {
|
|
33
|
-
const version = parseInt(meta.slice(4, 6), 10);
|
|
34
|
-
const enMnemonic = payload.slice(0, -8);
|
|
35
|
-
if (version === 1) {
|
|
36
|
-
const deMnemonic = await this.entropyToMnemonic(enMnemonic); // mnemonic to index
|
|
37
|
-
|
|
38
|
-
return deMnemonic.trim();
|
|
39
|
-
}
|
|
40
|
-
if (version === 2) {
|
|
41
|
-
const deMnemonic = await this.entropyToMnemonicV2(enMnemonic); // mnemonic to index
|
|
42
|
-
|
|
43
|
-
return deMnemonic.trim();
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// 当前版本不支持
|
|
47
|
-
return '';
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// 兼容 V0 旧版本
|
|
51
|
-
return Buffer.from(payload, 'hex').toString().trim();
|
|
52
|
-
} catch (error) {
|
|
53
|
-
// 数据解析报错
|
|
54
|
-
return '';
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
12
|
addConnectListener(listener) {
|
|
58
13
|
this.removeConnectListeners();
|
|
59
14
|
return this.UiEventEmitter?.addListener('nfc_ui_event', listener);
|
|
@@ -66,9 +21,6 @@ class OnekeyLite {
|
|
|
66
21
|
const eventEmitter = new NativeEventEmitter(OKLiteManager);
|
|
67
22
|
return eventEmitter.addListener('nfc_active_connection', () => {});
|
|
68
23
|
}
|
|
69
|
-
getCardName(result) {
|
|
70
|
-
OKLiteManager.getCardName(result);
|
|
71
|
-
}
|
|
72
24
|
getLiteInfo(result) {
|
|
73
25
|
OKLiteManager.getLiteInfo(result);
|
|
74
26
|
}
|
|
@@ -76,12 +28,12 @@ class OnekeyLite {
|
|
|
76
28
|
OKLiteManager.checkNFCPermission(result);
|
|
77
29
|
}
|
|
78
30
|
setMnemonic(mnemonic, pwd, result, overwrite = false) {
|
|
79
|
-
|
|
31
|
+
OKLiteManager.setMnemonic(mnemonic, pwd, overwrite, result);
|
|
80
32
|
}
|
|
81
33
|
getMnemonicWithPin(pwd, result) {
|
|
82
34
|
try {
|
|
83
35
|
OKLiteManager.getMnemonicWithPin(pwd, async (error, data, state) => {
|
|
84
|
-
result(error, data ? await
|
|
36
|
+
result(error, data ? await data : null, state);
|
|
85
37
|
});
|
|
86
38
|
} catch (error) {
|
|
87
39
|
result({
|
|
@@ -100,7 +52,11 @@ class OnekeyLite {
|
|
|
100
52
|
if (Platform.OS === 'android') OKLiteManager.cancel();
|
|
101
53
|
}
|
|
102
54
|
intoSetting() {
|
|
103
|
-
if (Platform.OS === 'android')
|
|
55
|
+
if (Platform.OS === 'android') {
|
|
56
|
+
OKLiteManager.intoSetting();
|
|
57
|
+
} else {
|
|
58
|
+
Linking.openSettings();
|
|
59
|
+
}
|
|
104
60
|
}
|
|
105
61
|
}
|
|
106
62
|
const onekeyLite = new OnekeyLite();
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeEventEmitter","NativeModules","Platform","CardErrors","OKLiteManager","
|
|
1
|
+
{"version":3,"names":["Linking","NativeEventEmitter","NativeModules","Platform","CardErrors","OKLiteManager","OnekeyLite","UiEventEmitter","constructor","OS","addConnectListener","listener","removeConnectListeners","addListener","removeAllListeners","addAccordListener","eventEmitter","getLiteInfo","result","checkNFCPermission","setMnemonic","mnemonic","pwd","overwrite","getMnemonicWithPin","error","data","state","code","ExecFailure","message","changePin","oldPin","newPin","reset","cancel","intoSetting","openSettings","onekeyLite"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA,SACEA,OAAO,EACPC,kBAAkB,EAClBC,aAAa,EACbC,QAAQ,QACH,cAAc;AAErB,SAASC,UAAU,QAAQ,SAAS;AAIpC,MAAM;EAAEC;AAAc,CAAC,GAAGH,aAAa;AAOvC,MAAMI,UAAU,CAAC;EACfC,cAAc,GAA8B,IAAI;EAEhDC,WAAWA,CAAA,EAAG;IACZ,IAAIL,QAAQ,CAACM,EAAE,KAAK,SAAS,EAAE;IAC/B,IAAI,CAACF,cAAc,GAAG,IAAIN,kBAAkB,CAACI,aAAa,CAAC;EAC7D;EAEAK,kBAAkBA,CAACC,QAA4C,EAAE;IAC/D,IAAI,CAACC,sBAAsB,CAAC,CAAC;IAC7B,OAAO,IAAI,CAACL,cAAc,EAAEM,WAAW,CAAC,cAAc,EAAEF,QAAQ,CAAC;EACnE;EAEAC,sBAAsBA,CAAA,EAAG;IACvB,OAAO,IAAI,CAACL,cAAc,EAAEO,kBAAkB,CAAC,cAAc,CAAC;EAChE;EAEAC,iBAAiBA,CAAA,EAAG;IAClB,IAAIZ,QAAQ,CAACM,EAAE,KAAK,SAAS,EAAE;IAC/B,MAAMO,YAAY,GAAG,IAAIf,kBAAkB,CAACI,aAAa,CAAC;IAC1D,OAAOW,YAAY,CAACH,WAAW,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC,CAAC;EACpE;EAEAI,WAAWA,CAACC,MAA0B,EAAE;IACtCb,aAAa,CAACY,WAAW,CAACC,MAAM,CAAC;EACnC;EAEAC,kBAAkBA,CAACD,MAAyB,EAAE;IAC5Cb,aAAa,CAACc,kBAAkB,CAACD,MAAM,CAAC;EAC1C;EAEAE,WAAWA,CACTC,QAAgB,EAChBC,GAAW,EACXJ,MAAyB,EACzBK,SAAS,GAAG,KAAK,EACjB;IACAlB,aAAa,CAACe,WAAW,CAACC,QAAQ,EAAEC,GAAG,EAAEC,SAAS,EAAEL,MAAM,CAAC;EAC7D;EAEAM,kBAAkBA,CAACF,GAAW,EAAEJ,MAAwB,EAAE;IACxD,IAAI;MACFb,aAAa,CAACmB,kBAAkB,CAC9BF,GAAG,EACH,OACEG,KAA2B,EAC3BC,IAAmB,EACnBC,KAAsB,KACnB;QACHT,MAAM,CAACO,KAAK,EAAEC,IAAI,GAAG,MAAMA,IAAI,GAAG,IAAI,EAAEC,KAAK,CAAC;MAChD,CACF,CAAC;IACH,CAAC,CAAC,OAAOF,KAAK,EAAE;MACdP,MAAM,CAAC;QAAEU,IAAI,EAAExB,UAAU,CAACyB,WAAW;QAAEC,OAAO,EAAE;MAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IACrE;EACF;EAEAC,SAASA,CAACC,MAAc,EAAEC,MAAc,EAAEf,MAAyB,EAAE;IACnEb,aAAa,CAAC0B,SAAS,CAACC,MAAM,EAAEC,MAAM,EAAEf,MAAM,CAAC;EACjD;EAEAgB,KAAKA,CAAChB,MAAyB,EAAE;IAC/Bb,aAAa,CAAC6B,KAAK,CAAChB,MAAM,CAAC;EAC7B;EAEAiB,MAAMA,CAAA,EAAG;IACP,IAAIhC,QAAQ,CAACM,EAAE,KAAK,SAAS,EAAEJ,aAAa,CAAC8B,MAAM,CAAC,CAAC;EACvD;EAEAC,WAAWA,CAAA,EAAG;IACZ,IAAIjC,QAAQ,CAACM,EAAE,KAAK,SAAS,EAAE;MAC7BJ,aAAa,CAAC+B,WAAW,CAAC,CAAC;IAC7B,CAAC,MAAM;MACLpC,OAAO,CAACqC,YAAY,CAAC,CAAC;IACxB;EACF;AACF;AAEA,MAAMC,UAAU,GAAG,IAAIhC,UAAU,CAAC,CAAC;AACnC,eAAegC,UAAU"}
|
|
@@ -1,26 +1,15 @@
|
|
|
1
1
|
import { NativeEventEmitter } from 'react-native';
|
|
2
2
|
import type { Callback, CardInfo } from './types';
|
|
3
|
-
export declare const LiteFlag: {
|
|
4
|
-
VERSION: string;
|
|
5
|
-
LANGUAGE: string;
|
|
6
|
-
TAG: string;
|
|
7
|
-
};
|
|
8
3
|
export type NfcConnectUiState = {
|
|
9
4
|
code: number;
|
|
10
5
|
message: string;
|
|
11
6
|
};
|
|
12
7
|
declare class OnekeyLite {
|
|
13
8
|
UiEventEmitter: NativeEventEmitter | null;
|
|
14
|
-
mnemonicToEntropy: (value: string) => string;
|
|
15
|
-
entropyToMnemonic: (value: string) => string;
|
|
16
|
-
entropyToMnemonicV2: (value: string) => string;
|
|
17
9
|
constructor();
|
|
18
|
-
encodeMnemonic(version: string, language: string, mnemonic: string): Promise<string>;
|
|
19
|
-
decodeMnemonic(payload: string): Promise<string>;
|
|
20
10
|
addConnectListener(listener: (event: NfcConnectUiState) => void): import("react-native").EmitterSubscription | undefined;
|
|
21
11
|
removeConnectListeners(): void | undefined;
|
|
22
12
|
addAccordListener(): import("react-native").EmitterSubscription | undefined;
|
|
23
|
-
getCardName(result: Callback<string>): void;
|
|
24
13
|
getLiteInfo(result: Callback<CardInfo>): void;
|
|
25
14
|
checkNFCPermission(result: Callback<boolean>): void;
|
|
26
15
|
setMnemonic(mnemonic: string, pwd: string, result: Callback<boolean>, overwrite?: boolean): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,kBAAkB,EAGnB,MAAM,cAAc,CAAC;AAItB,OAAO,KAAK,EAAE,QAAQ,EAAiB,QAAQ,EAAE,MAAM,SAAS,CAAC;AAIjE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,cAAM,UAAU;IACd,cAAc,EAAE,kBAAkB,GAAG,IAAI,CAAQ;;IAOjD,kBAAkB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI;IAK/D,sBAAsB;IAItB,iBAAiB;IAMjB,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAItC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC;IAI5C,WAAW,CACT,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,EACzB,SAAS,UAAQ;IAKnB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;IAiBxD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC;IAInE,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC;IAI/B,MAAM;IAIN,WAAW;CAOZ;AAED,QAAA,MAAM,UAAU,YAAmB,CAAC;AACpC,eAAe,UAAU,CAAC"}
|
package/package.json
CHANGED
|
@@ -14,7 +14,7 @@ Pod::Spec.new do |s|
|
|
|
14
14
|
s.platforms = { :ios => "11.0" }
|
|
15
15
|
s.source = { :git => "https://github.com/OneKeyHQ/react-native-lite-card.git", :tag => "#{s.version}" }
|
|
16
16
|
|
|
17
|
-
s.source_files = "ios/Classes/**/*" "keys/**/*"
|
|
17
|
+
s.source_files = "ios/Classes/**/*", "keys/**/*"
|
|
18
18
|
s.vendored_framework = "ios/GPChannelSDKCore.framework"
|
|
19
19
|
|
|
20
20
|
# Use install_modules_dependencies helper to install the dependencies if React Native version >=0.71.0.
|
package/src/index.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
Linking,
|
|
3
|
+
NativeEventEmitter,
|
|
4
|
+
NativeModules,
|
|
5
|
+
Platform,
|
|
6
|
+
} from 'react-native';
|
|
2
7
|
|
|
3
8
|
import { CardErrors } from './types';
|
|
4
9
|
|
|
@@ -6,78 +11,19 @@ import type { Callback, CallbackError, CardInfo } from './types';
|
|
|
6
11
|
|
|
7
12
|
const { OKLiteManager } = NativeModules;
|
|
8
13
|
|
|
9
|
-
export const LiteFlag = {
|
|
10
|
-
VERSION: '01',
|
|
11
|
-
LANGUAGE: '00', // english
|
|
12
|
-
TAG: 'ffff',
|
|
13
|
-
};
|
|
14
|
-
|
|
15
14
|
export type NfcConnectUiState = {
|
|
16
15
|
code: number;
|
|
17
16
|
message: string;
|
|
18
17
|
};
|
|
19
18
|
|
|
20
|
-
const DEFAULT_FUNCTION = (value: string) => value;
|
|
21
|
-
|
|
22
19
|
class OnekeyLite {
|
|
23
20
|
UiEventEmitter: NativeEventEmitter | null = null;
|
|
24
21
|
|
|
25
|
-
mnemonicToEntropy = DEFAULT_FUNCTION;
|
|
26
|
-
|
|
27
|
-
entropyToMnemonic = DEFAULT_FUNCTION;
|
|
28
|
-
entropyToMnemonicV2 = DEFAULT_FUNCTION;
|
|
29
|
-
|
|
30
22
|
constructor() {
|
|
31
23
|
if (Platform.OS !== 'android') return;
|
|
32
24
|
this.UiEventEmitter = new NativeEventEmitter(OKLiteManager);
|
|
33
25
|
}
|
|
34
26
|
|
|
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
27
|
addConnectListener(listener: (event: NfcConnectUiState) => void) {
|
|
82
28
|
this.removeConnectListeners();
|
|
83
29
|
return this.UiEventEmitter?.addListener('nfc_ui_event', listener);
|
|
@@ -93,10 +39,6 @@ class OnekeyLite {
|
|
|
93
39
|
return eventEmitter.addListener('nfc_active_connection', () => {});
|
|
94
40
|
}
|
|
95
41
|
|
|
96
|
-
getCardName(result: Callback<string>) {
|
|
97
|
-
OKLiteManager.getCardName(result);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
42
|
getLiteInfo(result: Callback<CardInfo>) {
|
|
101
43
|
OKLiteManager.getLiteInfo(result);
|
|
102
44
|
}
|
|
@@ -111,9 +53,7 @@ class OnekeyLite {
|
|
|
111
53
|
result: Callback<boolean>,
|
|
112
54
|
overwrite = false
|
|
113
55
|
) {
|
|
114
|
-
|
|
115
|
-
(payload) => OKLiteManager.setMnemonic(payload, pwd, overwrite, result)
|
|
116
|
-
);
|
|
56
|
+
OKLiteManager.setMnemonic(mnemonic, pwd, overwrite, result);
|
|
117
57
|
}
|
|
118
58
|
|
|
119
59
|
getMnemonicWithPin(pwd: string, result: Callback<string>) {
|
|
@@ -125,7 +65,7 @@ class OnekeyLite {
|
|
|
125
65
|
data: string | null,
|
|
126
66
|
state: CardInfo | null
|
|
127
67
|
) => {
|
|
128
|
-
result(error, data ? await
|
|
68
|
+
result(error, data ? await data : null, state);
|
|
129
69
|
}
|
|
130
70
|
);
|
|
131
71
|
} catch (error) {
|
|
@@ -146,7 +86,11 @@ class OnekeyLite {
|
|
|
146
86
|
}
|
|
147
87
|
|
|
148
88
|
intoSetting() {
|
|
149
|
-
if (Platform.OS === 'android')
|
|
89
|
+
if (Platform.OS === 'android') {
|
|
90
|
+
OKLiteManager.intoSetting();
|
|
91
|
+
} else {
|
|
92
|
+
Linking.openSettings();
|
|
93
|
+
}
|
|
150
94
|
}
|
|
151
95
|
}
|
|
152
96
|
|
/package/android/src/main/java/so/onekey/app/wallet/{nfc → lite/nfc}/gpchannel/GPChannelNatives.kt
RENAMED
|
File without changes
|