]> git.saurik.com Git - apple/security.git/blob - sec/SOSCircle/SecureObjectSync/SOSTransport.h
Security-55471.14.8.tar.gz
[apple/security.git] / sec / SOSCircle / SecureObjectSync / SOSTransport.h
1 /*
2 * Created by Michael Brouwer on 2/14/12.
3 * Copyright 2012 Apple Inc. All Rights Reserved.
4 */
5
6 /*!
7 @header SOSTransport
8 The functions provided in SOSTransport.h provide an interface to the
9 secure object syncing transport
10 */
11
12 #ifndef _SOSTRANSPORT_H_
13 #define _SOSTRANSPORT_H_
14
15 #include <corecrypto/ccsha1.h>
16 #include <CoreFoundation/CFData.h>
17 #include <CoreFoundation/CFError.h>
18
19 __BEGIN_DECLS
20
21 enum {
22 kSOSManifestUnsortedError = 1,
23 kSOSManifestCreateError = 2,
24 };
25
26
27 /* SOSTransport. */
28
29 /* SOSTransport protocol (not opaque). */
30 typedef struct SOSTransport *SOSTransportRef;
31
32 struct SOSTransport {
33 bool (*send)(SOSTransportRef transport, CFDataRef message);
34 };
35
36 /* Return the singleton cloud transport instance. */
37 SOSTransportRef SOSTransportCopyCloudTransport(void);
38
39 #define SOSDigestSize ((size_t)CCSHA1_OUTPUT_SIZE)
40
41 #define SOSDigestVectorInit { .digest = NULL, .count = 0, .capacity = 0, .is_sorted = false }
42
43 struct SOSDigestVector {
44 uint8_t (*digest)[SOSDigestSize];
45 size_t count;
46 size_t capacity;
47 bool is_sorted;
48 };
49
50 /* SOSDigestVector. */
51 void SOSDigestVectorAppend(struct SOSDigestVector *dv, const uint8_t *digest);
52 void SOSDigestVectorSort(struct SOSDigestVector *dv);
53 size_t SOSDigestVectorIndexOf(struct SOSDigestVector *dv, const uint8_t *digest);
54 bool SOSDigestVectorContains(struct SOSDigestVector *dv, const uint8_t *digest);
55 void SOSDigestVectorReplaceAtIndex(struct SOSDigestVector *dv, size_t ix, const uint8_t *digest);
56 void SOSDigestVectorFree(struct SOSDigestVector *dv);
57
58 typedef void (*SOSDigestVectorApplyFunc)(void *context, const uint8_t digest[SOSDigestSize]);
59 void SOSDigestVectorApply(struct SOSDigestVector *dv,
60 void *context, SOSDigestVectorApplyFunc func);
61 void SOSDigestVectorDiff(struct SOSDigestVector *dv1, struct SOSDigestVector *dv2,
62 struct SOSDigestVector *dv1_2, struct SOSDigestVector *dv2_1);
63 bool SOSDigestVectorPatch(struct SOSDigestVector *base, struct SOSDigestVector *removals,
64 struct SOSDigestVector *additions, struct SOSDigestVector *dv,
65 CFErrorRef *error);
66
67 /* SOSObject. */
68
69 /* Forward declarations of SOS types. */
70 typedef struct __OpaqueSOSObjectID *SOSObjectID;
71 typedef struct __OpaqueSOSManifest *SOSManifestRef;
72
73 /* SOSManifest. */
74 SOSManifestRef SOSManifestCreateWithBytes(const uint8_t *bytes, size_t len,
75 CFErrorRef *error);
76 SOSManifestRef SOSManifestCreateWithData(CFDataRef data, CFErrorRef *error);
77 void SOSManifestDispose(SOSManifestRef m);
78 size_t SOSManifestGetSize(SOSManifestRef m);
79 size_t SOSManifestGetCount(SOSManifestRef m);
80 const uint8_t *SOSManifestGetBytePtr(SOSManifestRef m);
81 CFDataRef SOSManifestGetData(SOSManifestRef m);
82 bool SOSManifestDiff(SOSManifestRef a, SOSManifestRef b,
83 SOSManifestRef *a_minus_b, SOSManifestRef *b_minus_a,
84 CFErrorRef *error);
85 SOSManifestRef SOSManifestCreateWithPatch(SOSManifestRef base,
86 SOSManifestRef removals,
87 SOSManifestRef additions,
88 CFErrorRef *error);
89 void SOSManifestForEach(SOSManifestRef m, void(^block)(CFDataRef e));
90
91 CFStringRef SOSManifestCopyDescription(SOSManifestRef m);
92
93 #if 0
94 SOSObjectRef SOSManifestGetObject(SOSManifestRef m, SOSObjectID k);
95 void SOSManifestPutObject(SOSManifestRef m, SOSObjectID k, SOSObjectRef v);
96
97 typedef SOSObjectRef(*SOSManifestGetF)(void *get_ctx, SOSObjectID k);
98 SOSManifestRef SOSManifestCreateSparse(void *get_ctx, SOSManifestGetF get_f);
99 #endif
100
101 __END_DECLS
102
103 #endif /* !_SOSTRANSPORT_H_ */