00001
00045 #ifndef SSL_H
00046 #define SSL_H
00047
00048 #include "aglobal.h"
00049 #include "bsafe.h"
00050
00051 #ifdef HAVE_SWIFT
00052 #include "bswift.h"
00053 #endif
00054
00058 #define SSL_PROTOCOL_VERSION "2"
00059 #define SSL_SERVER_VERSION 2
00060
00061
00065 extern B_ALGORITHM_METHOD *ALGORITHM_CHOOSER[];
00066 extern B_ALGORITHM_METHOD *DIGEST_CHOOSER[];
00067
00068
00072 #define SSL_MT_ERROR 0
00073 #define SSL_MT_CLIENT_HELLO 1
00074 #define SSL_MT_CLIENT_MASTER_KEY 2
00075 #define SSL_MT_CLIENT_FINISHED_V2 3
00076 #define SSL_MT_SERVER_HELLO 4
00077 #define SSL_MT_SERVER_VERIFY 5
00078 #define SSL_MT_SERVER_FINISHED_V2 6
00079 #define SSL_MT_REQUEST_CERTIFICATE 7
00080 #define SSL_MT_CLIENT_CERTIFICATE 8
00081 #define SSL_MT_CLIENT_DH_KEY 9
00082 #define SSL_MT_CLIENT_SESSION_KEY 10
00083 #define SSL_MT_CLIENT_FINISHED 11
00084 #define SSL_MT_SERVER_FINISHED 12
00085
00086
00090 #define SSL_CK_RC4_128_WITH_MD5 0x01010080
00091 #define SSL_CK_RC4_128_EXPORT40_WITH_MD5 0x01020080
00092 #define SSL_CK_RC2_128_CBC_WITH_MD5 0x01030080
00093 #define SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5 0x01040080
00094 #define SSL_CK_IDEA_128_CBC_WITH_MD5 0x01050080
00095 #define SSL_CK_DES_64_CBC_WITH_MD5 0x01060040
00096 #define SSL_CK_DES_192_EDE3_CBC_WITH_MD5 0x010700C0
00097 #define SSL_CK_NULL_WITH_MD5 0x01000000
00098 #define SSL_CK_DES_64_CBC_WITH_SHA 0x01060140
00099 #define SSL_CK_DES_192_EDE3_WITH_SHA 0x010701C0
00100
00101 #define NSEEDS 4
00102 #define SSL_SESSION_ID_LENGTH 16
00103
00104
00108 #define SSL_CT_X509_CERTIFICATE 1
00109 #define SSL_CT_PKCS7_CERTIFICATE 2
00110
00111
00115 #define SSL_PE_NO_CIPHER 0x0001
00116 #define SSL_PE_NO_CERTIFICATE 0x0002
00117 #define SSL_PE_BAD_CERTIFICATE 0x0004
00118 #define SSL_PE_UNSUPPORTED_CERTIFICATE_TYPE 0x0006
00119
00120
00124 #define SSL_AT_MD5_WITH_RSA_ENCRYPTION 0x01
00125
00126
00131 #define SSL_MAX_RECORD_LENGTH_2_BYTE_HEADER 16383
00132 #define SSL_MAX_RECORD_LENGTH_3_BYTE_HEADER 16383
00133 #define SSL_MACSIZE 16
00134 #define SSL_MAXRECSIZE 32767
00135 #define SSL_MAXPADDING 8
00136
00137
00138 #ifdef WIN32
00139 #define EOLSTRING "\r\n"
00140 #else
00141 #define EOLSTRING "\n"
00142 #endif
00143
00144
00150 typedef struct {
00151 int nRecordLength;
00152 int fIsEscape;
00153 int nPadding;
00154 unsigned char *mac;
00155 unsigned char *data;
00156 unsigned char macBuf[SSL_MACSIZE];
00157 unsigned char input[3 + SSL_MAXRECSIZE];
00158 unsigned char output[3 + SSL_MAXRECSIZE];
00159 } SSLRecord;
00160
00161
00167 typedef struct {
00168 B_KEY_OBJ privateKey;
00169 unsigned char *certificate;
00170 int certificateLength;
00171 } SSLServer;
00172
00173
00179 typedef struct {
00180 SOCKET socket;
00181 int timeout;
00182 SSLServer *ctx;
00183 SSLRecord rec;
00184 unsigned nReadSequence;
00185 unsigned nWriteSequence;
00186 int fEncryptionActive;
00187 B_ALGORITHM_OBJ digester;
00188 B_ALGORITHM_OBJ encryptor;
00189 B_ALGORITHM_OBJ decryptor;
00190 unsigned char challenge[32];
00191 int challengeLength;
00192 unsigned char connId[SSL_SESSION_ID_LENGTH];
00193 unsigned char sessionId[SSL_SESSION_ID_LENGTH];
00194 int cipherKind;
00195 unsigned char masterKey[1024];
00196 int masterKeyLength;
00197 unsigned char readKeyArgData[8];
00198 unsigned char writeKeyArgData[8];
00199 int keyArgLength;
00200 unsigned char readKey[24];
00201 B_KEY_OBJ readKeyObj;
00202 unsigned char writeKey[24];
00203 B_KEY_OBJ writeKeyObj;
00204 unsigned ReadWriteKeyLength;
00205 unsigned int blockSize;
00206 unsigned int macSize;
00207 unsigned char *incomingNext;
00208 unsigned char incoming[SSL_MAXRECSIZE];
00209 int incomingLength;
00210 unsigned char outgoing[SSL_MAXRECSIZE];
00211 int outgoingLength;
00212
00218 int cnt;
00219 char *base;
00220 char buf[SSL_MAXRECSIZE];
00221
00222 } SSLConn;
00223
00224
00225 extern int
00226 NsSSLGenerateKeypair(unsigned int modulusBits,
00227 ITEM * publicExponent,
00228 B_KEY_OBJ * publicKey,
00229 B_KEY_OBJ * privateKey);
00230
00231
00232 extern int
00233 NsSSLInitialize(char *server, char *module);
00234
00235 extern void *
00236 NsSSLCreateServer(char *cert, char *key);
00237
00238 extern void
00239 NsSSLDestroyServer(void *server);
00240
00241 extern void *
00242 NsSSLCreateConn(SOCKET socket, int timeout, void *server);
00243
00244 extern void
00245 NsSSLDestroyConn(void *conn);
00246
00247 extern int
00248 NsSSLSend(void *conn, void *vbuf, int towrite);
00249
00250 extern int
00251 NsSSLRecv(void *conn, void *vbuf, int toread);
00252
00253 extern int
00254 NsSSLFlush(void *conn);
00255
00256 extern void *
00257 SSLCreateServer(char *cert, char *key);
00258
00259 extern void
00260 SSLDestroyServer(void *server);
00261
00262 extern void *
00263 SSLCreateConn(SOCKET sock, int timeout, void *server);
00264
00265 extern void
00266 SSLDestroyConn(void *conn);
00267
00268 extern int
00269 SSLFlush(void *conn);
00270
00271 extern int
00272 SSLRecv(void *conn, void *vbuf, int toread);
00273
00274 extern int
00275 SSLSend(void *conn, void *vbuf, int tosend);
00276
00277
00278 #endif