Я пытаюсь использовать функцию SecKeyCopyKeyExchangeResult для получения общего секрета из моего локального закрытого ключа и полученного открытого ключа сервера. Общий ключ сгенерирован успешно, и я могу расшифровать входящее сообщение с помощью шифрования AES. Не так давно разработчики серверов решили добавить KDF в процесс генерации ключей. Я начал исследовать, как я могу сделать это на стороне iOS, и обнаружил, что есть специальный параметр static let sharedInfo: SecKeyKeyExchangeParameter Сказать, что документация плохая, это ничего не сказать... Единственное, что я нашел, это это описание в заголовке
@constant kSecKeyKeyExchangeParameterSharedInfo Содержит CFDataRef с дополнительной общей информацией для KDF (функция получения ключа).
Если кто-то работал с этим, пожалуйста, помогите. Сервер использует эти параметры для создания KDF на scala.
private def concatWithKdf(secretKey: SecretKey) = {
val bytes = new Array[Byte](SECRET_KEY_LENGTH)
val digest = new SHA256Digest();
val kdf1BytesGenerator = new KDF1BytesGenerator(digest)
kdf1BytesGenerator.init(new KDFParameters(secretKey.getEncoded, null))
kdf1BytesGenerator.generateBytes(bytes, 0, bytes.length)
new SecretKeySpec(bytes, secretKey.getAlgorithm)
}
Код на стороне iOS
var keyExchangeError: Unmanaged<CFError>?
let dict = [SecKeyKeyExchangeParameter.requestedSize.rawValue : 32,
SecKeyKeyExchangeParameter.sharedInfo.rawValue : ???]
let secret = SecKeyCopyKeyExchangeResult(privateOwn,
SecKeyAlgorithm.ecdhKeyExchangeStandard,
publicTheir,
dict as CFDictionary,
&keyExchangeError)