2016-12-14 4 views
0

Я создаю 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); 
+0

Что должно дать в "privateKeyLegnth"? –

Смежные вопросы