@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 +3 -1
- package/android/src/main/java/com/yubikit/YubikitPivModule.kt +45 -25
- package/ios/YubikitPiv.mm +9 -0
- package/lib/module/piv.js +14 -8
- package/lib/module/piv.js.map +1 -1
- package/lib/module/specs/NativeYubikitPiv.js.map +1 -1
- package/lib/typescript/src/piv.d.ts +9 -4
- package/lib/typescript/src/piv.d.ts.map +1 -1
- package/lib/typescript/src/specs/NativeYubikitPiv.d.ts +11 -4
- package/lib/typescript/src/specs/NativeYubikitPiv.d.ts.map +1 -1
- package/package.json +13 -15
- package/src/piv.ts +22 -8
- package/src/specs/NativeYubikitPiv.ts +24 -4
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
|
+

|
|
6
|
+
|
|
5
7
|
[](https://www.npmjs.com/package/@doko/react-native-yubikit)
|
|
6
8
|
[](https://www.npmjs.com/package/@doko/react-native-yubikit)
|
|
7
9
|
[](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 =
|
|
34
|
-
|
|
35
|
-
|
|
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(
|
|
80
|
-
|
|
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(
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
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(
|
|
212
|
-
|
|
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
|
-
|
|
17
|
-
|
|
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);
|
package/lib/module/piv.js.map
CHANGED
|
@@ -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":";;AAAA,OAAOA,gBAAgB,MAAM,6BAA0B;AAcvD,OAAO,SAASC,KAAKA,CAACC,YAAoB,EAAiB;EACzD,OAAOF,gBAAgB,CAACC,KAAK,CAACC,YAAY,CAAC;AAC7C;AAEA,OAAO,SAASC,eAAeA,CAACD,YAAoB,EAAmB;EACrE,OAAOF,gBAAgB,CAACG,eAAe,CAACD,YAAY,CAAC;AACvD;AAEA,OAAO,SAASE,YAAYA,CAC1BF,YAAoB,EACpBG,aAA2B,EACZ;EACf,OAAOL,gBAAgB,CAACI,YAAY,CAACF,YAAY,EAAEG,aAAa,CAAC;AACnE;AAEA,OAAO,SAASC,gBAAgBA,CAC9BJ,YAAoB,EACpBK,OAA6B,EAC7BF,aAA2B,EAC3BG,YAAqB,EACN;EACf,OAAOR,gBAAgB,CAACM,gBAAgB,CACtCJ,YAAY,EACZK,OAAO,EACPF,aAAa,EACbG,YACF,CAAC;AACH;
|
|
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;
|
|
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
|
-
|
|
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":"AAAA,OAAO,gBAAgB,MAAM,6BAA0B,CAAC;AACxD,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,UAAU,EACV,wBAAwB,EACxB,oBAAoB,EACpB,cAAc,EACd,YAAY,EACZ,OAAO,EACP,eAAe,EACf,cAAc,EACf,MAAM,YAAS,CAAC;AAEjB,wBAAgB,KAAK,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzD;AAED,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAErE;AAED,wBAAgB,YAAY,CAC1B,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,YAAY,GAC1B,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,oBAAoB,EAC7B,aAAa,EAAE,YAAY,EAC3B,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAgB,SAAS,
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAErE,UAAU,cAAc;IACtB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,UAAU,wBAAwB;IAChC,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACjD,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,UAAU,eAAe;IACvB,OAAO,EACH,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,QAAQ,CAAC;IACb,SAAS,EACL,SAAS,GACT,OAAO,GACP,MAAM,GACN,QAAQ,GACR,YAAY,GACZ,cAAc,CAAC;IACnB,WAAW,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACvD,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,cAAc;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,KAAK,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEvD,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,gBAAgB,CACd,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,SAAS,
|
|
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.
|
|
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
|
-
|
|
45
|
-
|
|
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
|
-
|
|
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(
|
|
87
|
+
getSlotMetadata(
|
|
88
|
+
deviceHandle: string,
|
|
89
|
+
slot: string,
|
|
90
|
+
connectionHandle?: string
|
|
91
|
+
): Promise<PivSlotMetadata>;
|
|
77
92
|
|
|
78
|
-
getCertificate(
|
|
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>;
|