1//
2//  SOSFullPeerInfo.h
3//  sec
4//
5//  Created by Mitch Adler on 10/26/12.
6//
7//
8
9#ifndef _SOSFULLPEERINFO_H_
10#define _SOSFULLPEERINFO_H_
11
12#include <CoreFoundation/CoreFoundation.h>
13#include <Security/SecKey.h>
14#include <CommonCrypto/CommonDigestSPI.h>
15#include <SecureObjectSync/SOSPeerInfo.h>
16
17__BEGIN_DECLS
18
19typedef struct __OpaqueSOSFullPeerInfo   *SOSFullPeerInfoRef;
20
21enum {
22    kSOSFullPeerVersion = 1,
23};
24
25SOSFullPeerInfoRef SOSFullPeerInfoCreate(CFAllocatorRef allocator, CFDictionaryRef gestalt, SecKeyRef signingKey, CFErrorRef *error);
26
27SOSFullPeerInfoRef SOSFullPeerInfoCreateCloudIdentity(CFAllocatorRef allocator, SOSPeerInfoRef peer, CFErrorRef* error);
28
29SOSPeerInfoRef SOSFullPeerInfoGetPeerInfo(SOSFullPeerInfoRef fullPeer);
30SecKeyRef      SOSFullPeerInfoCopyDeviceKey(SOSFullPeerInfoRef fullPeer, CFErrorRef* error);
31
32bool SOSFullPeerInfoPurgePersistentKey(SOSFullPeerInfoRef peer, CFErrorRef* error);
33
34SOSPeerInfoRef SOSFullPeerInfoPromoteToRetiredAndCopy(SOSFullPeerInfoRef peer, CFErrorRef *error);
35
36bool SOSFullPeerInfoValidate(SOSFullPeerInfoRef peer, CFErrorRef* error);
37
38bool SOSFullPeerInfoUpdateGestalt(SOSFullPeerInfoRef peer, CFDictionaryRef gestalt, CFErrorRef* error);
39
40bool SOSFullPeerInfoPromoteToApplication(SOSFullPeerInfoRef fpi, SecKeyRef user_key, CFErrorRef *error);
41
42bool SOSFullPeerInfoUpgradeSignatures(SOSFullPeerInfoRef fpi, SecKeyRef user_key, CFErrorRef *error);
43
44//
45// DER Import Export
46//
47SOSFullPeerInfoRef SOSFullPeerInfoCreateFromDER(CFAllocatorRef allocator, CFErrorRef* error,
48                                        const uint8_t** der_p, const uint8_t *der_end);
49
50SOSFullPeerInfoRef SOSFullPeerInfoCreateFromData(CFAllocatorRef allocator, CFDataRef fullPeerData, CFErrorRef *error);
51
52size_t      SOSFullPeerInfoGetDEREncodedSize(SOSFullPeerInfoRef peer, CFErrorRef *error);
53uint8_t*    SOSFullPeerInfoEncodeToDER(SOSFullPeerInfoRef peer, CFErrorRef* error,
54                                   const uint8_t* der, uint8_t* der_end);
55
56CFDataRef SOSFullPeerInfoCopyEncodedData(SOSFullPeerInfoRef peer, CFAllocatorRef allocator, CFErrorRef *error);
57
58__END_DECLS
59
60#endif
61