iOS swift: SecKeyCreateWithData возвращает ноль - PullRequest
1 голос
/ 22 января 2020

Попытка сгенерировать SecKey из SecKeyCreateWithData с помощью функции swift, как показано ниже. SecKeyCreateWithData всегда возвращает ноль с журналом ошибок ниже. Может кто-нибудь, пожалуйста, помогите.

Примечание: и cekKeyData как CFData, и атрибуты как CFDictionary не равны нулю и имеют значения в нем.

журнал:

Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

код

    let keydatalen = 256
    let algorithmID = ""
    let partyUInfo = ""

    let cekKeyData = DHSecretGenerator.createDeriveKey(
        Z: sharedKey,
        KeyLenght: keydatalen,
        AlgorithmID: KDFConcateWithLenght(text: algorithmID, encoding: .ascii),
        PartyUInfo: KDFConcateWithLenght(text: partyUInfo, encoding: .utf8),
        PartyVInfo: KDFConcateWithLenght(text: reference, encoding: .ascii),
        SuppPubInfo: numberToData(number: UInt32(keydatalen)),
        SuppPrivInfo: Data())

    let attributes: [String: Any] = [
                kSecAttrKeyType as String: kSecAttrKeyTypeECSECPrimeRandom,
                kSecAttrKeyClass as String: kSecAttrKeyClassSymmetric
            ]

    var error: Unmanaged<CFError>?
            var test: SecKey =
            let privKey : SecKey = SecKeyCreateWithData(cekKeyData as CFData,
                                                        attributes as CFDictionary, &error)!
            print(privKey)

1 Ответ

0 голосов
/ 25 января 2020

Укажите длину и тип ключа. Длина, например, 256, и все Типы - publi c или private. Я думаю, Symmetri c - это то, что publi c, а private - то же самое, но не совсем уверен, что.

пусть атрибуты: [String: Any] = [kSecAttrKeyType as String: kSecAttrKeyTypeECSECPrimeRandom, kSecAttrKeyClass as String: kSecAttrKeyClassPubli c, kSecAttrKeySizeInBits как 256

...