add --enable-webServer for web server build w/o opensslExtra

This commit is contained in:
Todd A Ouska 2011-02-28 16:41:07 -08:00
parent ca9caaf606
commit e20a85dc2f
7 changed files with 150 additions and 133 deletions

View File

@ -1,6 +1,6 @@
AC_INIT
AC_CANONICAL_SYSTEM
AM_INIT_AUTOMAKE(cyassl,1.8.8) # !!! also change in ssl.h !!!
AM_INIT_AUTOMAKE(cyassl,1.8.9) # !!! also change in ssl.h !!!
AM_CONFIG_HEADER(ctaocrypt/include/config.h)
@ -305,6 +305,19 @@ then
fi
# Web Server Build
AC_ARG_ENABLE(webServer,
[ --enable-webServer Enable Web Server (default: disabled)],
[ ENABLED_WEBSERVER=$enableval ],
[ ENABLED_WEBSERVER=no ]
)
if test "$ENABLED_WEBSERVER" = "yes"
then
CFLAGS="$CFLAGS -DHAVE_WEBSERVER"
fi
# ECC
AC_ARG_ENABLE(ecc,
[ --enable-ecc Enable ECC (default: disabled)],

View File

@ -33,7 +33,7 @@
/* decode needed by CyaSSL */
int Base64Decode(const byte* in, word32 inLen, byte* out, word32* outLen);
#if defined(OPENSSL_EXTRA) || defined(SESSION_CERTS) || defined(CYASSL_KEY_GEN) || defined(CYASSL_CERT_GEN)
#if defined(OPENSSL_EXTRA) || defined(SESSION_CERTS) || defined(CYASSL_KEY_GEN) || defined(CYASSL_CERT_GEN) || defined(HAVE_WEBSERVER)
/* encode isn't */
int Base64Encode(const byte* in, word32 inLen, byte* out, word32* outLen);
int Base16Decode(const byte* in, word32 inLen, byte* out, word32* outLen);

View File

@ -79,7 +79,7 @@
#define STDC_HEADERS 1
/* Version number of package */
#define VERSION "1.8.8"
#define VERSION "1.8.9"
/* Define to 1 if your processor stores words with the most significant byte
first (like Motorola and SPARC, unlike Intel and VAX). */

View File

@ -109,7 +109,7 @@ int Base64Decode(const byte* in, word32 inLen, byte* out, word32* outLen)
}
#if defined(OPENSSL_EXTRA) || defined (SESSION_CERTS) || defined(CYASSL_KEY_GEN) || defined(CYASSL_CERT_GEN)
#if defined(OPENSSL_EXTRA) || defined (SESSION_CERTS) || defined(CYASSL_KEY_GEN) || defined(CYASSL_CERT_GEN) || defined(HAVE_WEBSERVER)
static
const byte base64Encode[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',

View File

@ -594,7 +594,7 @@ struct SSL_CTX {
psk_server_callback server_psk_cb; /* server callback */
char server_hint[MAX_PSK_ID_LEN];
#endif /* NO_PSK */
#ifdef OPENSSL_EXTRA
#if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER)
pem_password_cb passwd_cb;
void* userdata;
#endif /* OPENSSL_EXTRA */

View File

@ -39,7 +39,7 @@
#include "prefix_ssl.h"
#endif
#define CYASSL_VERSION "1.8.8"
#define CYASSL_VERSION "1.8.9"
#undef X509_NAME /* wincrypt.h clash */

258
src/ssl.c
View File

@ -25,9 +25,12 @@
#include "cyassl_error.h"
#include "coding.h"
#if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER)
#include "evp.h"
#endif
#ifdef OPENSSL_EXTRA
/* openssl headers begin */
#include "evp.h"
#include "hmac.h"
#include "crypto.h"
#include "des.h"
@ -405,7 +408,7 @@ static int AddCA(SSL_CTX* ctx, buffer der)
else
return SSL_BAD_FILE;
#ifdef OPENSSL_EXTRA
#if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER)
{
/* remove encrypted header if there */
char encHeader[] = "Proc-Type";
@ -447,7 +450,7 @@ static int AddCA(SSL_CTX* ctx, buffer der)
headerEnd = newline;
}
}
#endif /* OPENSSL_EXTRA */
#endif /* OPENSSL_EXTRA || HAVE_WEBSERVER */
/* find footer */
footerEnd = XSTRSTR((char*)buff, footer);
@ -511,7 +514,7 @@ static int AddCA(SSL_CTX* ctx, buffer der)
der.length = sz;
}
#ifdef OPENSSL_EXTRA
#if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER)
if (info.set) {
/* decrypt */
char password[80];
@ -560,7 +563,7 @@ static int AddCA(SSL_CTX* ctx, buffer der)
else
return SSL_BAD_FILE;
}
#endif /* OPENSSL_EXTRA */
#endif /* OPENSSL_EXTRA || HAVE_WEBSERVER */
if (type == CA_TYPE)
return AddCA(ctx, der); /* takes der over */
@ -2249,6 +2252,129 @@ int CyaSSL_set_compression(SSL* ssl)
#endif /* OPENSSL_EXTRA || GOAHEAD_WS */
#if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER)
void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX* ctx, void* userdata)
{
ctx->userdata = userdata;
}
void SSL_CTX_set_default_passwd_cb(SSL_CTX* ctx, pem_password_cb cb)
{
ctx->passwd_cb = cb;
}
int CRYPTO_num_locks(void)
{
return 0;
}
void CRYPTO_set_locking_callback(void (*f)(int, int, const char*, int))
{
}
void CRYPTO_set_id_callback(unsigned long (*f)(void))
{
}
unsigned long ERR_get_error(void)
{
/* TODO: */
return 0;
}
int EVP_BytesToKey(const EVP_CIPHER* type, const EVP_MD* md,
const byte* salt, const byte* data, int sz, int count,
byte* key, byte* iv)
{
int keyLen = 0;
int ivLen = 0;
Md5 myMD;
byte digest[MD5_DIGEST_SIZE];
int j;
int keyLeft;
int ivLeft;
int keyOutput = 0;
InitMd5(&myMD);
/* only support MD5 for now */
if (XSTRNCMP(md, "MD5", 3)) return 0;
/* only support CBC DES and AES for now */
if (XSTRNCMP(type, "DES-CBC", 7) == 0) {
keyLen = DES_KEY_SIZE;
ivLen = DES_IV_SIZE;
}
else if (XSTRNCMP(type, "DES-EDE3-CBC", 12) == 0) {
keyLen = DES3_KEY_SIZE;
ivLen = DES_IV_SIZE;
}
else if (XSTRNCMP(type, "AES-128-CBC", 11) == 0) {
keyLen = AES_128_KEY_SIZE;
ivLen = AES_IV_SIZE;
}
else if (XSTRNCMP(type, "AES-192-CBC", 11) == 0) {
keyLen = AES_192_KEY_SIZE;
ivLen = AES_IV_SIZE;
}
else if (XSTRNCMP(type, "AES-256-CBC", 11) == 0) {
keyLen = AES_256_KEY_SIZE;
ivLen = AES_IV_SIZE;
}
else
return 0;
keyLeft = keyLen;
ivLeft = ivLen;
while (keyOutput < (keyLen + ivLen)) {
int digestLeft = MD5_DIGEST_SIZE;
/* D_(i - 1) */
if (keyOutput) /* first time D_0 is empty */
Md5Update(&myMD, digest, MD5_DIGEST_SIZE);
/* data */
Md5Update(&myMD, data, sz);
/* salt */
if (salt)
Md5Update(&myMD, salt, EVP_SALT_SIZE);
Md5Final(&myMD, digest);
/* count */
for (j = 1; j < count; j++) {
Md5Update(&myMD, digest, MD5_DIGEST_SIZE);
Md5Final(&myMD, digest);
}
if (keyLeft) {
int store = min(keyLeft, MD5_DIGEST_SIZE);
XMEMCPY(&key[keyLen - keyLeft], digest, store);
keyOutput += store;
keyLeft -= store;
digestLeft -= store;
}
if (ivLeft && digestLeft) {
int store = min(ivLeft, digestLeft);
XMEMCPY(&iv[ivLen - ivLeft], &digest[MD5_DIGEST_SIZE -
digestLeft], store);
keyOutput += store;
ivLeft -= store;
}
}
if (keyOutput != (keyLen + ivLen))
return 0;
return keyOutput;
}
#endif /* OPENSSL_EXTRA || HAVE_WEBSERVER */
#ifdef OPENSSL_EXTRA
unsigned long SSLeay(void)
@ -2409,12 +2535,6 @@ int CyaSSL_set_compression(SSL* ssl)
return md;
}
unsigned long ERR_get_error(void)
{
/* TODO: */
return 0;
}
void ERR_clear_error(void)
{
/* TODO: */
@ -2848,24 +2968,6 @@ int CyaSSL_set_compression(SSL* ssl)
}
int CRYPTO_num_locks(void)
{
return 0;
}
void CRYPTO_set_id_callback(unsigned long (*f)(void))
{
}
void CRYPTO_set_locking_callback(void (*f)(int, int, const char*, int))
{
}
void CRYPTO_set_dynlock_create_callback(CRYPTO_dynlock_value* (*f)(
const char*, int))
{
@ -3067,18 +3169,6 @@ int CyaSSL_set_compression(SSL* ssl)
}
void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX* ctx, void* userdata)
{
ctx->userdata = userdata;
}
void SSL_CTX_set_default_passwd_cb(SSL_CTX* ctx, pem_password_cb cb)
{
ctx->passwd_cb = cb;
}
long SSL_CTX_set_timeout(SSL_CTX* ctx, long to)
{
return 0;
@ -3245,92 +3335,6 @@ int CyaSSL_set_compression(SSL* ssl)
}
int EVP_BytesToKey(const EVP_CIPHER* type, const EVP_MD* md,
const byte* salt, const byte* data, int sz, int count,
byte* key, byte* iv)
{
int keyLen = 0;
int ivLen = 0;
Md5 myMD;
byte digest[MD5_DIGEST_SIZE];
int j;
int keyLeft;
int ivLeft;
int keyOutput = 0;
InitMd5(&myMD);
/* only support MD5 for now */
if (XSTRNCMP(md, "MD5", 3)) return 0;
/* only support CBC DES and AES for now */
if (XSTRNCMP(type, "DES-CBC", 7) == 0) {
keyLen = DES_KEY_SIZE;
ivLen = DES_IV_SIZE;
}
else if (XSTRNCMP(type, "DES-EDE3-CBC", 12) == 0) {
keyLen = DES3_KEY_SIZE;
ivLen = DES_IV_SIZE;
}
else if (XSTRNCMP(type, "AES-128-CBC", 11) == 0) {
keyLen = AES_128_KEY_SIZE;
ivLen = AES_IV_SIZE;
}
else if (XSTRNCMP(type, "AES-192-CBC", 11) == 0) {
keyLen = AES_192_KEY_SIZE;
ivLen = AES_IV_SIZE;
}
else if (XSTRNCMP(type, "AES-256-CBC", 11) == 0) {
keyLen = AES_256_KEY_SIZE;
ivLen = AES_IV_SIZE;
}
else
return 0;
keyLeft = keyLen;
ivLeft = ivLen;
while (keyOutput < (keyLen + ivLen)) {
int digestLeft = MD5_DIGEST_SIZE;
/* D_(i - 1) */
if (keyOutput) /* first time D_0 is empty */
Md5Update(&myMD, digest, MD5_DIGEST_SIZE);
/* data */
Md5Update(&myMD, data, sz);
/* salt */
if (salt)
Md5Update(&myMD, salt, EVP_SALT_SIZE);
Md5Final(&myMD, digest);
/* count */
for (j = 1; j < count; j++) {
Md5Update(&myMD, digest, MD5_DIGEST_SIZE);
Md5Final(&myMD, digest);
}
if (keyLeft) {
int store = min(keyLeft, MD5_DIGEST_SIZE);
XMEMCPY(&key[keyLen - keyLeft], digest, store);
keyOutput += store;
keyLeft -= store;
digestLeft -= store;
}
if (ivLeft && digestLeft) {
int store = min(ivLeft, digestLeft);
XMEMCPY(&iv[ivLen - ivLeft], &digest[MD5_DIGEST_SIZE -
digestLeft], store);
keyOutput += store;
ivLeft -= store;
}
}
if (keyOutput != (keyLen + ivLen))
return 0;
return keyOutput;
}
/* stunnel 4.28 needs */
void* SSL_CTX_get_ex_data(const SSL_CTX* ctx, int d)
{