SecKeyRawVerify и OSError -9809

Я использую цифровые сертификаты для подписи файлов данных в своем приложении. Ниже приведен фрагмент кода, когда вызов SecKeyRawVerify возвращается с -9809. Это работает на iPhone. Я даже не могу точно определить, что означает этот код ошибки

Предварительная система безопасности призывает загружать и создавать SecTrustRef, из которого получается открытый ключ, кажется прекрасным – никаких ошибок. Единственная небольшая проблема заключается в том, что вызов SecTrustEvaluate возвращает kSecTrustResultUnspecified , но я предполагаю, что это потому, что используемая SecTrustEvaluate является kSecTrustResultUnspecified , возвращаемым kSecTrustResultUnspecified SecPolicyCreateBasicX509 .

Любая помощь или понимание будут очень оценены.

благодаря

 SecKeyRef keyRef = SecTrustCopyPublicKey (trustRef); fileURL = [[NSBundle mainBundle] URLForResource:@"data" withExtension:@"txt"]; NSData *data = [NSData dataWithContentsOfURL:fileURL]; fileURL = [[NSBundle mainBundle] URLForResource:@"data" withExtension:@"sgn"]; NSData *signature = [NSData dataWithContentsOfURL:fileURL]; NSLog(@"Hash block size = %zu",SecKeyGetBlockSize(keyRef)); status = SecKeyRawVerify (keyRef, kSecPaddingPKCS1SHA1, (const uint8_t *)[data bytes], (size_t)[data length], (const uint8_t *)[signature bytes], (size_t)[signature length] ); 

Эта ошибка определяется (наряду с другими связанными) в /System/Library/Frameworks/Security.framework/Headers/SecureTransport.h как errSSLCrypto . Комментарий там называется «лежащей в основе криптографической ошибки», что не является особенно описательным описанием.

Одна мысль: kSecTrustResultUnspecified означает, что уровень доверия равен системной политике по умолчанию. Все ли доверенные сертификаты в цепочке?

Я обнаружил, что происходит. SecKeyRawVerify берет дайджест ваших данных как входных данных, а не самих данных. Приведенный ниже код работает – и, кстати, если подпись не проверена, потому что базовые данные изменились, то возвращается статус -9809.

благодаря

 CC_SHA1((const void *)[data bytes], [data length], (unsigned char *)hash); status = SecKeyRawVerify (keyRef, kSecPaddingPKCS1SHA1, hash, 20, (const uint8_t *)[signature bytes], SecKeyGetBlockSize(keyRef) ); 
Interesting Posts

refreshPreferences Сообщения HangTracerEnabled / HangTracerDuration в iOS 11 + Xcode 9

всплывающие и толкающие контроллеры представлений в одном и том же действии

Google плюс признаки сбоев в ios 9

Недопустимый указатель Xcode 8

iOS: сбой сглаживания (PNG в CALayer)

NSRoundBankers не работает, как описано в Apple

Пользовательский интерфейс IOS UIActivityItemProvider обменивается имиджем и текстом

iOS: Как приложения рисования / рисования устраняют первоначальную задержку в ответ на касания?

Добавление UIToolbar для ввода вида аксессуаров в некоторых текстовых полях

iOS Simulator на Mac не показывает параметры электронной почты или ActiveSync

Как создать настраиваемую структуру для назначения содержимого массива в используемые переменные?

iOS. Как узнать, вызвало ли локальное уведомление мое приложение для входа на передний план?

Изменение цвета увеличительного стекла UISearchbar, цвета PlaceHolder и цвета X

UIActivityIndicatorView не отображается прямо на UIAlertView

Определения @property с ARC: Является сильным дефолтом сейчас?

Давайте будем гением компьютера.