]> git.saurik.com Git - apple/security.git/blobdiff - sec/SOSCircle/SecureObjectSync/SOSTransport.h
Security-55471.tar.gz
[apple/security.git] / sec / SOSCircle / SecureObjectSync / SOSTransport.h
diff --git a/sec/SOSCircle/SecureObjectSync/SOSTransport.h b/sec/SOSCircle/SecureObjectSync/SOSTransport.h
new file mode 100644 (file)
index 0000000..7cbe8ac
--- /dev/null
@@ -0,0 +1,103 @@
+/*
+ * Created by Michael Brouwer on 2/14/12.
+ * Copyright 2012 Apple Inc. All Rights Reserved.
+ */
+
+/*!
+ @header SOSTransport
+ The functions provided in SOSTransport.h provide an interface to the
+ secure object syncing transport
+ */
+
+#ifndef _SOSTRANSPORT_H_
+#define _SOSTRANSPORT_H_
+
+#include <corecrypto/ccsha1.h>
+#include <CoreFoundation/CFData.h>
+#include <CoreFoundation/CFError.h>
+
+__BEGIN_DECLS
+
+enum {
+    kSOSManifestUnsortedError = 1,
+    kSOSManifestCreateError = 2,
+};
+
+
+/* SOSTransport. */
+
+/* SOSTransport protocol (not opaque). */
+typedef struct SOSTransport *SOSTransportRef;
+
+struct SOSTransport {
+    bool (*send)(SOSTransportRef transport, CFDataRef message);
+};
+
+/* Return the singleton cloud transport instance. */
+SOSTransportRef SOSTransportCopyCloudTransport(void);
+
+#define SOSDigestSize ((size_t)CCSHA1_OUTPUT_SIZE)
+
+#define SOSDigestVectorInit { .digest = NULL, .count = 0, .capacity = 0, .is_sorted = false }
+
+struct SOSDigestVector {
+    uint8_t (*digest)[SOSDigestSize];
+    size_t count;
+    size_t capacity;
+    bool is_sorted;
+};
+
+/* SOSDigestVector. */
+void SOSDigestVectorAppend(struct SOSDigestVector *dv, const uint8_t *digest);
+void SOSDigestVectorSort(struct SOSDigestVector *dv);
+size_t SOSDigestVectorIndexOf(struct SOSDigestVector *dv, const uint8_t *digest);
+bool SOSDigestVectorContains(struct SOSDigestVector *dv, const uint8_t *digest);
+void SOSDigestVectorReplaceAtIndex(struct SOSDigestVector *dv, size_t ix, const uint8_t *digest);
+void SOSDigestVectorFree(struct SOSDigestVector *dv);
+
+typedef void (*SOSDigestVectorApplyFunc)(void *context, const uint8_t digest[SOSDigestSize]);
+void SOSDigestVectorApply(struct SOSDigestVector *dv,
+                          void *context, SOSDigestVectorApplyFunc func);
+void SOSDigestVectorDiff(struct SOSDigestVector *dv1, struct SOSDigestVector *dv2,
+                         struct SOSDigestVector *dv1_2, struct SOSDigestVector *dv2_1);
+bool SOSDigestVectorPatch(struct SOSDigestVector *base, struct SOSDigestVector *removals,
+                          struct SOSDigestVector *additions, struct SOSDigestVector *dv,
+                          CFErrorRef *error);
+
+/* SOSObject. */
+
+/* Forward declarations of SOS types. */
+typedef struct __OpaqueSOSObjectID *SOSObjectID;
+typedef struct __OpaqueSOSManifest *SOSManifestRef;
+
+/* SOSManifest. */
+SOSManifestRef SOSManifestCreateWithBytes(const uint8_t *bytes, size_t len,
+                                          CFErrorRef *error);
+SOSManifestRef SOSManifestCreateWithData(CFDataRef data, CFErrorRef *error);
+void SOSManifestDispose(SOSManifestRef m);
+size_t SOSManifestGetSize(SOSManifestRef m);
+size_t SOSManifestGetCount(SOSManifestRef m);
+const uint8_t *SOSManifestGetBytePtr(SOSManifestRef m);
+CFDataRef SOSManifestGetData(SOSManifestRef m);
+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);
+void SOSManifestForEach(SOSManifestRef m, void(^block)(CFDataRef e));
+
+CFStringRef SOSManifestCopyDescription(SOSManifestRef m);
+
+#if 0
+SOSObjectRef SOSManifestGetObject(SOSManifestRef m, SOSObjectID k);
+void SOSManifestPutObject(SOSManifestRef m, SOSObjectID k, SOSObjectRef v);
+
+typedef SOSObjectRef(*SOSManifestGetF)(void *get_ctx, SOSObjectID k);
+SOSManifestRef SOSManifestCreateSparse(void *get_ctx, SOSManifestGetF get_f);
+#endif
+
+__END_DECLS
+
+#endif /* !_SOSTRANSPORT_H_ */