Harendra
Harendra

Reputation: 249

SecKeyCopyKeyExchangeResult is not working in iOS 13.0

SecKeyCopyKeyExchangeResult call throwing the next error regardless what parameter supplied. It's working fine with iOS 13.0.

kSecKeyKeyExchangeParameterRequestedSize is missing

My code:

// Parameter value set here
let params = [SecKeyKeyExchangeParameter.requestedSize: 32, SecKeyKeyExchangeParameter.sharedInfo:Data()] as [SecKeyKeyExchangeParameter : Any]

// Function call:
let sharedSecret = try? generateSharedSecret(issuerPublicKey: issuerPublicKey!, parameters: params as [SecKeyKeyExchangeParameter : Any])

// Function
func generateSharedSecret(issuerPublicKey: SecKey, devicePrivateKey: SecKey, parameters:[SecKeyKeyExchangeParameter: Any] = [:]) throws -> Data? {
    var error: Unmanaged<CFError>?
    guard let shared = SecKeyCopyKeyExchangeResult(devicePrivateKey, .ecdhKeyExchangeCofactorX963SHA384, issuerPublicKey, parameters as CFDictionary, &error) else {
        throw error!.takeRetainedValue() as Error
    }

    return shared as Data
}

Parameter data:

▿ 2 elements
  ▿ 0 : 2 elements
    ▿ key : SecKeyKeyExchangeParameter
      - rawValue : requestedSize
    - value : 32
  ▿ 1 : 2 elements
    ▿ key : SecKeyKeyExchangeParameter
      - rawValue : sharedInfo
    ▿ value : 0 bytes
      - count : 0
      ▿ pointer : 0x000000016db58ac0
        - pointerValue : 6135581376
      - bytes : 0 elements

Error:

▿ Optional<Unmanaged<CFErrorRef>>
  ▿ some : Unmanaged<CFErrorRef>
    - _value : Error Domain=NSOSStatusErrorDomain Code=-50 "kSecKeyKeyExchangeParameterRequestedSize is missing" UserInfo={NSDescription=kSecKeyKeyExchangeParameterRequestedSize is missing}

Upvotes: 0

Views: 420

Answers (1)

cbauer10
cbauer10

Reputation: 1

Change SecKeyKeyExchangeParameter.requestedSize to SecKeyKeyExchangeParameter.requestedSize.rawValue.

Upvotes: 0

Related Questions