//
// Copyright 2015 Apple. All rights reserved.
//
/*
* This is to fool os services to not provide the Keychain manager
* interface tht doens't work since we don't have unified headers
* between iOS and OS X. rdar://23405418/
*/
#define __KEYCHAINCORE__ 1
#include <Foundation/Foundation.h>
#include <Security/Security.h>
#include <TargetConditionals.h>
#include <Security/SecItemPriv.h>
#include <err.h>
#if !TARGET_OS_SIMULATOR
#include <libaks.h>
static NSData *
BagMe(void)
{
keybag_handle_t handle;
kern_return_t result;
void *data = NULL;
int length;
result = aks_create_bag("foo", 3, kAppleKeyStoreAsymmetricBackupBag, &handle);
if (result)
errx(1, "aks_create_bag:
result = aks_save_bag(handle, &data, &length);
if (result)
errx(1, "aks_save_bag");
return [NSData dataWithBytes:data length:length];
}
#endif /* TARGET_OS_SIMULATOR */
int main (int argc, const char * argv[])
{
@autoreleasepool {
NSData *bag = NULL, *password = NULL;
#if !TARGET_OS_SIMULATOR
bag = BagMe();
password = [NSData dataWithBytes:"foo" length:3];
#endif
NSLog(@"backup bag:
NSData *backup = (__bridge NSData *)_SecKeychainCopyBackup((__bridge CFDataRef)bag, (__bridge CFDataRef)password);
if (backup != NULL) {
NSLog(@"backup data: errx(1, "got backup");
}
return 0;
}
}