/ keychain / SecureObjectSync / SOSCoder.h
SOSCoder.h
 1  /*
 2   * Copyright (c) 2013-2014 Apple Inc. All Rights Reserved.
 3   *
 4   * @APPLE_LICENSE_HEADER_START@
 5   * 
 6   * This file contains Original Code and/or Modifications of Original Code
 7   * as defined in and that are subject to the Apple Public Source License
 8   * Version 2.0 (the 'License'). You may not use this file except in
 9   * compliance with the License. Please obtain a copy of the License at
10   * http://www.opensource.apple.com/apsl/ and read it before using this
11   * file.
12   * 
13   * The Original Code and all software distributed under the License are
14   * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15   * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16   * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17   * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18   * Please see the License for the specific language governing rights and
19   * limitations under the License.
20   * 
21   * @APPLE_LICENSE_HEADER_END@
22   */
23  
24  
25  #ifndef _SEC_SOSCODER_H_
26  #define _SEC_SOSCODER_H_
27  
28  
29  #include "keychain/SecureObjectSync/SOSFullPeerInfo.h"
30  #include <Security/SecureObjectSync/SOSPeerInfo.h>
31  
32  typedef struct __OpaqueSOSCoder *SOSCoderRef;
33  typedef bool (^SOSPeerSendBlock)(CFDataRef message, CFErrorRef *error);
34  
35  enum {
36      kSOSCoderDataReturned = 0,
37      kSOSCoderNegotiating = 1,
38      kSOSCoderNegotiationCompleted = 2,
39      kSOSCoderFailure = 3,
40      kSOSCoderStaleEvent = 4,
41      kSOSCoderTooNew = 5,
42      kSOSCoderForceMessage = 6,
43  };
44  
45  typedef uint32_t SOSCoderStatus;
46  
47  CFTypeID SOSCoderGetTypeID(void);
48  
49  SOSCoderRef SOSCoderCreate(SOSPeerInfoRef peerInfo, SOSFullPeerInfoRef myPeerInfo, CFBooleanRef useCompact, CFErrorRef *error);
50  SOSCoderRef SOSCoderCreateFromData(CFDataRef exportedData, CFErrorRef *error);
51  
52  CFDataRef SOSCoderCopyDER(SOSCoderRef coder, CFErrorRef* error);
53  
54  CFStringRef SOSCoderGetID(SOSCoderRef coder);
55  
56  bool SOSCoderIsFor(SOSCoderRef coder, SOSPeerInfoRef peerInfo, SOSFullPeerInfoRef myPeerInfo);
57  
58  SOSCoderStatus
59  SOSCoderStart(SOSCoderRef coder, CFErrorRef *error);
60  
61  SOSCoderStatus
62  SOSCoderResendDH(SOSCoderRef coder, CFErrorRef *error);
63  
64  void SOSCoderPersistState(CFStringRef peer_id, SOSCoderRef coder);
65  
66  SOSCoderStatus SOSCoderUnwrap(SOSCoderRef coder, CFDataRef codedMessage, CFMutableDataRef *message,
67                                CFStringRef clientId, CFErrorRef *error);
68  
69  SOSCoderStatus SOSCoderWrap(SOSCoderRef coder, CFDataRef message, CFMutableDataRef *codedMessage, CFStringRef clientId, CFErrorRef *error);
70  
71  bool SOSCoderCanWrap(SOSCoderRef coder);
72  
73  void SOSCoderReset(SOSCoderRef coder);
74  
75  CFDataRef SOSCoderCopyPendingResponse(SOSCoderRef coder);
76  void SOSCoderConsumeResponse(SOSCoderRef coder);
77  bool SOSCoderIsCoderInAwaitingState(SOSCoderRef coder);
78      
79  #endif // _SEC_SOSCODER_H_