forked from wolfSSL/wolfssl
add --enable-webServer for web server build w/o opensslExtra
This commit is contained in:
15
configure.in
15
configure.in
@@ -1,6 +1,6 @@
|
|||||||
AC_INIT
|
AC_INIT
|
||||||
AC_CANONICAL_SYSTEM
|
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)
|
AM_CONFIG_HEADER(ctaocrypt/include/config.h)
|
||||||
|
|
||||||
|
|
||||||
@@ -305,6 +305,19 @@ then
|
|||||||
fi
|
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
|
# ECC
|
||||||
AC_ARG_ENABLE(ecc,
|
AC_ARG_ENABLE(ecc,
|
||||||
[ --enable-ecc Enable ECC (default: disabled)],
|
[ --enable-ecc Enable ECC (default: disabled)],
|
||||||
|
@@ -33,7 +33,7 @@
|
|||||||
/* decode needed by CyaSSL */
|
/* decode needed by CyaSSL */
|
||||||
int Base64Decode(const byte* in, word32 inLen, byte* out, word32* outLen);
|
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 */
|
/* encode isn't */
|
||||||
int Base64Encode(const byte* in, word32 inLen, byte* out, word32* outLen);
|
int Base64Encode(const byte* in, word32 inLen, byte* out, word32* outLen);
|
||||||
int Base16Decode(const byte* in, word32 inLen, byte* out, word32* outLen);
|
int Base16Decode(const byte* in, word32 inLen, byte* out, word32* outLen);
|
||||||
|
@@ -79,7 +79,7 @@
|
|||||||
#define STDC_HEADERS 1
|
#define STDC_HEADERS 1
|
||||||
|
|
||||||
/* Version number of package */
|
/* 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
|
/* Define to 1 if your processor stores words with the most significant byte
|
||||||
first (like Motorola and SPARC, unlike Intel and VAX). */
|
first (like Motorola and SPARC, unlike Intel and VAX). */
|
||||||
|
@@ -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
|
static
|
||||||
const byte base64Encode[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
|
const byte base64Encode[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
|
||||||
|
@@ -594,7 +594,7 @@ struct SSL_CTX {
|
|||||||
psk_server_callback server_psk_cb; /* server callback */
|
psk_server_callback server_psk_cb; /* server callback */
|
||||||
char server_hint[MAX_PSK_ID_LEN];
|
char server_hint[MAX_PSK_ID_LEN];
|
||||||
#endif /* NO_PSK */
|
#endif /* NO_PSK */
|
||||||
#ifdef OPENSSL_EXTRA
|
#if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER)
|
||||||
pem_password_cb passwd_cb;
|
pem_password_cb passwd_cb;
|
||||||
void* userdata;
|
void* userdata;
|
||||||
#endif /* OPENSSL_EXTRA */
|
#endif /* OPENSSL_EXTRA */
|
||||||
|
@@ -39,7 +39,7 @@
|
|||||||
#include "prefix_ssl.h"
|
#include "prefix_ssl.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CYASSL_VERSION "1.8.8"
|
#define CYASSL_VERSION "1.8.9"
|
||||||
|
|
||||||
#undef X509_NAME /* wincrypt.h clash */
|
#undef X509_NAME /* wincrypt.h clash */
|
||||||
|
|
||||||
|
258
src/ssl.c
258
src/ssl.c
@@ -25,9 +25,12 @@
|
|||||||
#include "cyassl_error.h"
|
#include "cyassl_error.h"
|
||||||
#include "coding.h"
|
#include "coding.h"
|
||||||
|
|
||||||
|
#if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER)
|
||||||
|
#include "evp.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef OPENSSL_EXTRA
|
#ifdef OPENSSL_EXTRA
|
||||||
/* openssl headers begin */
|
/* openssl headers begin */
|
||||||
#include "evp.h"
|
|
||||||
#include "hmac.h"
|
#include "hmac.h"
|
||||||
#include "crypto.h"
|
#include "crypto.h"
|
||||||
#include "des.h"
|
#include "des.h"
|
||||||
@@ -405,7 +408,7 @@ static int AddCA(SSL_CTX* ctx, buffer der)
|
|||||||
else
|
else
|
||||||
return SSL_BAD_FILE;
|
return SSL_BAD_FILE;
|
||||||
|
|
||||||
#ifdef OPENSSL_EXTRA
|
#if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER)
|
||||||
{
|
{
|
||||||
/* remove encrypted header if there */
|
/* remove encrypted header if there */
|
||||||
char encHeader[] = "Proc-Type";
|
char encHeader[] = "Proc-Type";
|
||||||
@@ -447,7 +450,7 @@ static int AddCA(SSL_CTX* ctx, buffer der)
|
|||||||
headerEnd = newline;
|
headerEnd = newline;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* OPENSSL_EXTRA */
|
#endif /* OPENSSL_EXTRA || HAVE_WEBSERVER */
|
||||||
|
|
||||||
/* find footer */
|
/* find footer */
|
||||||
footerEnd = XSTRSTR((char*)buff, footer);
|
footerEnd = XSTRSTR((char*)buff, footer);
|
||||||
@@ -511,7 +514,7 @@ static int AddCA(SSL_CTX* ctx, buffer der)
|
|||||||
der.length = sz;
|
der.length = sz;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef OPENSSL_EXTRA
|
#if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER)
|
||||||
if (info.set) {
|
if (info.set) {
|
||||||
/* decrypt */
|
/* decrypt */
|
||||||
char password[80];
|
char password[80];
|
||||||
@@ -560,7 +563,7 @@ static int AddCA(SSL_CTX* ctx, buffer der)
|
|||||||
else
|
else
|
||||||
return SSL_BAD_FILE;
|
return SSL_BAD_FILE;
|
||||||
}
|
}
|
||||||
#endif /* OPENSSL_EXTRA */
|
#endif /* OPENSSL_EXTRA || HAVE_WEBSERVER */
|
||||||
|
|
||||||
if (type == CA_TYPE)
|
if (type == CA_TYPE)
|
||||||
return AddCA(ctx, der); /* takes der over */
|
return AddCA(ctx, der); /* takes der over */
|
||||||
@@ -2249,6 +2252,129 @@ int CyaSSL_set_compression(SSL* ssl)
|
|||||||
#endif /* OPENSSL_EXTRA || GOAHEAD_WS */
|
#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
|
#ifdef OPENSSL_EXTRA
|
||||||
|
|
||||||
unsigned long SSLeay(void)
|
unsigned long SSLeay(void)
|
||||||
@@ -2409,12 +2535,6 @@ int CyaSSL_set_compression(SSL* ssl)
|
|||||||
return md;
|
return md;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long ERR_get_error(void)
|
|
||||||
{
|
|
||||||
/* TODO: */
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ERR_clear_error(void)
|
void ERR_clear_error(void)
|
||||||
{
|
{
|
||||||
/* TODO: */
|
/* 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)(
|
void CRYPTO_set_dynlock_create_callback(CRYPTO_dynlock_value* (*f)(
|
||||||
const char*, int))
|
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)
|
long SSL_CTX_set_timeout(SSL_CTX* ctx, long to)
|
||||||
{
|
{
|
||||||
return 0;
|
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 */
|
/* stunnel 4.28 needs */
|
||||||
void* SSL_CTX_get_ex_data(const SSL_CTX* ctx, int d)
|
void* SSL_CTX_get_ex_data(const SSL_CTX* ctx, int d)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user