#ifndef _EAP8021X_EAPTLSUTIL_H
#define _EAP8021X_EAPTLSUTIL_H
#include <Security/SecureTransport.h>
#include <Security/SecCertificate.h>
#include <CoreFoundation/CFBase.h>
#include <CoreFoundation/CFData.h>
#include <CoreFoundation/CFArray.h>
#include <CoreFoundation/CFDictionary.h>
#include <stdbool.h>
#include <EAP8021X/EAPTLS.h>
#include <EAP8021X/EAPClientTypes.h>
typedef struct memoryBuffer_s {
void * data;
size_t length;
size_t offset;
} memoryBuffer, *memoryBufferRef;
typedef struct {
bool debug;
memoryBufferRef read;
memoryBufferRef write;
} memoryIO, * memoryIORef;
SSLContextRef
EAPSSLContextCreate(SSLProtocol protocol, bool is_server,
SSLReadFunc func_read, SSLWriteFunc func_write,
void * handle, char * peername, OSStatus * ret_status);
SSLContextRef
EAPTLSMemIOContextCreate(bool is_server, memoryIORef mem_io,
char * peername, OSStatus * ret_status);
#if 0
OSStatus
EAPSSLContextSetCipherRestrictions(SSLContextRef ctx, char cipherRestrict);
const char *
EAPSSLCipherSuiteString(SSLCipherSuite cs);
const char *
EAPSSLProtocolVersionString(SSLProtocol prot);
#endif 0
const char *
EAPSSLErrorString(OSStatus err);
OSStatus
EAPSSLMemoryIORead(SSLConnectionRef connection, void * data_buf,
size_t * data_length);
OSStatus
EAPSSLMemoryIOWrite(SSLConnectionRef connection, const void * data_buf,
size_t * data_length);
OSStatus
EAPTLSComputeKeyData(SSLContextRef ssl_context,
const void * label, int label_length,
void * key, int key_length);
void
memoryBufferClear(memoryBufferRef buf);
void
memoryBufferInit(memoryBufferRef buf);
void
memoryIOClearBuffers(memoryIORef mem_io);
void
memoryIOInit(memoryIORef mem_io, memoryBufferRef read_buf,
memoryBufferRef write_buf);
void
memoryIOSetDebug(memoryIORef mem_io, bool debug);
EAPPacketRef
EAPTLSPacketCreate(EAPCode code, int type, u_char identifier, int mtu,
memoryBufferRef buf, int * ret_fraglen);
EAPPacketRef
EAPTLSPacketCreate2(EAPCode code, int type, u_char identifier, int mtu,
memoryBufferRef buf, int * ret_fraglen,
bool always_mark_first);
OSStatus
EAPSSLCopyPeerCertificates(SSLContextRef context, CFArrayRef * certs);
EAPClientStatus
EAPTLSVerifyServerCertificateChain(CFDictionaryRef properties,
CFArrayRef server_certs,
OSStatus * ret_status);
CFArrayRef
mySecCertificateArrayCreateCFDataArray(CFArrayRef certs);
OSStatus
EAPSecPolicyCopy(SecPolicyRef * ret_policy);
#endif _EAP8021X_EAPTLSUTIL_H