@@ -29,58 +29,58 @@ public protocol SecKeyConvertible: SecKeyRepresentable {
2929/// NIST P-256 (also known as `secp256r1` / `prime256r1` / `prime256v1`).
3030
3131extension P256 . Signing . PrivateKey : SecKeyConvertible {
32- public var secKeyDescriptor : SecKeyDescriptor { . ecPrivateKey }
32+ public static var keyDescriptor : SecKeyDescriptor { . ecPrivateKey }
3333}
3434extension P256 . Signing . PublicKey : SecKeyConvertible {
35- public var secKeyDescriptor : SecKeyDescriptor { . ecPublicKey }
35+ public static var keyDescriptor : SecKeyDescriptor { . ecPublicKey }
3636}
3737
3838extension P256 . KeyAgreement . PrivateKey : SecKeyConvertible {
39- public var secKeyDescriptor : SecKeyDescriptor { . ecPrivateKey }
39+ public static var keyDescriptor : SecKeyDescriptor { . ecPrivateKey }
4040}
4141extension P256 . KeyAgreement . PublicKey : SecKeyConvertible {
42- public var secKeyDescriptor : SecKeyDescriptor { . ecPublicKey }
42+ public static var keyDescriptor : SecKeyDescriptor { . ecPublicKey }
4343}
4444
4545/// NIST P-384 (also known as `secp384r1` ).
4646
4747extension P384 . Signing . PrivateKey : SecKeyConvertible {
48- public var secKeyDescriptor : SecKeyDescriptor { . ecPrivateKey }
48+ public static var keyDescriptor : SecKeyDescriptor { . ecPrivateKey }
4949}
5050
5151extension P384 . Signing . PublicKey : SecKeyConvertible {
52- public var secKeyDescriptor : SecKeyDescriptor { . ecPublicKey }
52+ public static var keyDescriptor : SecKeyDescriptor { . ecPublicKey }
5353}
5454
5555extension P384 . KeyAgreement . PrivateKey : SecKeyConvertible {
56- public var secKeyDescriptor : SecKeyDescriptor { . ecPrivateKey }
56+ public static var keyDescriptor : SecKeyDescriptor { . ecPrivateKey }
5757}
5858
5959extension P384 . KeyAgreement . PublicKey : SecKeyConvertible {
60- public var secKeyDescriptor : SecKeyDescriptor { . ecPublicKey }
60+ public static var keyDescriptor : SecKeyDescriptor { . ecPublicKey }
6161}
6262
6363/// NIST P-521 (also known as `secp521r1` ).
6464
6565extension P521 . Signing . PrivateKey : SecKeyConvertible {
66- public var secKeyDescriptor : SecKeyDescriptor { . ecPrivateKey }
66+ public static var keyDescriptor : SecKeyDescriptor { . ecPrivateKey }
6767}
6868extension P521 . Signing . PublicKey : SecKeyConvertible {
69- public var secKeyDescriptor : SecKeyDescriptor { . ecPublicKey }
69+ public static var keyDescriptor : SecKeyDescriptor { . ecPublicKey }
7070}
7171
7272extension P521 . KeyAgreement . PrivateKey : SecKeyConvertible {
73- public var secKeyDescriptor : SecKeyDescriptor { . ecPrivateKey }
73+ public static var keyDescriptor : SecKeyDescriptor { . ecPrivateKey }
7474}
7575extension P521 . KeyAgreement . PublicKey : SecKeyConvertible {
76- public var secKeyDescriptor : SecKeyDescriptor { . ecPublicKey }
76+ public static var keyDescriptor : SecKeyDescriptor { . ecPublicKey }
7777}
7878
7979// MARK: - SecKey
8080
8181public protocol SecKeyRepresentable {
8282 /// A key descriptor for storage.
83- var secKeyDescriptor : SecKeyDescriptor { get }
83+ static var keyDescriptor : SecKeyDescriptor { get }
8484
8585 /// A key reference.
8686 var secKey : SecKey { get throws }
@@ -90,7 +90,7 @@ extension SecKeyConvertible {
9090 public var secKey : SecKey {
9191 get throws {
9292 let keyData : Data
93- switch secKeyDescriptor . keyType {
93+ switch keyType {
9494 case . ecsecPrimeRandom:
9595 // X9.63
9696 keyData = x963Representation
@@ -101,8 +101,8 @@ extension SecKeyConvertible {
101101
102102 var error : Unmanaged < CFError > ?
103103 guard let secKey: SecKey = SecKeyCreateWithData ( keyData as CFData , [
104- kSecAttrKeyType: secKeyDescriptor . keyType. rawValue,
105- kSecAttrKeyClass: secKeyDescriptor . keyClass. rawValue
104+ kSecAttrKeyType: keyType. rawValue,
105+ kSecAttrKeyClass: keyClass. rawValue
106106 ] as CFDictionary , & error) else {
107107 if let error = error? . takeRetainedValue ( ) {
108108 throw SwiftSecurityError ( error: error)
@@ -112,6 +112,16 @@ extension SecKeyConvertible {
112112 return secKey
113113 }
114114 }
115+
116+ /// The type of the key.
117+ public var keyType : KeyType {
118+ Self . keyDescriptor. keyType
119+ }
120+
121+ /// The role of the key.
122+ public var keyClass : KeyClass {
123+ Self . keyDescriptor. keyClass
124+ }
115125}
116126
117127public struct SecKeyDescriptor : Sendable {
0 commit comments