Getting error status -34018 in storing Keys in Keychain using Cryptokit

Hi,


I am getting error while storing keys in Keychain using Cryptokit.

The error details I am getting using

-34018

Playground execution terminated: An error was thrown and was not caught:

▿ Unable to store item:

- message : "Unable to store item:"


The Swift code I am using is given below.

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")




Can anyone please help?


Thanks in Advance.