###前提・実現したいこと
キーチェーンに保存したデータを取り出す処理を書き換えているのですが、
上手く取り出すことができません。
そもそもswiftに書き換えるにあたり、正しく書き換えれているのかを確認していただけないかと思います。
※多少違っている点があるかもしれませんがそちらも指摘いただけると幸いです。
###Objective-C
objectivec
1static const uint8_t privateKeyIdentifier[] = iOSPrivateKey; 2 NSData *privateTag = [[NSData alloc] initWithBytes:privateKeyIdentifier length:sizeof(privateKeyIdentifier)]; 3 4 NSMutableDictionary * queryPrivateKey = [[NSMutableDictionary alloc] init]; 5 [queryPrivateKey setObject:(__bridge id)kSecClassKey forKey:(__bridge id)kSecClass]; 6 [queryPrivateKey setObject:privateTag forKey:(__bridge id)kSecAttrApplicationTag]; 7 [queryPrivateKey setObject:(__bridge id)kSecAttrKeyTypeRSA forKey:(__bridge id)kSecAttrKeyType]; 8 9 CFDataRef attributes; 10 OSStatus err = SecItemCopyMatching((__bridge CFDictionaryRef)queryPrivateKey, (CFTypeRef *)&attributes); 11 if (err != errSecSuccess) { 12 NSString *msg = [NSString stringWithFormat:@"Restore a private key is Failure! %i", (int)err]; 13 NSLog(@"%@", msg); 14 @throw msg; 15 } 16 17 NSData* privateData = (__bridge_transfer NSData *)attributes; 18 19 return privateData;
###Swift
swift
1let privateKeyIdentifier = iOSPrivateKey 2 let privateTag = NSData(bytes: privateKeyIdentifier, length: privateKeyIdentifier.characters.count) 3 let query: [String: Any] = [kSecClass as String: kSecClassKey, kSecAttrKeyType as String: kSecAttrKeyTypeRSA, kSecAttrApplicationTag as String: privateTag, kSecReturnData as String: true] 4 5 var keyPtr: CFTypeRef? 6 let result = SecItemCopyMatching(query as CFDictionary, &keyPtr) 7 8 switch result { 9 case noErr: 10 let keyData = CFBridgingRetain(keyPtr!) as! NSData 11 12 return keyData! 13 case errSecItemNotFound: 14 print("見つかりませんでした") 15 return nil 16 default: 17 print("その他のエラー") 18 return nil 19 }
###補足情報(言語/FW/ツール等のバージョンなど)
・Xcode8.2.1
・Swift3.0
回答2件
あなたの回答
tips
プレビュー