SecOTRSessionPriv.h [plain text]
#ifndef _SECOTRSESSIONPRIV_H_
#define _SECOTRSESSIONPRIV_H_
#include <CoreFoundation/CFBase.h>
#include <CoreFoundation/CFRuntime.h>
#include <Security/SecOTR.h>
#include <corecrypto/ccn.h>
#include <corecrypto/ccmode.h>
#include <corecrypto/ccsha1.h>
#include <CommonCrypto/CommonDigest.h>
#include <dispatch/dispatch.h>
#include <Security/SecOTRMath.h>
#include <Security/SecOTRDHKey.h>
__BEGIN_DECLS
typedef enum {
kIdle,
kAwaitingDHKey,
kAwaitingRevealSignature,
kAwaitingSignature,
kDone
} SecOTRAuthState;
struct _SecOTRCacheElement {
SecOTRFullDHKeyRef _fullKey;
uint8_t _fullKeyHash[CCSHA1_OUTPUT_SIZE];
SecOTRPublicDHKeyRef _publicKey;
uint8_t _publicKeyHash[CCSHA1_OUTPUT_SIZE];
uint8_t _sendMacKey[kOTRMessageMacKeyBytes];
uint8_t _sendEncryptionKey[kOTRMessageKeyBytes];
uint8_t _receiveMacKey[kOTRMessageMacKeyBytes];
uint8_t _receiveEncryptionKey[kOTRMessageKeyBytes];
uint64_t _counter;
uint64_t _theirCounter;
};
typedef struct _SecOTRCacheElement SecOTRCacheElement;
#define kOTRKeyCacheSize 4
struct _SecOTRSession {
CFRuntimeBase _base;
SecOTRAuthState _state;
SecOTRFullIdentityRef _me;
SecOTRPublicIdentityRef _them;
uint8_t _r[kOTRAuthKeyBytes];
CFDataRef _receivedDHMessage;
CFDataRef _receivedDHKeyMessage;
uint32_t _keyID;
SecOTRFullDHKeyRef _myKey;
SecOTRFullDHKeyRef _myNextKey;
uint32_t _theirKeyID;
SecOTRPublicDHKeyRef _theirPreviousKey;
SecOTRPublicDHKeyRef _theirKey;
CFMutableDataRef _macKeysToExpose;
dispatch_queue_t _queue;
SecOTRCacheElement _keyCache[kOTRKeyCacheSize];
bool _textOutput;
};
void SecOTRGetIncomingBytes(CFDataRef incomingMessage, CFMutableDataRef decodedBytes);
void SecOTRPrepareOutgoingBytes(CFMutableDataRef destinationMessage, CFMutableDataRef protectedMessage);
__END_DECLS
#endif