SecTransformExecute() завершает работу приложения с EXEC_BAD_ACCESS
У меня есть пара секретный / открытый ключ, и я пытаюсь зашифровать строку с любым из них. Код работает на OSX 10.11 и Xcode 7.2
func encryptMessageWithKey(message: String, keyType: KeyType,
withCompletionBlock: (success: Bool, data: NSData?, error: AsymCryptoExceptions.Exceptions?)
-> Void) {
let uintData = [UInt8](message.utf8)
let sourceData = CFDataCreate(kCFAllocatorDefault, uintData, uintData.count)
let privKey = self.getPrivateKeyReference()!
var errorRef: Unmanaged<CFError>?
let encoder = SecEncryptTransformCreate(privKey, &errorRef)
SecTransformSetAttribute(encoder,
kSecPaddingKey,
kSecPaddingPKCS1Key,
&errorRef)
SecTransformSetAttribute(encoder,
kSecTransformInputAttributeName,
sourceData,
&errorRef)
var encryptedData = SecTransformExecute(encoder, &errorRef)
if (errorRef != nil) {
let error = errorRef!.takeRetainedValue()
print(error)
}
}
Вышеописанный сбой с треском провоцирует сбой приложения во время выполнения с EXEC_BAD_ACCESS
, Нет ошибок, ничего.
Мои исследования показали, что может быть ошибка, связанная с явным указанием kSecPaddingPKCS1Key
в отличие от NULL, который по умолчанию устанавливает отступ в PKCS1. Однако я не смог установить это значение в NULL, поскольку Swift заменил его на nil, и это не может быть использовано в этом месте.
1 ответ
Хотя это довольно старый вопрос, я отвечу на него, чтобы, возможно, сэкономить кому-то еще время:)
У меня была такая же проблема где SecTransformExecute
дал EXC_BAD_ACCESS
ошибка. Я заметил, что ошибка возникает только тогда, когда я изменяю или очищаю проект и перестраиваю приложение, но не когда я запускаю ту же отладочную сборку.
В конце концов, для меня это решило подписание приложения с помощью сертификата разработки, поскольку раньше приложение не могло использовать ключ из-за различных идентификаторов автоматической подписи, предоставляемых XCode.