iOS - как выполнить sharedSecretFromKeyAgreement в iOS 12

Недавно Apple с iOS 13 представила CryptoKit, у которого есть метод sharedSecretFromKeyAgreement, который генерирует общий секрет из соглашения о ключах между открытым и закрытым ключами. Как этого добиться в iOS 12 и ниже?

iOS 13

import CryptoKit

let alicePrivateKey = P256.KeyAgreement.PrivateKey()
let alicePublicKey = alicePrivateKey.publicKey

let eileenPrivateKey = P256.KeyAgreement.PrivateKey()
let eileenPublicKey = eileenPrivateKey.publicKey

let shared1 = try alicePrivateKey.sharedSecretFromKeyAgreement(with: eileenPublicKey)
let shared2 = try eileenPrivateKey.sharedSecretFromKeyAgreement(with: alicePublicKey)

if shared1 == shared2 {
    print("shared keys are equal")
}

0 ответов

Я использовал SecKeyCopyKeyExchangeResult из iOS, который отлично работает без проблем. Единственное, что нужно сделать, это убедиться, что используемые ниже ecSecPrivateKey и ecSecPrivateKey должны быть в формате Seckey и работать нормально.

 guard let derivedData = SecKeyCopyKeyExchangeResult(
                ecSecPrivateKey,
                SecKeyAlgorithm.ecdhKeyExchangeStandard,
                ecSecPublicKey,
                parameters as CFDictionary,
                &error)
                else {
                return
            }
import CryptoKit
import Foundation

let bobsPrivateKey = P521.KeyAgreement.PrivateKey()
let bobsPublicKey = bobsPrivateKey.publicKey

let alicesPrivateKey = P521.KeyAgreement.PrivateKey()
let alicesPublicKey = alicesPrivateKey.publicKey

let shared1 = try alicesPrivateKey.sharedSecretFromKeyAgreement(with: bobsPublicKey)
let shared2 = try bobsPrivateKey.sharedSecretFromKeyAgreement(with: alicesPublicKey)

if shared1 == shared2 {
    print("shared keys are equal")
}

Другие вопросы по тегам