Получение статуса ошибки -34018 при хранении ключей в связке ключей с использованием Cryptokit - PullRequest
0 голосов
/ 03 октября 2019

Я получаю сообщение об ошибке при хранении ключей в связке ключей в Mac OS с использованием Cryptokit. Я использую алгоритм p256 для создания пары ключей. Ошибка, которую я получаю, приведена ниже.

-34018
Playground execution terminated: An error was thrown and was not caught:
▿ Unable to store item:
  - message : "Unable to store item:"

Используемый мной код Swift приведен ниже.

import Cocoa
import Foundation
import CryptoKit
import Security

/// An error we can throw when something goes wrong.
struct KeyStoreError: Error, CustomStringConvertible {
    var message: String

    init(_ message: String) {
        self.message = message
    }

    public var description: String {
        return message
    }
}

/*
extension OSStatus {

    /// A human readable message for the status.
    var message: String {
        return (SecCopyErrorMessageString(self, nil) as String?) ?? String(self)
    }
}
*/

/// The interface needed for SecKey conversion.
protocol SecKeyConvertible: CustomStringConvertible {
    /// Creates a key from an X9.63 representation.
    init<Bytes>(x963Representation: Bytes) throws where Bytes: ContiguousBytes

    /// An X9.63 representation of the key.
    var x963Representation: Data { get }
}

extension SecKeyConvertible {
    /// A string version of the key for visual inspection.
    /// IMPORTANT: Never log the actual key data.
    public var description: String {
        return self.x963Representation.withUnsafeBytes { bytes in
            return "Key representation contains \(bytes.count) bytes."
        }
    }
}
// Assert that the NIST keys are convertible.
extension P256.Signing.PrivateKey: SecKeyConvertible {}
extension P256.KeyAgreement.PrivateKey: SecKeyConvertible {}
let keyValue = P256.Signing.PrivateKey();
func storeKey<T: SecKeyConvertible>(_ key: T, label: String) throws {

     // Describe the key.
     let attributes = [kSecAttrKeyType: kSecAttrKeyTypeECSECPrimeRandom,
                       kSecAttrKeyClass: kSecAttrKeyClassPrivate] as [String: Any]

     // Get a SecKey representation.
     guard let secKey = SecKeyCreateWithData(key.x963Representation as CFData,
                                             attributes as CFDictionary,
                                             nil)
         else {
             throw KeyStoreError("Unable to create SecKey representation.")
     }

     // Describe the add operation.
     let query = [kSecClass: kSecClassKey,
                  kSecAttrApplicationLabel: label,
                  kSecAttrAccessible: kSecAttrAccessibleWhenUnlocked,
                  kSecUseDataProtectionKeychain: true,
                  kSecValueRef: secKey] as [String: Any]

     // Add the key to the keychain.
     let status = SecItemAdd(query as CFDictionary, nil)
     guard status == errSecSuccess else {
         throw KeyStoreError("Unable to store item:")
     }
}

storeKey(keyValue, label:"test.sample.com")

Я создал это с помощью Xcode в Mac OS 10.15 (бета-версия)Моя версия Xcode - 11.

Заранее благодарим за помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...