#ifndef _SSLHDSHK_H_
#define _SSLHDSHK_H_ 72
#ifndef _SSL_H_
#endif
#ifndef _CRYPTYPE_H_
#include "cryptType.h"
#endif
#ifndef _SSLREC_H_
#include "sslrec.h"
#endif
typedef enum
{ SSL_hello_request = 0,
SSL_client_hello = 1,
SSL_server_hello = 2,
SSL_certificate = 11,
SSL_server_key_exchange = 12,
SSL_certificate_request = 13,
SSL_server_hello_done = 14,
SSL_certificate_verify = 15,
SSL_client_key_exchange = 16,
SSL_finished = 20,
SSL_MAGIC_no_certificate_alert = 100
} SSLHandshakeType;
typedef enum
{ SSL_read,
SSL_write
} CipherSide;
typedef enum
{
SSLUninitialized = 0,
HandshakeServerUninit,
HandshakeClientUninit,
SSLGracefulClose,
SSLErrorClose,
SSLNoNotifyClose,
HandshakeServerHello,
HandshakeServerHelloUnknownVersion,
HandshakeKeyExchange,
HandshakeCertificate,
HandshakeHelloDone,
HandshakeClientCertificate,
HandshakeClientKeyExchange,
HandshakeClientCertVerify,
HandshakeChangeCipherSpec,
HandshakeFinished,
HandshakeSSL2ClientMasterKey,
HandshakeSSL2ClientFinished,
HandshakeSSL2ServerHello,
HandshakeSSL2ServerVerify,
HandshakeSSL2ServerFinished,
HandshakeServerReady,
HandshakeClientReady
} SSLHandshakeState;
typedef struct
{ SSLHandshakeType type;
SSLBuffer contents;
} SSLHandshakeMsg;
#define SSL_Finished_Sender_Server 0x53525652
#define SSL_Finished_Sender_Client 0x434C4E54
typedef SSLErr (*EncodeMessageFunc)(SSLRecord *rec, SSLContext *ctx);
SSLErr SSLProcessHandshakeRecord(SSLRecord rec, SSLContext *ctx);
SSLErr SSLPrepareAndQueueMessage(EncodeMessageFunc msgFunc, SSLContext *ctx);
SSLErr SSLAdvanceHandshake(SSLHandshakeType processed, SSLContext *ctx);
SSLErr SSL3ReceiveSSL2ClientHello(SSLRecord rec, SSLContext *ctx);
SSLErr SSLEncodeChangeCipherSpec(SSLRecord *rec, SSLContext *ctx);
SSLErr SSLProcessChangeCipherSpec(SSLRecord rec, SSLContext *ctx);
SSLErr SSLDisposeCipherSuite(CipherContext *cipher, SSLContext *ctx);
SSLErr SSLEncodeCertificate(SSLRecord *certificate, SSLContext *ctx);
SSLErr SSLProcessCertificate(SSLBuffer message, SSLContext *ctx);
SSLErr SSLEncodeCertificateRequest(SSLRecord *request, SSLContext *ctx);
SSLErr SSLProcessCertificateRequest(SSLBuffer message, SSLContext *ctx);
SSLErr SSLEncodeCertificateVerify(SSLRecord *verify, SSLContext *ctx);
SSLErr SSLProcessCertificateVerify(SSLBuffer message, SSLContext *ctx);
SSLErr SSLEncodeServerHello(SSLRecord *serverHello, SSLContext *ctx);
SSLErr SSLProcessServerHello(SSLBuffer message, SSLContext *ctx);
SSLErr SSLEncodeClientHello(SSLRecord *clientHello, SSLContext *ctx);
SSLErr SSLProcessClientHello(SSLBuffer message, SSLContext *ctx);
SSLErr SSLInitMessageHashes(SSLContext *ctx);
SSLErr SSLEncodeServerKeyExchange(SSLRecord *keyExch, SSLContext *ctx);
SSLErr SSLProcessServerKeyExchange(SSLBuffer message, SSLContext *ctx);
SSLErr SSLEncodeKeyExchange(SSLRecord *keyExchange, SSLContext *ctx);
SSLErr SSLProcessKeyExchange(SSLBuffer keyExchange, SSLContext *ctx);
SSLErr SSLEncodeFinishedMessage(SSLRecord *finished, SSLContext *ctx);
SSLErr SSLProcessFinished(SSLBuffer message, SSLContext *ctx);
SSLErr SSLEncodeServerHelloDone(SSLRecord *helloDone, SSLContext *ctx);
SSLErr SSLProcessServerHelloDone(SSLBuffer message, SSLContext *ctx);
SSLErr SSLCalculateFinishedMessage(SSLBuffer finished, SSLBuffer shaMsgState, SSLBuffer md5MsgState, UInt32 senderID, SSLContext *ctx);
SSLErr SSLEncodeRSAPremasterSecret(SSLContext *ctx);
SSLErr SSLEncodeDHPremasterSecret(SSLContext *ctx);
SSLErr SSLInitPendingCiphers(SSLContext *ctx);
#endif