Я создаю CSR из openSSL, но из-за того, что OpenSSL не хранит ключи в безопасном анклаве, поэтому я выбираю цель C для создания пары ключей (закрытый ключ и открытый ключ) в безопасном анклаве и отправки в OpenSSL для сертификата X509. Я успешно получаю открытый ключ в NSData, затем конвертирую const unsigned char * bitsOfKeyDataPublicKey = (unsigned char *) [publicKey bytes];
и затем создаю открытый ключ EC_KEY*_ec_keyPublic = d2i_EC_PUBKEY(NULL,&bitsOfKeyDataPublicKey, publicKeyLegnth);
. Но для закрытого ключа мы получаем SecKeyRef
из цели c, поэтому для создания EC_Key
как мы можем преобразовать закрытый ключ или это какой-либо способ преобразования или использования закрытого ключа? Ищу ответ. Спасибо
Преобразование SecKeyRef в EC_KEY в iOS
Ответы (1)
Вы можете изменить закрытый ключ с SecKeyRef
на NSData
Пример:
- (NSData *)getPrivateKeyBits {
OSStatus sanityCheck = noErr;
NSData * privateKeyBits = nil;
NSMutableDictionary * queryPrivateKey = [[NSMutableDictionary alloc] init];
// Set the public key query dictionary.
[queryPrivateKey setObject:(id)kSecClassKey forKey:(id)kSecClass];
[queryPrivateKey setObject:_privateTag forKey:(id)kSecAttrApplicationTag];
[queryPrivateKey setObject:(id)kSecAttrKeyTypeEC forKey:(id)kSecAttrKeyType];
[queryPrivateKey setObject:[NSNumber numberWithBool:YES] forKey:(id)kSecReturnData];
// Get the key bits.
sanityCheck = SecItemCopyMatching((__bridge CFDictionaryRef)queryPrivateKey, (void *)&privateKeyBits);
if (sanityCheck != noErr) {
privateKeyBits = nil;
}
else if (sanityCheck == errSecItemNotFound) {
privateKeyBits = nil;
}
return privateKeyBits;
}
Не забудьте использовать _privateTag
для генерации закрытого ключа.
теперь вы можете использовать:
const unsigned char *bitsOfKeyDataPrivateKey = (unsigned char *) [[self getPrivateKeyBits] bytes];
EC_KEY *_ec_keyPrivate = d2i_EC_PUBKEY(NULL,&bitsOfKeyDataPrivateKey, privateKeyLegnth);
person
Hassan Shahbazi
schedule
20.01.2017
Что должно отдавать в privateKeyLegnth?
- person Sunil aruru; 07.03.2018
Первая часть этого ответа (как экспортировать ключ) верна, но экспортированный ключ несовместим с
d2i_EC_PUBKEY
. См.: forums.developer.apple.com/message/84684#84684.
- person Chaosed0; 18.05.2018
Разве вы не должны использовать
d2i_PrivateKey_bio
для закрытого ключа?
- person William GP; 02.04.2019