2

Given a SecKey, is there any way to infer its type (e.g. whether it is kSecAttrKeyTypeRSA or kSecAttrKeyTypeEC)?

I see SecKeyGetTypeID(), but it is unclear to me what key object this function operates on as it accepts no parameters.

Adam Johns
  • 35,397
  • 25
  • 123
  • 176

1 Answers1

5

You can retrieve the kSecAttrKeyType from the key and check if it is kSecAttrKeyTypeRSA (or kSecAttrKeyTypeEC). Example (taken from SwiftyRSA):

func isRSAKey(seckey: SecKey) -> Bool {
    guard let attributes = SecKeyCopyAttributes(seckey) as? [CFString: Any],
        let keyType = attributes[kSecAttrKeyType] as? String else {
            return false
    }

    let isRSA = keyType == (kSecAttrKeyTypeRSA as String)
    return isRSA
}
Martin R
  • 529,903
  • 94
  • 1,240
  • 1,382