2015-05-27 5 views
1

Я пытаюсь создать открытую/закрытую пару ключей на устройстве и хранить их в цепочке ключей.SecKeyRef to base64 и обратно в swift

Поскольку я использую swift, я буду использовать библиотеку для взаимодействия с брелка. Это тот, который я нашел для этого https://github.com/matthewpalmer/Locksmith.

Что мне нужно сделать после того, как я сгенерировал ключи, это преобразовать их как в base64, так и затем сохранить их в цепочке ключей, а затем воссоздать оба ключа, используя строку base64 из брелка.

Использование библиотеки Locksmith должно быть примерно таким.

Locksmith.saveData(["publicKeyKey": "publicKeyBase64data"], forUserAccount: "myUserAccount") 

Для генерации ключей я использую следующий код

public func GenerateKeys() -> [SecKeyRef]{ 

    let keySize = 2048; 
    var publicKeyPtr, privateKeyPtr: Unmanaged<SecKeyRef>? 

    let publicKeyParameters: [String: AnyObject] = [ 
     kSecAttrIsPermanent as String: true, 
     kSecAttrApplicationTag as String: "com.site.key.public" 
    ] 

    let privateKeyParameters: [String: AnyObject] = [ 
     kSecAttrIsPermanent as String: true, 
     kSecAttrApplicationTag as String: "com.site.key.private" 
    ] 

    let parameters: [String: AnyObject] = [ 
     kSecAttrKeyType as! String: kSecAttrKeyTypeRSA, 
     kSecAttrKeySizeInBits as! String: keySize, 
     kSecPublicKeyAttrs.takeUnretainedValue() as! String: publicKeyParameters, 
     kSecPrivateKeyAttrs.takeUnretainedValue() as! String: privateKeyParameters 
    ] 

    let result = SecKeyGeneratePair(parameters, &publicKeyPtr, &privateKeyPtr) 
    let publicKey = publicKeyPtr!.takeRetainedValue() 
    let privateKey = privateKeyPtr!.takeRetainedValue() 
    let blockSize = SecKeyGetBlockSize(publicKey) 

    return [publicKey, privateKey]; 
} 

Я могу успешно генерировать ключи, но я не могу понять, как превратить их в base64 и обратно. Таким образом, у меня есть объекты SecKeyRef, но на самом деле не знаю, как продолжить.

Большая часть кода, который я уже нашел, находится в объективе-c, с которым я не знаком.

Любые виды помощи приветствуются.

Благодаря

ответ

1

Вы действительно не нужен другой поставщик брелка. Вы установили для параметра kSecAttrIsPermanent значение true, поэтому, согласно документу Apple, keyPair уже сохранен в ключевом ключе по умолчанию.

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