Невозможно вызвать SecItemAdd успешно

Я пытаюсь добавить простой строковый секрет к их цепочке для ключей в macOS через API C ++. К сожалению, я не могу позвонить SecItemAdd работать. Я знаю, это потому, что моя ценность для kSecValueRef ключ неправильного типа, но пока Google /Apple документы/существующие вопросы StackOverflow Мне еще предстоит раскрыть мне, какой тип я должен использовать, и как его создать. Вот что у меня так далеко:

CFStringRef keys[4];
keys[0] = kSecClass;
keys[1] = kSecValueRef;
keys[2] = kSecAttrAccount;
keys[3] = kSecAttrService;

CFTypeRef values[4];
values[0] = kSecClassGenericPassword;
values[1] = CFSTR("password");
values[2] = CFSTR( "account-1" );
values[3] = CFSTR( "service-1" );
CFDictionaryRef attributes = CFDictionaryCreate
(
( CFAllocatorRef )NULL,
( const void ** )keys,
( const void ** )values,
4,
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks
);
CFShow(attributes);
OSStatus status = SecItemAdd(attributes, NULL);

Так что я должен положить для моего kSecValueRef? Я пытался сделать ссылку на CFStringRef, но это не сработало. Я также вижу, что в Apple документы это говорит:

Соответствующее значение, в зависимости от запрошенного класса элемента, имеет тип SecKeychainItem, SecKey, SecCertificate или SecIdentity.

Но у меня нет SecKeychainItem потому что я еще не добавил элемент, а другие типы не подходят для обычной строки.

Мысли?

0

Решение

Догадаться! Для простых данных, таких как строка, вы должны использовать kSecValueData ключ. Это позволит вам просто пройти в CFStringRef,

Пример:

CFStringRef keys[4];
keys[0] = kSecClass;
keys[1] = kSecAttrAccount;
keys[2] = kSecAttrService;
keys[3] = kSecValueData;

CFTypeRef values[4];
values[0] = kSecClassGenericPassword;
values[1] = CFSTR( "account-15" );
values[2] = CFSTR( "service-126" );
values[3] = CFSTR( "password" );
0

Другие решения

Других решений пока нет …