У меня есть проект, в котором я получаю зашифрованный закрытый ключ RSA для пользователя с сервера. Используя информацию, предоставленную пользователем, я могу расшифровать данные обратно в ожидаемый формат. Однако я не могу понять, как загрузить закрытый ключ в связку ключей iOS для использования в криптографических функциях RSA.
В настоящее время у меня есть следующий код, который я собрал из различных примеров. Этот код работает для добавления открытого ключа, но, похоже, совсем не работает для добавления закрытого ключа.
[peerPublicKeyAttr setObject:(__bridge id)kSecClassKey forKey:(__bridge id)kSecClass];
[peerPublicKeyAttr setObject:(__bridge id)kSecAttrKeyTypeRSA forKey:(__bridge id)kSecAttrKeyType];
[peerPublicKeyAttr setObject:peerTag forKey:(__bridge id)kSecAttrApplicationTag];
[peerPublicKeyAttr setObject:privateKeyData forKey:(__bridge id)kSecValueData];
[peerPublicKeyAttr setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id)kSecReturnRef];
sanityCheck = SecItemDelete((__bridge CFDictionaryRef) peerPublicKeyAttr) ;
sanityCheck = SecItemAdd((__bridge CFDictionaryRef) peerPublicKeyAttr, (CFTypeRef *)&privateKey);
Когда я запускаю этот код с данными закрытого ключа (декодированными в формат DER), переменная privateKey
устанавливается в NULL с помощью вызова SecItemAdd()
. Однако переменная sanityCheck
указывает «Нет ошибок». Я в растерянности из-за того, что мне не хватает.
Что мне нужно сделать, чтобы закрытый ключ успешно загрузился в цепочку для ключей?