Skip to content

Commit 22cde65

Browse files
committed
keyType can be derived from ManagementKeyMetadata
1 parent a322a29 commit 22cde65

File tree

3 files changed

+14
-53
lines changed

3 files changed

+14
-53
lines changed

FullStackTests/Tests/PIVFullStackTests.swift

Lines changed: 3 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -655,39 +655,7 @@ struct PIVFullStackTests {
655655
@Test("Authenticate with Default Management Key", .tags(.pivAuthentication))
656656
func authenticateWithDefaultManagementKey() async throws {
657657
try await withPIVSession { session in
658-
let keyType: PIV.ManagementKeyType
659-
if session.supports(PIVSessionFeature.metadata) {
660-
let metadata = try await session.getManagementKeyMetadata()
661-
keyType = metadata.keyType
662-
} else {
663-
keyType = .tripleDES
664-
}
665-
try await session.authenticateWith(managementKey: defaultManagementKey, keyType: keyType)
666-
}
667-
}
668-
669-
@Test("Set 3DES Management Key", .tags(.pivAuthentication))
670-
func set3DESManagementKey() async throws {
671-
try await withPIVSession(authenticated: true) { session in
672-
try requireFeatureSupport(PIVSessionFeature.aesKey, in: session)
673-
674-
let newManagementKey = Data(hexEncodedString: "3ec950f1c126b314a80edd752694c328656db96f1c65cc4f")!
675-
try await session.setManagementKey(newManagementKey, type: .tripleDES, requiresTouch: false)
676-
try await session.authenticateWith(
677-
managementKey: newManagementKey,
678-
keyType: PIV.ManagementKeyType.tripleDES
679-
)
680-
}
681-
}
682-
683-
@Test("Set AES Management Key", .tags(.pivAuthentication))
684-
func setAESManagementKey() async throws {
685-
try await withPIVSession(authenticated: true) { session in
686-
try requireFeatureSupport(PIVSessionFeature.aesKey, in: session)
687-
688-
let newManagementKey = Data(hexEncodedString: "f7ef787b46aa50de066bdade00aee17fc2b710372b722de5")!
689-
try await session.setManagementKey(newManagementKey, type: .AES192, requiresTouch: false)
690-
try await session.authenticateWith(managementKey: newManagementKey, keyType: .AES192)
658+
try await session.authenticateWith(managementKey: defaultManagementKey)
691659
}
692660
}
693661

@@ -696,14 +664,7 @@ struct PIVFullStackTests {
696664
try await withPIVSession { session in
697665
let wrongManagementKey = Data(hexEncodedString: "010101010101010101010101010101010101010101010101")!
698666
do {
699-
let keyType: PIV.ManagementKeyType
700-
if session.supports(PIVSessionFeature.metadata) {
701-
let metadata = try await session.getManagementKeyMetadata()
702-
keyType = metadata.keyType
703-
} else {
704-
keyType = .tripleDES
705-
}
706-
try await session.authenticateWith(managementKey: wrongManagementKey, keyType: keyType)
667+
try await session.authenticateWith(managementKey: wrongManagementKey)
707668
Issue.record("Successfully authenticated with the wrong management key.")
708669
} catch {
709670
guard let error = error as? ResponseError else {
@@ -1142,15 +1103,7 @@ struct PIVFullStackTests {
11421103
try await session.reset()
11431104

11441105
if authenticated {
1145-
// Authenticate with proper key type detection
1146-
let keyType: PIV.ManagementKeyType
1147-
if session.supports(PIVSessionFeature.metadata) {
1148-
let metadata = try await session.getManagementKeyMetadata()
1149-
keyType = metadata.keyType
1150-
} else {
1151-
keyType = .tripleDES
1152-
}
1153-
try await session.authenticateWith(managementKey: defaultManagementKey, keyType: keyType)
1106+
try await session.authenticateWith(managementKey: defaultManagementKey)
11541107
}
11551108

11561109
return try await body(session)

YubiKit/YubiKit/PIV/PIVSession.swift

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -522,9 +522,17 @@ public final actor PIVSession: Session {
522522
/// Authenticate with the Management Key.
523523
/// - Parameters:
524524
/// - managementKey: The management key as Data.
525-
/// - keyType: The management key type.
526-
public func authenticateWith(managementKey: Data, keyType: PIV.ManagementKeyType) async throws {
525+
public func authenticateWith(managementKey: Data) async throws {
527526
Logger.piv.debug("\(String(describing: self).lastComponent), \(#function)")
527+
528+
let keyType: PIV.ManagementKeyType
529+
if supports(PIVSessionFeature.metadata) {
530+
let metadata = try await getManagementKeyMetadata()
531+
keyType = metadata.keyType
532+
} else {
533+
keyType = .tripleDES
534+
}
535+
528536
guard keyType.keyLength == managementKey.count else { throw PIV.SessionError.invalidKeyLength }
529537

530538
let ccAlgorithm =

YubiKit/YubiKit/YubiKit.docc/Resources/PIVSessionExtension.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
- ``getCertificateInSlot(_:)``
2626
- ``deleteCertificateInSlot(slot:)``
2727
- ``setManagementKey(_:type:requiresTouch:)``
28-
- ``authenticateWith(managementKey:keyType:)``
28+
- ``authenticateWith(managementKey:)``
2929
- ``getSlotMetadata(_:)``
3030
- ``getManagementKeyMetadata()``
3131
- ``reset()``

0 commit comments

Comments
 (0)