* [including the GNU Public Licence.]
*/
+#ifndef NO_RSA
#include <stdio.h>
-#include "rsa.h"
-#include "objects.h"
+#include <openssl/rsa.h>
+#include <openssl/objects.h>
+#include <openssl/md5.h>
#include "ssl_locl.h"
-#ifndef NOPROTO
static long ssl2_default_timeout(void );
-#else
-static long ssl2_default_timeout();
-#endif
-
-char *ssl2_version_str="SSLv2 part of SSLeay 0.9.1c 22-Dec-1998";
+const char *ssl2_version_str="SSLv2" OPENSSL_VERSION_PTEXT;
#define SSL2_NUM_CIPHERS (sizeof(ssl2_ciphers)/sizeof(SSL_CIPHER))
-SSL_CIPHER ssl2_ciphers[]={
+OPENSSL_GLOBAL SSL_CIPHER ssl2_ciphers[]={
/* NULL_WITH_MD5 v3 */
#if 0
{
1,
SSL2_TXT_NULL_WITH_MD5,
SSL2_CK_NULL_WITH_MD5,
- SSL_kRSA|SSL_aRSA|SSL_eNULL|SSL_MD5|SSL_EXP|SSL_SSLV2,
+ SSL_kRSA|SSL_aRSA|SSL_eNULL|SSL_MD5|SSL_EXP40|SSL_SSLV2,
0,
SSL_ALL_CIPHERS,
},
1,
SSL2_TXT_RC4_128_EXPORT40_WITH_MD5,
SSL2_CK_RC4_128_EXPORT40_WITH_MD5,
- SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5|SSL_EXP|SSL_SSLV2,
+ SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5|SSL_EXP40|SSL_SSLV2,
SSL2_CF_5_BYTE_ENC,
SSL_ALL_CIPHERS,
},
1,
SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5,
SSL2_CK_RC2_128_CBC_EXPORT40_WITH_MD5,
- SSL_kRSA|SSL_aRSA|SSL_RC2|SSL_MD5|SSL_EXP|SSL_SSLV2,
+ SSL_kRSA|SSL_aRSA|SSL_RC2|SSL_MD5|SSL_EXP40|SSL_SSLV2,
SSL2_CF_5_BYTE_ENC,
SSL_ALL_CIPHERS,
},
&ssl3_undef_enc_method,
};
-static long ssl2_default_timeout()
+static long ssl2_default_timeout(void)
{
return(300);
}
-SSL_METHOD *sslv2_base_method()
+SSL_METHOD *sslv2_base_method(void)
{
return(&SSLv2_data);
}
-int ssl2_num_ciphers()
+int ssl2_num_ciphers(void)
{
return(SSL2_NUM_CIPHERS);
}
-SSL_CIPHER *ssl2_get_cipher(u)
-unsigned int u;
+SSL_CIPHER *ssl2_get_cipher(unsigned int u)
{
if (u < SSL2_NUM_CIPHERS)
return(&(ssl2_ciphers[SSL2_NUM_CIPHERS-1-u]));
return(NULL);
}
-int ssl2_pending(s)
-SSL *s;
+int ssl2_pending(SSL *s)
{
return(s->s2->ract_data_length);
}
-int ssl2_new(s)
-SSL *s;
+int ssl2_new(SSL *s)
{
SSL2_CTX *s2;
return(0);
}
-void ssl2_free(s)
-SSL *s;
+void ssl2_free(SSL *s)
{
SSL2_CTX *s2;
+ if(s == NULL)
+ return;
+
s2=s->s2;
if (s2->rbuf != NULL) Free(s2->rbuf);
if (s2->wbuf != NULL) Free(s2->wbuf);
s->s2=NULL;
}
-void ssl2_clear(s)
-SSL *s;
+void ssl2_clear(SSL *s)
{
SSL2_CTX *s2;
unsigned char *rbuf,*wbuf;
s->packet_length=0;
}
-long ssl2_ctrl(s,cmd,larg,parg)
-SSL *s;
-int cmd;
-long larg;
-char *parg;
+long ssl2_ctrl(SSL *s, int cmd, long larg, char *parg)
{
int ret=0;
return(ret);
}
-long ssl2_ctx_ctrl(ctx,cmd,larg,parg)
-SSL_CTX *ctx;
-int cmd;
-long larg;
-char *parg;
+long ssl2_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, char *parg)
{
return(0);
}
/* This function needs to check if the ciphers required are actually
* available */
-SSL_CIPHER *ssl2_get_cipher_by_char(p)
-unsigned char *p;
+SSL_CIPHER *ssl2_get_cipher_by_char(const unsigned char *p)
{
static int init=1;
static SSL_CIPHER *sorted[SSL2_NUM_CIPHERS];
if (init)
{
- init=0;
+ CRYPTO_w_lock(CRYPTO_LOCK_SSL);
for (i=0; i<SSL2_NUM_CIPHERS; i++)
sorted[i]= &(ssl2_ciphers[i]);
qsort( (char *)sorted,
SSL2_NUM_CIPHERS,sizeof(SSL_CIPHER *),
FP_ICC ssl_cipher_ptr_id_cmp);
+
+ CRYPTO_w_unlock(CRYPTO_LOCK_SSL);
+ init=0;
}
id=0x02000000L|((unsigned long)p[0]<<16L)|
return(*cpp);
}
-int ssl2_put_cipher_by_char(c,p)
-SSL_CIPHER *c;
-unsigned char *p;
+int ssl2_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p)
{
long l;
return(3);
}
-void ssl2_generate_key_material(s)
-SSL *s;
+void ssl2_generate_key_material(SSL *s)
{
unsigned int i;
MD5_CTX ctx;
unsigned char *km;
unsigned char c='0';
+#ifdef CHARSET_EBCDIC
+ c = os_toascii['0']; /* Must be an ASCII '0', not EBCDIC '0',
+ see SSLv2 docu */
+#endif
+
km=s->s2->key_material;
for (i=0; i<s->s2->key_material_length; i+=MD5_DIGEST_LENGTH)
{
}
}
-void ssl2_return_error(s,err)
-SSL *s;
-int err;
+void ssl2_return_error(SSL *s, int err)
{
if (!s->error)
{
}
-void ssl2_write_error(s)
-SSL *s;
+void ssl2_write_error(SSL *s)
{
- char buf[3];
+ unsigned char buf[3];
int i,error;
buf[0]=SSL2_MT_ERROR;
s->error=0; */
}
-int ssl2_shutdown(s)
-SSL *s;
+int ssl2_shutdown(SSL *s)
{
s->shutdown=(SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
return(1);
}
-
+#endif