У меня есть библиотека, которая позволяет вам создавать двоичные данные для импорта ключей RSA по модулю и показателю теперь:
https://github.com/StCredZero/SCZ-BasicEncodingRules-iOS
ЗКН-BasicEncodingRules КСН
Реализация базовых правил кодирования для включения импорта ключей RSA в iOS
KeyChain с использованием показателя степени. Код ориентирован на iOS 5 с ARC.
Допустим, у вас уже есть модуль и показатель степени
открытый ключ RSA как NSData в переменных с именем pubKeyModData и
pubKeyExpData. Затем следующий код создаст NSData, содержащий этот RSA
открытый ключ, который затем можно вставить в связку ключей iOS или OS X.
NSMutableArray *testArray = [[NSMutableArray alloc] init];
[testArray addObject:pubKeyModData];
[testArray addObject:pubKeyExpData];
NSData *testPubKey = [testArray berData];
Это позволит вам сохранить ключ, используя addPeerPublicKey: keyBits: метод из SecKeyWrapper в примере Apple CryptoExercise. Или, с точки зрения низкоуровневого API, вы можете использовать SecItemAdd ().
NSString * peerName = @"Test Public Key";
NSData * peerTag =
[[NSData alloc]
initWithBytes:(const void *)[peerName UTF8String]
length:[peerName length]];
NSMutableDictionary * peerPublicKeyAttr = [[NSMutableDictionary alloc] init];
[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:testPubKey
forKey:(__bridge id)kSecValueData];
[peerPublicKeyAttr
setObject:[NSNumber numberWithBool:YES]
forKey:(__bridge id)kSecReturnPersistentRef];
sanityCheck = SecItemAdd((__bridge CFDictionaryRef) peerPublicKeyAttr, (CFTypeRef *)&persistPeer);