@doko/react-native-yubikit 0.0.2 → 0.0.4

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/README.md CHANGED
@@ -1,7 +1,9 @@
1
- react-native-yubikit
1
+ # react-native-yubikit
2
2
 
3
3
  A React Native TurboModule wrapper around Yubico's native [YubiKit Android](https://developers.yubico.com/yubikit-android/) and [YubiKit iOS](https://developers.yubico.com/yubikit-ios/) SDKs, for talking to YubiKey hardware over USB and NFC.
4
4
 
5
+ ![react-native-yubikit](https://raw.githubusercontent.com/Doko-Demo-Doa/react-native-yubikit/main/.github/assets/yubikit-new.webp)
6
+
5
7
  [![npm version](https://img.shields.io/npm/v/@doko/react-native-yubikit?style=for-the-badge&color=blue)](https://www.npmjs.com/package/@doko/react-native-yubikit)
6
8
  [![Monthly downloads](https://img.shields.io/npm/dm/@doko/react-native-yubikit?style=for-the-badge)](https://www.npmjs.com/package/@doko/react-native-yubikit)
7
9
  [![New Architecture](https://img.shields.io/badge/New%20Architecture-Only-5f3dc4?style=for-the-badge)](https://reactnative.dev/docs/the-new-architecture/landing-page)
@@ -3,6 +3,7 @@ package com.yubikit
3
3
  import com.facebook.react.bridge.Arguments
4
4
  import com.facebook.react.bridge.Promise
5
5
  import com.facebook.react.bridge.ReactApplicationContext
6
+ import com.yubico.yubikit.core.smartcard.SmartCardConnection
6
7
  import com.yubico.yubikit.piv.PivSession
7
8
  import com.yubikit.utils.YubikitUtils.base64Decode
8
9
  import com.yubikit.utils.YubikitUtils.base64Encode
@@ -23,16 +24,27 @@ class YubikitPivModule(reactContext: ReactApplicationContext) :
23
24
 
24
25
  override fun getName(): String = NAME
25
26
 
27
+ // PIV security status (PIN verified, management key authenticated) is scoped to
28
+ // the SmartCardConnection, not the device - opening a new connection per call
29
+ // (the `connectionHandle == null` path) throws that status away between calls.
30
+ // Passing a connectionHandle held open via Core.requestConnection lets a
31
+ // verifyPin() followed by a rawSignOrDecrypt() see the same verified PIN.
26
32
  private inline fun <R> withPivSession(
27
33
  deviceHandle: String,
28
34
  promise: Promise,
35
+ connectionHandle: String? = null,
29
36
  crossinline block: (PivSession) -> R
30
37
  ) {
31
38
  moduleScope.launch {
32
39
  try {
33
- val result = YubiKitManagerHolder.withSmartCard(deviceHandle) { connection ->
34
- PivSession(connection).use { session ->
35
- block(session)
40
+ val result = if (connectionHandle != null) {
41
+ val connection = YubiKitManagerHolder.getConnection(connectionHandle) as SmartCardConnection
42
+ block(PivSession(connection))
43
+ } else {
44
+ YubiKitManagerHolder.withSmartCard(deviceHandle) { connection ->
45
+ PivSession(connection).use { session ->
46
+ block(session)
47
+ }
36
48
  }
37
49
  }
38
50
  @Suppress("UNCHECKED_CAST")
@@ -76,8 +88,13 @@ class YubikitPivModule(reactContext: ReactApplicationContext) :
76
88
  }
77
89
  }
78
90
 
79
- override fun verifyPin(deviceHandle: String, pin: String, promise: Promise) {
80
- withPivSession(deviceHandle, promise) { it.verifyPin(pin.toCharArray()) }
91
+ override fun verifyPin(
92
+ deviceHandle: String,
93
+ pin: String,
94
+ connectionHandle: String?,
95
+ promise: Promise
96
+ ) {
97
+ withPivSession(deviceHandle, promise, connectionHandle) { it.verifyPin(pin.toCharArray()) }
81
98
  }
82
99
 
83
100
  override fun getPinAttempts(deviceHandle: String, promise: Promise) {
@@ -187,29 +204,31 @@ class YubikitPivModule(reactContext: ReactApplicationContext) :
187
204
  }
188
205
  }
189
206
 
190
- override fun getSlotMetadata(deviceHandle: String, slot: String, promise: Promise) {
191
- moduleScope.launch {
192
- try {
193
- val meta = YubiKitManagerHolder.withSmartCard(deviceHandle) { connection ->
194
- PivSession(connection).use { session ->
195
- session.getSlotMetadata(slotFromString(slot))
196
- }
197
- }
198
- promise.resolve(Arguments.createMap().apply {
199
- putString("keyType", com.yubikit.utils.YubikitUtils.keyTypeToString(meta.keyType))
200
- putString("pinPolicy", com.yubikit.utils.YubikitUtils.pinPolicyToString(meta.pinPolicy))
201
- putString("touchPolicy", com.yubikit.utils.YubikitUtils.touchPolicyToString(meta.touchPolicy))
202
- putBoolean("generated", meta.isGenerated)
203
- meta.publicKeyValues?.let { putString("publicKey", base64Encode(it.encoded)) }
204
- })
205
- } catch (e: Exception) {
206
- promise.reject("PIV_ERROR", e.message, e)
207
+ override fun getSlotMetadata(
208
+ deviceHandle: String,
209
+ slot: String,
210
+ connectionHandle: String?,
211
+ promise: Promise
212
+ ) {
213
+ withPivSession(deviceHandle, promise, connectionHandle) { session ->
214
+ val meta = session.getSlotMetadata(slotFromString(slot))
215
+ Arguments.createMap().apply {
216
+ putString("keyType", com.yubikit.utils.YubikitUtils.keyTypeToString(meta.keyType))
217
+ putString("pinPolicy", com.yubikit.utils.YubikitUtils.pinPolicyToString(meta.pinPolicy))
218
+ putString("touchPolicy", com.yubikit.utils.YubikitUtils.touchPolicyToString(meta.touchPolicy))
219
+ putBoolean("generated", meta.isGenerated)
220
+ meta.publicKeyValues?.let { putString("publicKey", base64Encode(it.encoded)) }
207
221
  }
208
222
  }
209
223
  }
210
224
 
211
- override fun getCertificate(deviceHandle: String, slot: String, promise: Promise) {
212
- withPivSession(deviceHandle, promise) {
225
+ override fun getCertificate(
226
+ deviceHandle: String,
227
+ slot: String,
228
+ connectionHandle: String?,
229
+ promise: Promise
230
+ ) {
231
+ withPivSession(deviceHandle, promise, connectionHandle) {
213
232
  base64Encode(it.getCertificate(slotFromString(slot)).encoded)
214
233
  }
215
234
  }
@@ -272,9 +291,10 @@ class YubikitPivModule(reactContext: ReactApplicationContext) :
272
291
  slot: String,
273
292
  keyType: String,
274
293
  payload: String,
294
+ connectionHandle: String?,
275
295
  promise: Promise
276
296
  ) {
277
- withPivSession(deviceHandle, promise) {
297
+ withPivSession(deviceHandle, promise, connectionHandle) {
278
298
  base64Encode(
279
299
  it.rawSignOrDecrypt(
280
300
  slotFromString(slot),
package/ios/YubikitPiv.mm CHANGED
@@ -315,8 +315,14 @@ RCT_EXPORT_MODULE(YubikitPiv)
315
315
  }];
316
316
  }
317
317
 
318
+ // `connectionHandle` is accepted for API parity with Android, where PIN-verified
319
+ // status is scoped to the connection and a fresh one is opened per call unless a
320
+ // held connectionHandle is passed. iOS doesn't need it: connectionForHandle:
321
+ // already caches one persistent connection per deviceHandle, reused across calls,
322
+ // so verified PIN status here already survives to a later rawSignOrDecrypt call.
318
323
  - (void)verifyPin:(NSString *)deviceHandle
319
324
  pin:(NSString *)pin
325
+ connectionHandle:(nullable NSString *)connectionHandle
320
326
  resolve:(RCTPromiseResolveBlock)resolve
321
327
  reject:(RCTPromiseRejectBlock)reject {
322
328
  id<YKFConnectionProtocol> connection = [self connectionForHandle:deviceHandle reject:reject];
@@ -525,6 +531,7 @@ RCT_EXPORT_MODULE(YubikitPiv)
525
531
 
526
532
  - (void)getSlotMetadata:(NSString *)deviceHandle
527
533
  slot:(NSString *)slot
534
+ connectionHandle:(nullable NSString *)connectionHandle
528
535
  resolve:(RCTPromiseResolveBlock)resolve
529
536
  reject:(RCTPromiseRejectBlock)reject {
530
537
  id<YKFConnectionProtocol> connection = [self connectionForHandle:deviceHandle reject:reject];
@@ -557,6 +564,7 @@ RCT_EXPORT_MODULE(YubikitPiv)
557
564
 
558
565
  - (void)getCertificate:(NSString *)deviceHandle
559
566
  slot:(NSString *)slot
567
+ connectionHandle:(nullable NSString *)connectionHandle
560
568
  resolve:(RCTPromiseResolveBlock)resolve
561
569
  reject:(RCTPromiseRejectBlock)reject {
562
570
  id<YKFConnectionProtocol> connection = [self connectionForHandle:deviceHandle reject:reject];
@@ -719,6 +727,7 @@ RCT_EXPORT_MODULE(YubikitPiv)
719
727
  slot:(NSString *)slot
720
728
  keyType:(NSString *)keyType
721
729
  payload:(NSString *)payload
730
+ connectionHandle:(nullable NSString *)connectionHandle
722
731
  resolve:(RCTPromiseResolveBlock)resolve
723
732
  reject:(RCTPromiseRejectBlock)reject {
724
733
  id<YKFConnectionProtocol> connection = [self connectionForHandle:deviceHandle reject:reject];
package/lib/module/piv.js CHANGED
@@ -13,8 +13,14 @@ export function authenticate(deviceHandle, managementKey) {
13
13
  export function setManagementKey(deviceHandle, keyType, managementKey, requireTouch) {
14
14
  return NativeYubikitPiv.setManagementKey(deviceHandle, keyType, managementKey, requireTouch);
15
15
  }
16
- export function verifyPin(deviceHandle, pin) {
17
- return NativeYubikitPiv.verifyPin(deviceHandle, pin);
16
+
17
+ /**
18
+ * Pass `connectionHandle` (from `Core.requestConnection`) to run this on an
19
+ * already-open connection instead of a one-off one - required if a later
20
+ * call (e.g. `rawSignOrDecrypt`) needs to see the verified PIN on Android.
21
+ */
22
+ export function verifyPin(deviceHandle, pin, connectionHandle) {
23
+ return NativeYubikitPiv.verifyPin(deviceHandle, pin, connectionHandle);
18
24
  }
19
25
  export function getPinAttempts(deviceHandle) {
20
26
  return NativeYubikitPiv.getPinAttempts(deviceHandle);
@@ -40,11 +46,11 @@ export function getPukMetadata(deviceHandle) {
40
46
  export function getManagementKeyMetadata(deviceHandle) {
41
47
  return NativeYubikitPiv.getManagementKeyMetadata(deviceHandle);
42
48
  }
43
- export function getSlotMetadata(deviceHandle, slot) {
44
- return NativeYubikitPiv.getSlotMetadata(deviceHandle, slot);
49
+ export function getSlotMetadata(deviceHandle, slot, connectionHandle) {
50
+ return NativeYubikitPiv.getSlotMetadata(deviceHandle, slot, connectionHandle);
45
51
  }
46
- export function getCertificate(deviceHandle, slot) {
47
- return NativeYubikitPiv.getCertificate(deviceHandle, slot);
52
+ export function getCertificate(deviceHandle, slot, connectionHandle) {
53
+ return NativeYubikitPiv.getCertificate(deviceHandle, slot, connectionHandle);
48
54
  }
49
55
  export function putCertificate(deviceHandle, slot, certificate, compress) {
50
56
  return NativeYubikitPiv.putCertificate(deviceHandle, slot, certificate, compress);
@@ -61,8 +67,8 @@ export function generateKey(deviceHandle, slot, keyType, pinPolicy, touchPolicy)
61
67
  export function deleteKey(deviceHandle, slot) {
62
68
  return NativeYubikitPiv.deleteKey(deviceHandle, slot);
63
69
  }
64
- export function rawSignOrDecrypt(deviceHandle, slot, keyType, payload) {
65
- return NativeYubikitPiv.rawSignOrDecrypt(deviceHandle, slot, keyType, payload);
70
+ export function rawSignOrDecrypt(deviceHandle, slot, keyType, payload, connectionHandle) {
71
+ return NativeYubikitPiv.rawSignOrDecrypt(deviceHandle, slot, keyType, payload, connectionHandle);
66
72
  }
67
73
  export function getBioMetadata(deviceHandle) {
68
74
  return NativeYubikitPiv.getBioMetadata(deviceHandle);
@@ -1 +1 @@
1
- {"version":3,"names":["NativeYubikitPiv","reset","deviceHandle","getSerialNumber","authenticate","managementKey","setManagementKey","keyType","requireTouch","verifyPin","pin","getPinAttempts","changePin","oldPin","newPin","changePuk","oldPuk","newPuk","unblockPin","puk","setPinAttempts","pinAttempts","pukAttempts","getPinMetadata","getPukMetadata","getManagementKeyMetadata","getSlotMetadata","slot","getCertificate","putCertificate","certificate","compress","deleteCertificate","attestKey","generateKey","pinPolicy","touchPolicy","deleteKey","rawSignOrDecrypt","payload","getBioMetadata"],"sourceRoot":"../../src","sources":["piv.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["NativeYubikitPiv","reset","deviceHandle","getSerialNumber","authenticate","managementKey","setManagementKey","keyType","requireTouch","verifyPin","pin","connectionHandle","getPinAttempts","changePin","oldPin","newPin","changePuk","oldPuk","newPuk","unblockPin","puk","setPinAttempts","pinAttempts","pukAttempts","getPinMetadata","getPukMetadata","getManagementKeyMetadata","getSlotMetadata","slot","getCertificate","putCertificate","certificate","compress","deleteCertificate","attestKey","generateKey","pinPolicy","touchPolicy","deleteKey","rawSignOrDecrypt","payload","getBioMetadata"],"sourceRoot":"../../src","sources":["piv.ts"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../../src","sources":["specs/NativeYubikitPiv.ts"],"mappings":";;AAAA,SAASA,mBAAmB,QAA0B,cAAc;AA2GpE,eAAeA,mBAAmB,CAACC,YAAY,CAAO,YAAY,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../../src","sources":["specs/NativeYubikitPiv.ts"],"mappings":";;AAAA,SAASA,mBAAmB,QAA0B,cAAc;AA+HpE,eAAeA,mBAAmB,CAACC,YAAY,CAAO,YAAY,CAAC","ignoreList":[]}
@@ -4,7 +4,12 @@ export declare function reset(deviceHandle: string): Promise<void>;
4
4
  export declare function getSerialNumber(deviceHandle: string): Promise<number>;
5
5
  export declare function authenticate(deviceHandle: string, managementKey: Base64String): Promise<void>;
6
6
  export declare function setManagementKey(deviceHandle: string, keyType: PivManagementKeyType, managementKey: Base64String, requireTouch: boolean): Promise<void>;
7
- export declare function verifyPin(deviceHandle: string, pin: string): Promise<void>;
7
+ /**
8
+ * Pass `connectionHandle` (from `Core.requestConnection`) to run this on an
9
+ * already-open connection instead of a one-off one - required if a later
10
+ * call (e.g. `rawSignOrDecrypt`) needs to see the verified PIN on Android.
11
+ */
12
+ export declare function verifyPin(deviceHandle: string, pin: string, connectionHandle?: string): Promise<void>;
8
13
  export declare function getPinAttempts(deviceHandle: string): Promise<number>;
9
14
  export declare function changePin(deviceHandle: string, oldPin: string, newPin: string): Promise<void>;
10
15
  export declare function changePuk(deviceHandle: string, oldPuk: string, newPuk: string): Promise<void>;
@@ -13,14 +18,14 @@ export declare function setPinAttempts(deviceHandle: string, pinAttempts: number
13
18
  export declare function getPinMetadata(deviceHandle: string): Promise<PivPinMetadata>;
14
19
  export declare function getPukMetadata(deviceHandle: string): Promise<PivPinMetadata>;
15
20
  export declare function getManagementKeyMetadata(deviceHandle: string): Promise<PivManagementKeyMetadata>;
16
- export declare function getSlotMetadata(deviceHandle: string, slot: PivSlot): Promise<PivSlotMetadata>;
17
- export declare function getCertificate(deviceHandle: string, slot: PivSlot): Promise<Base64String>;
21
+ export declare function getSlotMetadata(deviceHandle: string, slot: PivSlot, connectionHandle?: string): Promise<PivSlotMetadata>;
22
+ export declare function getCertificate(deviceHandle: string, slot: PivSlot, connectionHandle?: string): Promise<Base64String>;
18
23
  export declare function putCertificate(deviceHandle: string, slot: PivSlot, certificate: Base64String, compress?: boolean): Promise<void>;
19
24
  export declare function deleteCertificate(deviceHandle: string, slot: PivSlot): Promise<void>;
20
25
  export declare function attestKey(deviceHandle: string, slot: PivSlot): Promise<Base64String>;
21
26
  export declare function generateKey(deviceHandle: string, slot: PivSlot, keyType: PivKeyType, pinPolicy: PivPinPolicy, touchPolicy: PivTouchPolicy): Promise<Base64String>;
22
27
  export declare function deleteKey(deviceHandle: string, slot: PivSlot): Promise<void>;
23
- export declare function rawSignOrDecrypt(deviceHandle: string, slot: PivSlot, keyType: PivKeyType, payload: Base64String): Promise<Base64String>;
28
+ export declare function rawSignOrDecrypt(deviceHandle: string, slot: PivSlot, keyType: PivKeyType, payload: Base64String, connectionHandle?: string): Promise<Base64String>;
24
29
  export declare function getBioMetadata(deviceHandle: string): Promise<PivBioMetadata>;
25
30
  export { NativeYubikitPiv };
26
31
  //# sourceMappingURL=piv.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"piv.d.ts","sourceRoot":"","sources":["../../../src/piv.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"piv.d.ts","sourceRoot":"","sources":["../../../src/piv.ts"],"names":[],"mappings":"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"}
@@ -23,7 +23,14 @@ export interface Spec extends TurboModule {
23
23
  getSerialNumber(deviceHandle: string): Promise<number>;
24
24
  authenticate(deviceHandle: string, managementKey: string): Promise<void>;
25
25
  setManagementKey(deviceHandle: string, keyType: string, managementKey: string, requireTouch: boolean): Promise<void>;
26
- verifyPin(deviceHandle: string, pin: string): Promise<void>;
26
+ /**
27
+ * `connectionHandle` (from `Core.requestConnection`) is optional - when
28
+ * omitted, a fresh connection is opened and closed for just this call. On
29
+ * Android, PIN-verified status is scoped to the connection, not the
30
+ * device, so verifying here and signing in a later call only sees the
31
+ * verified PIN if both calls share the same held connectionHandle.
32
+ */
33
+ verifyPin(deviceHandle: string, pin: string, connectionHandle?: string): Promise<void>;
27
34
  getPinAttempts(deviceHandle: string): Promise<number>;
28
35
  changePin(deviceHandle: string, oldPin: string, newPin: string): Promise<void>;
29
36
  changePuk(deviceHandle: string, oldPuk: string, newPuk: string): Promise<void>;
@@ -32,14 +39,14 @@ export interface Spec extends TurboModule {
32
39
  getPinMetadata(deviceHandle: string): Promise<PivPinMetadata>;
33
40
  getPukMetadata(deviceHandle: string): Promise<PivPinMetadata>;
34
41
  getManagementKeyMetadata(deviceHandle: string): Promise<PivManagementKeyMetadata>;
35
- getSlotMetadata(deviceHandle: string, slot: string): Promise<PivSlotMetadata>;
36
- getCertificate(deviceHandle: string, slot: string): Promise<string>;
42
+ getSlotMetadata(deviceHandle: string, slot: string, connectionHandle?: string): Promise<PivSlotMetadata>;
43
+ getCertificate(deviceHandle: string, slot: string, connectionHandle?: string): Promise<string>;
37
44
  putCertificate(deviceHandle: string, slot: string, certificate: string, compress?: boolean): Promise<void>;
38
45
  deleteCertificate(deviceHandle: string, slot: string): Promise<void>;
39
46
  attestKey(deviceHandle: string, slot: string): Promise<string>;
40
47
  generateKey(deviceHandle: string, slot: string, keyType: string, pinPolicy: string, touchPolicy: string): Promise<string>;
41
48
  deleteKey(deviceHandle: string, slot: string): Promise<void>;
42
- rawSignOrDecrypt(deviceHandle: string, slot: string, keyType: string, payload: string): Promise<string>;
49
+ rawSignOrDecrypt(deviceHandle: string, slot: string, keyType: string, payload: string, connectionHandle?: string): Promise<string>;
43
50
  getBioMetadata(deviceHandle: string): Promise<PivBioMetadata>;
44
51
  }
45
52
  declare const _default: Spec;
@@ -1 +1 @@
1
- {"version":3,"file":"NativeYubikitPiv.d.ts","sourceRoot":"","sources":["../../../../src/specs/NativeYubikitPiv.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NativeYubikitPiv.d.ts","sourceRoot":"","sources":["../../../../src/specs/NativeYubikitPiv.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@doko/react-native-yubikit",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "Yubikit bindings for React Native",
5
5
  "keywords": [
6
6
  "android",
@@ -50,18 +50,6 @@
50
50
  "access": "public",
51
51
  "registry": "https://registry.npmjs.org/"
52
52
  },
53
- "scripts": {
54
- "example": "pnpm --filter react-native-yubikit-example",
55
- "clean": "del-cli lib",
56
- "prepare": "bob build",
57
- "typecheck": "tsc",
58
- "lint": "oxlint",
59
- "lint:fix": "oxlint --fix",
60
- "format": "oxfmt",
61
- "format:check": "oxfmt --check",
62
- "test": "jest",
63
- "release": "release-it --only-version"
64
- },
65
53
  "devDependencies": {
66
54
  "@commitlint/config-conventional": "^21.2.0",
67
55
  "@jest/globals": "^29.7.0",
@@ -109,7 +97,6 @@
109
97
  ]
110
98
  }
111
99
  },
112
- "packageManager": "pnpm@11.10.0",
113
100
  "codegenConfig": {
114
101
  "name": "YubikitSpec",
115
102
  "type": "modules",
@@ -177,5 +164,16 @@
177
164
  }
178
165
  }
179
166
  }
167
+ },
168
+ "scripts": {
169
+ "example": "pnpm --filter react-native-yubikit-example",
170
+ "clean": "del-cli lib",
171
+ "typecheck": "tsc",
172
+ "lint": "oxlint",
173
+ "lint:fix": "oxlint --fix",
174
+ "format": "oxfmt",
175
+ "format:check": "oxfmt --check",
176
+ "test": "jest",
177
+ "release": "release-it --only-version"
180
178
  }
181
- }
179
+ }
package/src/piv.ts CHANGED
@@ -41,8 +41,17 @@ export function setManagementKey(
41
41
  );
42
42
  }
43
43
 
44
- export function verifyPin(deviceHandle: string, pin: string): Promise<void> {
45
- return NativeYubikitPiv.verifyPin(deviceHandle, pin);
44
+ /**
45
+ * Pass `connectionHandle` (from `Core.requestConnection`) to run this on an
46
+ * already-open connection instead of a one-off one - required if a later
47
+ * call (e.g. `rawSignOrDecrypt`) needs to see the verified PIN on Android.
48
+ */
49
+ export function verifyPin(
50
+ deviceHandle: string,
51
+ pin: string,
52
+ connectionHandle?: string
53
+ ): Promise<void> {
54
+ return NativeYubikitPiv.verifyPin(deviceHandle, pin, connectionHandle);
46
55
  }
47
56
 
48
57
  export function getPinAttempts(deviceHandle: string): Promise<number> {
@@ -107,19 +116,22 @@ export function getManagementKeyMetadata(
107
116
 
108
117
  export function getSlotMetadata(
109
118
  deviceHandle: string,
110
- slot: PivSlot
119
+ slot: PivSlot,
120
+ connectionHandle?: string
111
121
  ): Promise<PivSlotMetadata> {
112
122
  return NativeYubikitPiv.getSlotMetadata(
113
123
  deviceHandle,
114
- slot
124
+ slot,
125
+ connectionHandle
115
126
  ) as Promise<PivSlotMetadata>;
116
127
  }
117
128
 
118
129
  export function getCertificate(
119
130
  deviceHandle: string,
120
- slot: PivSlot
131
+ slot: PivSlot,
132
+ connectionHandle?: string
121
133
  ): Promise<Base64String> {
122
- return NativeYubikitPiv.getCertificate(deviceHandle, slot);
134
+ return NativeYubikitPiv.getCertificate(deviceHandle, slot, connectionHandle);
123
135
  }
124
136
 
125
137
  export function putCertificate(
@@ -174,13 +186,15 @@ export function rawSignOrDecrypt(
174
186
  deviceHandle: string,
175
187
  slot: PivSlot,
176
188
  keyType: PivKeyType,
177
- payload: Base64String
189
+ payload: Base64String,
190
+ connectionHandle?: string
178
191
  ): Promise<Base64String> {
179
192
  return NativeYubikitPiv.rawSignOrDecrypt(
180
193
  deviceHandle,
181
194
  slot,
182
195
  keyType,
183
- payload
196
+ payload,
197
+ connectionHandle
184
198
  );
185
199
  }
186
200
 
@@ -49,7 +49,18 @@ export interface Spec extends TurboModule {
49
49
  requireTouch: boolean
50
50
  ): Promise<void>;
51
51
 
52
- verifyPin(deviceHandle: string, pin: string): Promise<void>;
52
+ /**
53
+ * `connectionHandle` (from `Core.requestConnection`) is optional - when
54
+ * omitted, a fresh connection is opened and closed for just this call. On
55
+ * Android, PIN-verified status is scoped to the connection, not the
56
+ * device, so verifying here and signing in a later call only sees the
57
+ * verified PIN if both calls share the same held connectionHandle.
58
+ */
59
+ verifyPin(
60
+ deviceHandle: string,
61
+ pin: string,
62
+ connectionHandle?: string
63
+ ): Promise<void>;
53
64
  getPinAttempts(deviceHandle: string): Promise<number>;
54
65
  changePin(
55
66
  deviceHandle: string,
@@ -73,9 +84,17 @@ export interface Spec extends TurboModule {
73
84
  getManagementKeyMetadata(
74
85
  deviceHandle: string
75
86
  ): Promise<PivManagementKeyMetadata>;
76
- getSlotMetadata(deviceHandle: string, slot: string): Promise<PivSlotMetadata>;
87
+ getSlotMetadata(
88
+ deviceHandle: string,
89
+ slot: string,
90
+ connectionHandle?: string
91
+ ): Promise<PivSlotMetadata>;
77
92
 
78
- getCertificate(deviceHandle: string, slot: string): Promise<string>;
93
+ getCertificate(
94
+ deviceHandle: string,
95
+ slot: string,
96
+ connectionHandle?: string
97
+ ): Promise<string>;
79
98
  putCertificate(
80
99
  deviceHandle: string,
81
100
  slot: string,
@@ -99,7 +118,8 @@ export interface Spec extends TurboModule {
99
118
  deviceHandle: string,
100
119
  slot: string,
101
120
  keyType: string,
102
- payload: string
121
+ payload: string,
122
+ connectionHandle?: string
103
123
  ): Promise<string>;
104
124
 
105
125
  getBioMetadata(deviceHandle: string): Promise<PivBioMetadata>;