iOS:将私钥添加到设备KeyChain

时间:2012-03-29 00:29:26

标签: ios cryptography rsa keychain private-key

我有一个项目,我从服务器接收用户的加密RSA私钥。使用用户提供的信息,我能够将数据解密回预期的格式。但是,我无法弄清楚如何将私钥加载到iOS Keychain中以用于RSA加密函数。

目前,我有以下代码,我从各种示例拼凑而成。此代码适用于添加公钥,但似乎根本不用于添加私钥。

[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:privateKeyData forKey:(__bridge id)kSecValueData];
[peerPublicKeyAttr setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id)kSecReturnRef];

sanityCheck = SecItemDelete((__bridge CFDictionaryRef) peerPublicKeyAttr) ;

sanityCheck = SecItemAdd((__bridge CFDictionaryRef) peerPublicKeyAttr, (CFTypeRef *)&privateKey);

当我使用私钥数据(解码为DER格式)运行此代码时,privateKey调用将SecItemAdd()变量设置为NULL。但是,sanityCheck变量表示“无错误”。我因为缺少的东西而感到茫然。

我需要做些什么才能成功将私钥加载到钥匙串中?