--- /dev/null
+/*
+ * Copyright (c) 2013-2014 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@
+ */
+
+
+/*!
+ @header SOSManifest.h
+ The functions provided in SOSTransport.h provide an interface to the
+ secure object syncing transport
+ */
+
+#ifndef _SEC_SOSMANIFEST_H_
+#define _SEC_SOSMANIFEST_H_
+
+#include <corecrypto/ccsha1.h>
+#include <CoreFoundation/CFData.h>
+#include <CoreFoundation/CFError.h>
+
+__BEGIN_DECLS
+
+enum {
+ kSOSManifestUnsortedError = 1,
+ kSOSManifestCreateError = 2,
+};
+
+extern CFStringRef kSOSManifestErrorDomain;
+
+/* SOSObject. */
+
+/* Forward declarations of SOS types. */
+typedef struct __OpaqueSOSManifest *SOSManifestRef;
+struct SOSDigestVector;
+
+/* SOSManifest. */
+CFTypeID SOSManifestGetTypeID(void);
+
+SOSManifestRef SOSManifestCreateWithBytes(const uint8_t *bytes, size_t len,
+ CFErrorRef *error);
+SOSManifestRef SOSManifestCreateWithDigestVector(struct SOSDigestVector *dv, CFErrorRef *error);
+SOSManifestRef SOSManifestCreateWithData(CFDataRef data, CFErrorRef *error);
+
+size_t SOSManifestGetSize(SOSManifestRef m);
+
+size_t SOSManifestGetCount(SOSManifestRef m);
+
+const uint8_t *SOSManifestGetBytePtr(SOSManifestRef m);
+
+CFDataRef SOSManifestGetData(SOSManifestRef m);
+
+const struct SOSDigestVector *SOSManifestGetDigestVector(SOSManifestRef manifest);
+
+bool SOSManifestDiff(SOSManifestRef a, SOSManifestRef b,
+ SOSManifestRef *a_minus_b, SOSManifestRef *b_minus_a,
+ CFErrorRef *error);
+
+SOSManifestRef SOSManifestCreateWithPatch(SOSManifestRef base,
+ SOSManifestRef removals,
+ SOSManifestRef additions,
+ CFErrorRef *error);
+
+// Returns the set of elements in B that are not in A.
+// This is the relative complement of A in B (B\A), sometimes written B − A
+SOSManifestRef SOSManifestCreateComplement(SOSManifestRef A,
+ SOSManifestRef B,
+ CFErrorRef *error);
+
+SOSManifestRef SOSManifestCreateIntersection(SOSManifestRef m1,
+ SOSManifestRef m2,
+ CFErrorRef *error);
+
+
+SOSManifestRef SOSManifestCreateUnion(SOSManifestRef m1,
+ SOSManifestRef m2,
+ CFErrorRef *error);
+
+void SOSManifestForEach(SOSManifestRef m, void(^block)(CFDataRef e, bool *stop));
+
+CFDataRef SOSManifestGetDigest(SOSManifestRef m, CFErrorRef *error);
+
+__END_DECLS
+
+#endif /* !_SEC_SOSMANIFEST_H_ */