SecItemBackup.h
1 /* 2 * Copyright (c) 2015 Apple Inc. All Rights Reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23 24 // 25 // SecItemBackup.h 26 // SecItem backup restore SPIs 27 // 28 29 #ifndef _SECURITY_ITEMBACKUP_H_ 30 #define _SECURITY_ITEMBACKUP_H_ 31 32 #include <CoreFoundation/CFError.h> 33 #include <CoreFoundation/CFString.h> 34 #include <CoreFoundation/CFURL.h> 35 36 __BEGIN_DECLS 37 38 // Keys in a backup item dictionary 39 #define kSecItemBackupHashKey CFSTR("hash") 40 #define kSecItemBackupClassKey CFSTR("class") 41 #define kSecItemBackupDataKey CFSTR("data") 42 43 44 /* View aware backup/restore SPIs. */ 45 46 #define kSecItemBackupNotification "com.apple.security.itembackup" 47 48 typedef enum SecBackupEventType { 49 kSecBackupEventReset = 0, // key is keybag 50 kSecBackupEventAdd, // key, item are added in backup (replaces existing item with key) 51 kSecBackupEventRemove, // key gets removed from backup 52 kSecBackupEventComplete // key and value are unused 53 } SecBackupEventType; 54 55 bool SecItemBackupWithRegisteredBackups(CFErrorRef *error, void(^backup)(CFStringRef backupName)); 56 57 bool SecItemBackupWithRegisteredViewBackup(CFStringRef viewName, CFErrorRef *error); 58 59 /*! 60 @function SecItemBackupWithChanges 61 @abstract Tell securityd which keybag (via a persistent ref) to use to backup 62 items for each of the built in dataSources to. 63 @param backupName Name of this backup set. 64 @param error Returned if there is a failure. 65 @result bool standard CFError contract. 66 @discussion CloudServices is expected to call this SPI to stream out changes already spooled into a backup file by securityd. */ 67 bool SecItemBackupWithChanges(CFStringRef backupName, CFErrorRef *error, void (^event)(SecBackupEventType et, CFTypeRef key, CFTypeRef item)); 68 69 /*! 70 @function SecItemBackupSetConfirmedManifest 71 @abstract Tell securityd what we have in the backup for a particular backupName 72 @param backupName Name of this backup set. 73 @param keybagDigest The SHA1 hash of the last received keybag. 74 @param manifest Manifest of the backup. 75 @result bool standard CFError contract. 76 @discussion cloudsvc is expected to call this SPI to whenever it thinks securityd might not be in sync with backupd of whenever it reads a backup from or writes a backup to kvs. */ 77 bool SecItemBackupSetConfirmedManifest(CFStringRef backupName, CFDataRef keybagDigest, CFDataRef manifest, CFErrorRef *error); 78 79 /*! 80 @function SecItemBackupRestore 81 @abstract Restore data from a cloudsvc backup. 82 @param backupName Name of this backup set (corresponds to the view). 83 @param peerID hash of the public key of the peer info matching the chosen device. For single iCSC recovery, this is the public key hash returned from SOSRegisterSingleRecoverySecret(). 84 @param secret Credential to unlock keybag 85 @param keybag keybag for this backup 86 @param backup backup to be restored 87 @discussion CloudServices iterates over all the backups, calling this for each backup with peer infos matching the chosen device. */ 88 void SecItemBackupRestore(CFStringRef backupName, CFStringRef peerID, CFDataRef keybag, CFDataRef secret, CFTypeRef backup, void (^completion)(CFErrorRef error)); 89 90 // Utility function to compute a confirmed manifest from a v0 backup dictionary. 91 CFDataRef SecItemBackupCreateManifest(CFDictionaryRef backup, CFErrorRef *error); 92 93 /*! 94 @function SecBackupKeybagAdd 95 @abstract Add a new asymmetric keybag to the backup table. 96 @param passcode User entropy to protect the keybag. 97 @param identifier Unique identifier for the keybag. 98 @param pathinfo The directory or file containing the keychain. 99 @param error Returned if there is a failure. 100 @result bool standard CFError contract. 101 @discussion The keybag is created and stored in the backup keybag table */ 102 bool SecBackupKeybagAdd(CFDataRef passcode, CFDataRef *identifier, CFURLRef *pathinfo, CFErrorRef *error); 103 104 /*! 105 @function SecBackupKeybagDelete 106 @abstract Remove an asymmetric keybag from the backup table. 107 @param query Specify which keybag(s) to delete 108 @param error Returned if there is a failure. 109 @result bool standard CFError contract. 110 @discussion The keychain must be unlocked */ 111 bool SecBackupKeybagDelete(CFDictionaryRef query, CFErrorRef *error); 112 113 __END_DECLS 114 115 #endif /* _SECURITY_ITEMBACKUP_H_ */