X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/84aacf34eae6543be9f0280b2015385f91e5c2c6..b54c578e17e9bcbd74aa30ea75e25e955b9a6205:/OSX/sec/SOSCircle/SecureObjectSync/SOSBackupEvent.c?ds=inline diff --git a/OSX/sec/SOSCircle/SecureObjectSync/SOSBackupEvent.c b/OSX/sec/SOSCircle/SecureObjectSync/SOSBackupEvent.c deleted file mode 100644 index 10ecd658..00000000 --- a/OSX/sec/SOSCircle/SecureObjectSync/SOSBackupEvent.c +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright (c) 2015 Apple Inc. All Rights Reserved. - * - * @APPLE_LICENSE_HEADER_START@ - * - * This file contains Original Code and/or Modifications of Original Code - * as defined in and that are subject to the Apple Public Source License - * Version 2.0 (the 'License'). You may not use this file except in - * compliance with the License. Please obtain a copy of the License at - * http://www.opensource.apple.com/apsl/ and read it before using this - * file. - * - * The Original Code and all software distributed under the License are - * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER - * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. - * Please see the License for the specific language governing rights and - * limitations under the License. - * - * @APPLE_LICENSE_HEADER_END@ - */ - -/* - * SOSBackupEvent.c - Implementation of a secure object syncing peer - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -// -// MARK: statics -// - -/* - Event ASN.1 definitions - -ResetEvent := SEQUENCE { - keybag OCTET STRING OPTIONAL -} - -AddEvent := SET { - SEQUENCE { - UTF8STRING :class - class UTF8STRING - } - SEQUENCE { - UTF8STRING :hash - hash OCTET STRING - } - SEQUENCE { - UTF8STRING :data - data OCTET STRING - } -} - -DeleteEvent := OCTET STRING - -CompleteEvent := INTEGER - -Event := CHOICE { - reset ResetEvent - add AddEvent - delete DeleteEvent - complete CompleteEvent -} - - */ - -static size_t der_sizeof_backup_reset(CFDataRef keybag) { - return ccder_sizeof(CCDER_CONSTRUCTED_SEQUENCE, - keybag ? ccder_sizeof_raw_octet_string(CFDataGetLength(keybag)) : 0); -} - -static uint8_t* der_encode_backup_reset(CFDataRef keybag, CFErrorRef* error, const uint8_t* der, uint8_t* der_end) { - return ccder_encode_constructed_tl(CCDER_CONSTRUCTED_SEQUENCE, der_end, der, - keybag ? ccder_encode_raw_octet_string(CFDataGetLength(keybag), CFDataGetBytePtr(keybag), der, der_end) : der_end); -} - -static size_t der_sizeof_backup_add(CFDictionaryRef add) { - return der_sizeof_dictionary(add, NULL); -} - -static uint8_t* der_encode_backup_add(CFDictionaryRef add, CFErrorRef* error, const uint8_t* der, uint8_t* der_end) { - // der_dictionary tag is CCDER_CONSTRUCTED_SET - return der_encode_dictionary(add, error, der, der_end); -} - -static size_t der_sizeof_backup_delete(CFDataRef deletedDigest) { - return ccder_sizeof_raw_octet_string(CFDataGetLength(deletedDigest)); -} - -static uint8_t* der_encode_backup_delete(CFDataRef deletedDigest, CFErrorRef* error, const uint8_t* der, uint8_t* der_end) { - return ccder_encode_raw_octet_string(CFDataGetLength(deletedDigest), CFDataGetBytePtr(deletedDigest), der, der_end); -} - -static size_t der_sizeof_backup_complete(uint64_t event_num) { - return ccder_sizeof_uint64(event_num); -} - -static uint8_t* der_encode_backup_complete(uint64_t event_num, CFErrorRef* error, const uint8_t* der, uint8_t* der_end) { - return ccder_encode_uint64(event_num, der, der_end); -} - - -// -// MARK: SPI -// - -static bool SOSBackupEventWrite(FILE *journalFile, CFErrorRef *error, - size_t len, - uint8_t *(^encode)(const uint8_t *der, uint8_t *der_end)) -{ - bool ok = false; - CFMutableDataRef derObject = CFDataCreateMutable(kCFAllocatorDefault, len); - CFDataSetLength(derObject, len); - uint8_t *der_end = CFDataGetMutableBytePtr(derObject); - const uint8_t *der = der_end; - der_end += len; - - require(der_end = encode(der, der_end), xit); - require_action(der == der_end, xit, SecError(-1, error, CFSTR("size mismatch der_end - der: %td"), der_end - der)); - - ok = SecCheckErrno(1 != fwrite(der, len, 1, journalFile), error, CFSTR("fwrite SOSBackupEventWrite")); -xit: - CFReleaseSafe(derObject); - return ok; -} - -bool SOSBackupEventWriteReset(FILE *journalFile, CFDataRef keybag, CFErrorRef *error) { - return SOSBackupEventWrite(journalFile, error, der_sizeof_backup_reset(keybag), ^uint8_t *(const uint8_t *der, uint8_t *der_end) { - return der_encode_backup_reset(keybag, error, der, der_end); - }); -} - -bool SOSBackupEventWriteDelete(FILE *journalFile, CFDataRef deletedDigest, CFErrorRef *error) { - return SOSBackupEventWrite(journalFile, error, der_sizeof_backup_delete(deletedDigest), ^uint8_t *(const uint8_t *der, uint8_t *der_end) { - return der_encode_backup_delete(deletedDigest, error, der, der_end); - }); -} - -bool SOSBackupEventWriteAdd(FILE *journalFile, CFDictionaryRef backup_item, CFErrorRef *error) { - return SOSBackupEventWrite(journalFile, error, der_sizeof_backup_add(backup_item), ^uint8_t *(const uint8_t *der, uint8_t *der_end) { - return der_encode_backup_add(backup_item, error, der, der_end); - }); -} - -bool SOSBackupEventWriteCompleteMarker(FILE *journalFile, uint64_t eventID, CFErrorRef *error) { - bool ok = SOSBackupEventWrite(journalFile, error, der_sizeof_backup_complete(eventID), ^uint8_t *(const uint8_t *der, uint8_t *der_end) { - return der_encode_backup_complete(eventID, error, der, der_end); - }); - // TODO: Move this to right before we send a notification or something. - fflush(journalFile); - return ok; -}