Операции Swift SecKey завершаются неудачно, не удается получить указатель на требуемый объект (заменяется NULL) - PullRequest
0 голосов
/ 05 августа 2020

Я сохранил ключ RSA в цепочке ключей iOS, и после его получения я не могу выполнять с ним операции SecKey ... Я пробовал SecKeyCopyExternalRepresentation, SecKeyIsAlgorithm и c. все они терпят неудачу с одной и той же ошибкой

Ниже приведен код

    let mlekPublicKeyAttr: [NSObject: NSObject] = [
            kSecAttrIsPermanent:true as NSObject,
            kSecAttrApplicationTag:MLEK_PUBLIC_TAG as NSObject,
            kSecClass: kSecClassKey, // added this value
            kSecReturnData: kCFBooleanTrue,
            kSecReturnAttributes: kCFBooleanTrue,
            kSecReturnRef: kCFBooleanTrue]// added this value

if(SecItemCopyMatching(mlekPublicKeyAttr as CFDictionary, nil) == errSecSuccess){
            var queryResult: AnyObject?
            _ = withUnsafeMutablePointer(to: &queryResult) {
                SecItemCopyMatching(mlekPublicKeyAttr as CFDictionary, $0)
            }
            
            let publicKey = queryResult as! SecKey
            
            let publicKeyData = SecKeyCopyExternalRepresentation(publicKey, &error)! as Data
            
            let keyExportManager = CryptoExportImportManager()
            let exported = keyExportManager.exportRSAPublicKeyToPEM(publicKeyData,
                                                                    keyType: kSecAttrKeyTypeRSA as String,
                                                                    keySize: 256)
            return exported
        }
        

Ниже приведена ошибка

error: warning: couldn't get required object pointer (substituting NULL): 
Couldn't load 'self' because its value couldn't be evaluated

error: Execution was interrupted, reason: EXC_BAD_ACCESS (code=1, address=0x2700050004).

Любая помощь здесь приветствуется.

...