X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/c38e3ce98599a410a47dc10253faa4d5830f13b2..427c49bcad63d042b29ada2ac27e3dfc4845c779:/sec/SOSCircle/SecureObjectSync/SOSPeerInfo.h?ds=sidebyside diff --git a/sec/SOSCircle/SecureObjectSync/SOSPeerInfo.h b/sec/SOSCircle/SecureObjectSync/SOSPeerInfo.h new file mode 100644 index 00000000..50ca02f8 --- /dev/null +++ b/sec/SOSCircle/SecureObjectSync/SOSPeerInfo.h @@ -0,0 +1,127 @@ +// +// SOSPeerInfo.h +// sec +// +// Created by Mitch Adler on 7/19/12. +// +// + +#ifndef _SOSPEERINFO_H_ +#define _SOSPEERINFO_H_ + +#include +#include +#include +#include +#include + +__BEGIN_DECLS + +typedef struct __OpaqueSOSPeerInfo *SOSPeerInfoRef; + +enum { + kSOSPeerVersion = 1, +}; + + +enum { + SOSPeerCmpPubKeyHash = 0, + SOSPeerCmpName = 1, +}; +typedef uint32_t SOSPeerInfoCmpSelect; + +SOSPeerInfoRef SOSPeerInfoCreate(CFAllocatorRef allocator, CFDictionaryRef gestalt, SecKeyRef signingKey, CFErrorRef* error); + +SOSPeerInfoRef SOSPeerInfoCreateCloudIdentity(CFAllocatorRef allocator, CFDictionaryRef gestalt, SecKeyRef signingKey, CFErrorRef* error); + +SOSPeerInfoRef SOSPeerInfoCreateCopy(CFAllocatorRef allocator, SOSPeerInfoRef toCopy, CFErrorRef* error); +SOSPeerInfoRef SOSPeerInfoCopyWithGestaltUpdate(CFAllocatorRef allocator, SOSPeerInfoRef toCopy, CFDictionaryRef gestalt, SecKeyRef signingKey, CFErrorRef* error); +SOSPeerInfoRef SOSPeerInfoCopyAsApplication(SOSPeerInfoRef pi, SecKeyRef userkey, SecKeyRef peerkey, CFErrorRef *error); + +bool SOSPeerInfoUpdateDigestWithPublicKeyBytes(SOSPeerInfoRef peer, const struct ccdigest_info *di, + ccdigest_ctx_t ctx, CFErrorRef *error); +bool SOSPeerInfoUpdateDigestWithDescription(SOSPeerInfoRef peer, const struct ccdigest_info *di, + ccdigest_ctx_t ctx, CFErrorRef *error); + + +bool SOSPeerInfoApplicationVerify(SOSPeerInfoRef pi, SecKeyRef userkey, CFErrorRef *error); + +CF_RETURNS_RETAINED CFDateRef SOSPeerInfoGetApplicationDate(SOSPeerInfoRef pi); + +// +// DER Import Export +// +SOSPeerInfoRef SOSPeerInfoCreateFromDER(CFAllocatorRef allocator, CFErrorRef* error, + const uint8_t** der_p, const uint8_t *der_end); + +SOSPeerInfoRef SOSPeerInfoCreateFromData(CFAllocatorRef allocator, CFErrorRef* error, + CFDataRef peerinfo_data); + +size_t SOSPeerInfoGetDEREncodedSize(SOSPeerInfoRef peer, CFErrorRef *error); +uint8_t* SOSPeerInfoEncodeToDER(SOSPeerInfoRef peer, CFErrorRef* error, + const uint8_t* der, uint8_t* der_end); + +CFDataRef SOSPeerInfoCopyEncodedData(SOSPeerInfoRef peer, CFAllocatorRef allocator, CFErrorRef *error); + +// +// Gestalt info about the peer. It was fetched by the implementation on the other side. +// probably has what you're looking for.. +// +CFTypeRef SOSPeerInfoLookupGestaltValue(SOSPeerInfoRef pi, CFStringRef key); +CFDictionaryRef SOSPeerInfoCopyPeerGestalt(SOSPeerInfoRef pi); + +// +// Syntactic Sugar for some commone ones, might get deprectated at this level. +// +CFStringRef SOSPeerInfoGetPeerName(SOSPeerInfoRef peer); +CFStringRef SOSPeerInfoGetPeerDeviceType(SOSPeerInfoRef peer); + + +// Stringified ID for this peer, not human readable. +CFStringRef SOSPeerInfoGetPeerID(SOSPeerInfoRef peer); + +CFIndex SOSPeerInfoGetVersion(SOSPeerInfoRef peer); + + + +// +// Peer Info Arrays +// + +CFMutableArrayRef SOSPeerInfoArrayCreateFromDER(CFAllocatorRef allocator, CFErrorRef* error, + const uint8_t** der_p, const uint8_t *der_end); +size_t SOSPeerInfoArrayGetDEREncodedSize(CFArrayRef pia, CFErrorRef *error); +uint8_t* SOSPeerInfoArrayEncodeToDER(CFArrayRef pia, CFErrorRef* error, const uint8_t* der, uint8_t* der_end); + +CFArrayRef CreateArrayOfPeerInfoWithXPCObject(xpc_object_t peerArray, CFErrorRef* error); +xpc_object_t CreateXPCObjectWithArrayOfPeerInfo(CFArrayRef array, CFErrorRef *error); + +// +// Peer Info Gestalt Helpers +// +CFStringRef SOSPeerGestaltGetName(CFDictionaryRef gestalt); + +// These are Mobile Gestalt questions. Not all Gestalt questions are carried. +CFTypeRef SOSPeerGestaltGetAnswer(CFDictionaryRef gestalt, CFStringRef question); + +SecKeyRef SOSPeerInfoCopyPubKey(SOSPeerInfoRef peer); + +CFComparisonResult SOSPeerInfoCompareByID(const void *val1, const void *val2, void *context); + +SOSPeerInfoRef SOSPeerInfoCreateRetirementTicket(CFAllocatorRef allocator, SecKeyRef privKey, SOSPeerInfoRef peer, CFErrorRef *error); + +CFStringRef SOSPeerInfoInspectRetirementTicket(SOSPeerInfoRef pi, CFErrorRef *error); + +bool SOSPeerInfoRetireRetirementTicket(size_t max_days, SOSPeerInfoRef pi); + +CF_RETURNS_RETAINED CFDateRef SOSPeerInfoGetRetirementDate(SOSPeerInfoRef pi); + +bool SOSPeerInfoIsRetirementTicket(SOSPeerInfoRef pi); + +bool SOSPeerInfoIsCloudIdentity(SOSPeerInfoRef pi); + +SOSPeerInfoRef SOSPeerInfoUpgradeSignatures(CFAllocatorRef allocator, SecKeyRef privKey, SecKeyRef perKey, SOSPeerInfoRef peer, CFErrorRef *error); + +__END_DECLS + +#endif