Я пытаюсь зашифровать некоторые NSData
с помощью функции SecKeyEncrypt
.Проблема в том, что он возвращает ошибку -50
, которая согласно документации равна
errSecParam
Один или несколько параметров, переданных в функцию, недопустимы.
Проблема в том, что я не могу найти что-то не так с моей функцией.Код выглядит следующим образом:
- (NSData *)encryptWithPrivateKey:(NSData *)plainData
{
if (!privateKeyRef) {
RBLog(@"No private key");
return nil;
}
if (!plainData.length) {
RBLog(@"Plain data empty");
return nil;
}
size_t blockSize = SecKeyGetBlockSize(privateKeyRef); // 128
NSMutableData *encryptedData = [[NSMutableData alloc] initWithCapacity:blockSize]; // using capacity of 1024 changes nothing
size_t encryptedDataLen = blockSize;
OSStatus status = SecKeyEncrypt(privateKeyRef,
kSecPaddingPKCS1,
(const uint8_t *)plainData.bytes,
plainData.length,
(uint8_t *)encryptedData.bytes,
&encryptedDataLen);
if (status != errSecSuccess) {
RBLog(@"Could not encrypt, OS status %@", @(status));
}
return [NSData dataWithData:encryptedData];
}
Ключ создается с помощью SecKeyGeneratePair
, который возвращает errSecSuccess
.Как вы видите, я пытаюсь зашифровать данные с помощью закрытого ключа, а не открытого, поэтому я добавил
[privateKeyAttr setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id)kSecAttrCanEncrypt];
к параметрам закрытого ключа при генерации, но, к сожалению, это не помогло.
В чем здесь проблема?