2016-05-03 8 views
-1

swipe 2.2を使用して、El Capitanで動作するXcode 7.3を使用しました。SwiftでGenerateKeyPairが変更されました。2.2

はちょうどこの...

public func generateKeyPair(publicKeyTag: String, privateKeyTag:String,` `keySize: Int) -> KeyPair? { 

    let privateKeyAttr: [NSString: AnyObject] = [ 
     kSecAttrIsPermanent: true, 
    kSecAttrApplicationTag: privateKeyTag 
] 
let publicKeyAttr: [NSString: AnyObject] = [ 
    kSecAttrIsPermanent: true, 
    kSecAttrApplicationTag: publicKeyTag 
] 
let parameters: [NSString: AnyObject] = [ 
    kSecAttrKeyType: kSecAttrKeyTypeRSA, 
    kSecAttrKeySizeInBits: keySize, 
    kSecPrivateKeyAttrs: privateKeyAttr, 
    kSecPublicKeyAttrs: publicKeyAttr 
] 

var publicKey: SecKey? 
var privateKey: SecKey? 
let result = SecKeyGeneratePair(parameters, &publicKey, &privateKey) 

if result != errSecSuccess { 
    return nil 
} 
return KeyPair(publicKey: publicKey!, privateKey: privateKey!) 

を試してみましたが、残念ながらそれは、公開鍵/秘密鍵のペアとしてはnil、nilを生成します。

私はそれを呼んだ:私はここで何をしないのです

generateKeyPair("ch.blah.public",privateKeyTag: "ch.blah.private",keySize: 32) 

?どうやらこれは動作するために使用された?

Generate keychain key with swift 2.0

エラーが出力しないが、0です。どのようなことがうまくいったのだろうか?

+1

Xcode 7.3はSwift 2.2に同梱されています。 Swift 3.0を使用してもよろしいですか? – werediver

+0

私は、Swift 3.0に合わせるために必要な変更を提案し続けていると思います。しかし、私は100%確実ではない。そのXcode 7.3 7D175。 – user3069232

+0

コンパイラは、ソースを壊す変更を導入するため、Swift 3.0に移行する準備をするよう提案します。 Swift 2.2を使用しています。 – werediver

答えて

1

RSAに無効なキー長を使用しています。また、kSecAttrApplicationTagNSDataオブジェクトである必要があり、NSStringオブジェクトではありません。

public func generateKeyPair(publicKeyTag: String, privateKeyTag:String, keySize: Int) {  
    let privateKeyAttr: [NSString: AnyObject] = [ 
     kSecAttrIsPermanent: true, 
     kSecAttrApplicationTag: privateKeyTag.dataUsingEncoding(NSUTF8StringEncoding)! 
    ] 
    let publicKeyAttr: [NSString: AnyObject] = [ 
     kSecAttrIsPermanent: true, 
     kSecAttrApplicationTag: publicKeyTag.dataUsingEncoding(NSUTF8StringEncoding)! 
    ] 
    let parameters: [NSString: AnyObject] = [ 
     kSecAttrKeyType: kSecAttrKeyTypeRSA, 
     kSecAttrKeySizeInBits: keySize, 
     kSecPrivateKeyAttrs: privateKeyAttr, 
     kSecPublicKeyAttrs: publicKeyAttr 
    ] 

    var publicKey: SecKey? 
    var privateKey: SecKey? 
    let result = SecKeyGeneratePair(parameters, &publicKey, &privateKey) 

    if result != errSecSuccess { 
     print("Result: \(result)") 
     return 
    } 

    print("Public: \(publicKey)") 
    print("Private: \(privateKey)") 
} 

generateKeyPair("ch.blah.public", privateKeyTag: "ch.blah.private", keySize: 2048) 
+0

サルタン、あなたはゴールドの体重に値する!今すぐ完璧に:) – user3069232

関連する問題