Import from yaSSL

parent bb5c6d43
...@@ -89,6 +89,8 @@ void client_test(void* args) ...@@ -89,6 +89,8 @@ void client_test(void* args)
args.argv = argv; args.argv = argv;
client_test(&args); client_test(&args);
yaSSL_CleanUp();
return args.return_code; return args.return_code;
} }
......
...@@ -82,6 +82,7 @@ void echoclient_test(void* args) ...@@ -82,6 +82,7 @@ void echoclient_test(void* args)
args.argv = argv; args.argv = argv;
echoclient_test(&args); echoclient_test(&args);
yaSSL_CleanUp();
return args.return_code; return args.return_code;
} }
......
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
args.argv = argv; args.argv = argv;
echoserver_test(&args); echoserver_test(&args);
yaSSL_CleanUp();
return args.return_code; return args.return_code;
} }
......
...@@ -67,6 +67,8 @@ THREAD_RETURN YASSL_API server_test(void* args) ...@@ -67,6 +67,8 @@ THREAD_RETURN YASSL_API server_test(void* args)
args.argv = argv; args.argv = argv;
server_test(&args); server_test(&args);
yaSSL_CleanUp();
return args.return_code; return args.return_code;
} }
......
...@@ -32,6 +32,12 @@ ...@@ -32,6 +32,12 @@
#include "opensslv.h" /* for version number */ #include "opensslv.h" /* for version number */
#include "rsa.h" #include "rsa.h"
extern "C" void yaSSL_CleanUp(); /* call once at end of application use to
free static singleton memory holders,
not a leak per se, but helpful when
looking for them */
#if defined(__cplusplus) && !defined(YASSL_MYSQL_COMPATIBLE) #if defined(__cplusplus) && !defined(YASSL_MYSQL_COMPATIBLE)
namespace yaSSL { namespace yaSSL {
extern "C" { extern "C" {
......
...@@ -35,10 +35,6 @@ ...@@ -35,10 +35,6 @@
namespace yaSSL { namespace yaSSL {
// Delete static singleton memory holders
void CleanUp();
#ifdef YASSL_PURE_C #ifdef YASSL_PURE_C
// library allocation // library allocation
......
# quick and dirty build file for testing different MSDEVs REM quick and dirty build file for testing different MSDEVs
setlocal setlocal
set myFLAGS= /I../include /I../mySTL /I../taocrypt/include /W3 /c /ZI set myFLAGS= /I../include /I../mySTL /I../taocrypt/include /W3 /c /ZI
......
...@@ -53,6 +53,53 @@ namespace yaSSL { ...@@ -53,6 +53,53 @@ namespace yaSSL {
using mySTL::min; using mySTL::min;
int read_file(SSL_CTX* ctx, const char* file, int format, CertType type)
{
if (format != SSL_FILETYPE_ASN1 && format != SSL_FILETYPE_PEM)
return SSL_BAD_FILETYPE;
FILE* input = fopen(file, "rb");
if (!input)
return SSL_BAD_FILE;
if (type == CA) {
x509* ptr = PemToDer(file, Cert);
if (!ptr) {
fclose(input);
return SSL_BAD_FILE;
}
ctx->AddCA(ptr); // takes ownership
}
else {
x509*& x = (type == Cert) ? ctx->certificate_ : ctx->privateKey_;
if (format == SSL_FILETYPE_ASN1) {
fseek(input, 0, SEEK_END);
long sz = ftell(input);
rewind(input);
x = NEW_YS x509(sz); // takes ownership
size_t bytes = fread(x->use_buffer(), sz, 1, input);
if (bytes != 1) {
fclose(input);
return SSL_BAD_FILE;
}
}
else {
x = PemToDer(file, type);
if (!x) {
fclose(input);
return SSL_BAD_FILE;
}
}
}
fclose(input);
return SSL_SUCCESS;
}
extern "C" {
SSL_METHOD* SSLv3_method() SSL_METHOD* SSLv3_method()
{ {
return SSLv3_client_method(); return SSLv3_client_method();
...@@ -449,50 +496,6 @@ long SSL_CTX_set_tmp_dh(SSL_CTX* ctx, DH* dh) ...@@ -449,50 +496,6 @@ long SSL_CTX_set_tmp_dh(SSL_CTX* ctx, DH* dh)
} }
int read_file(SSL_CTX* ctx, const char* file, int format, CertType type)
{
if (format != SSL_FILETYPE_ASN1 && format != SSL_FILETYPE_PEM)
return SSL_BAD_FILETYPE;
FILE* input = fopen(file, "rb");
if (!input)
return SSL_BAD_FILE;
if (type == CA) {
x509* ptr = PemToDer(file, Cert);
if (!ptr) {
fclose(input);
return SSL_BAD_FILE;
}
ctx->AddCA(ptr); // takes ownership
}
else {
x509*& x = (type == Cert) ? ctx->certificate_ : ctx->privateKey_;
if (format == SSL_FILETYPE_ASN1) {
fseek(input, 0, SEEK_END);
long sz = ftell(input);
rewind(input);
x = NEW_YS x509(sz); // takes ownership
size_t bytes = fread(x->use_buffer(), sz, 1, input);
if (bytes != 1) {
fclose(input);
return SSL_BAD_FILE;
}
}
else {
x = PemToDer(file, type);
if (!x) {
fclose(input);
return SSL_BAD_FILE;
}
}
}
fclose(input);
return SSL_SUCCESS;
}
int SSL_CTX_use_certificate_file(SSL_CTX* ctx, const char* file, int format) int SSL_CTX_use_certificate_file(SSL_CTX* ctx, const char* file, int format)
{ {
return read_file(ctx, file, format, Cert); return read_file(ctx, file, format, Cert);
...@@ -1080,7 +1083,7 @@ int X509_NAME_get_index_by_NID(X509_NAME* name,int nid, int lastpos) ...@@ -1080,7 +1083,7 @@ int X509_NAME_get_index_by_NID(X509_NAME* name,int nid, int lastpos)
switch (nid) { switch (nid) {
case NID_commonName: case NID_commonName:
char* found = strstr(start, "/CN="); const char* found = strstr(start, "/CN=");
if (found) { if (found) {
found += 4; // advance to str found += 4; // advance to str
idx = found - start + lastpos + 1; idx = found - start + lastpos + 1;
...@@ -1401,4 +1404,5 @@ void MD5_Final(unsigned char* hash, MD5_CTX* md5) ...@@ -1401,4 +1404,5 @@ void MD5_Final(unsigned char* hash, MD5_CTX* md5)
// end stunnel needs // end stunnel needs
} // extern "C"
} // namespace } // namespace
...@@ -1975,7 +1975,9 @@ Connection::Connection(ProtocolVersion v, RandomPool& ran) ...@@ -1975,7 +1975,9 @@ Connection::Connection(ProtocolVersion v, RandomPool& ran)
: pre_master_secret_(0), sequence_number_(0), peer_sequence_number_(0), : pre_master_secret_(0), sequence_number_(0), peer_sequence_number_(0),
pre_secret_len_(0), send_server_key_(false), master_clean_(false), pre_secret_len_(0), send_server_key_(false), master_clean_(false),
TLS_(v.major_ >= 3 && v.minor_ >= 1), version_(v), random_(ran) TLS_(v.major_ >= 3 && v.minor_ >= 1), version_(v), random_(ran)
{} {
memset(sessionID_, 0, sizeof(sessionID_));
}
Connection::~Connection() Connection::~Connection()
......
...@@ -1415,7 +1415,7 @@ BulkCipher* CryptProvider::NewDesEde() ...@@ -1415,7 +1415,7 @@ BulkCipher* CryptProvider::NewDesEde()
} }
void CleanUp() extern "C" void yaSSL_CleanUp()
{ {
TaoCrypt::CleanUp(); TaoCrypt::CleanUp();
ysDelete(cryptProviderInstance); ysDelete(cryptProviderInstance);
......
# quick and dirty build file for testing different MSDEVs REM quick and dirty build file for testing different MSDEVs
setlocal setlocal
set myFLAGS= /I../include /I../../mySTL /c /W3 /G6 /O2 set myFLAGS= /I../include /I../../mySTL /c /W3 /G6 /O2
#set myFLAGS= /I../include /I../../mySTL /c /W3
cl %myFLAGS% benchmark.cpp cl %myFLAGS% benchmark.cpp
link.exe /out:benchmark.exe ../src/taocrypt.lib benchmark.obj link.exe /out:benchmark.exe ../src/taocrypt.lib benchmark.obj advapi32.lib
...@@ -2,7 +2,6 @@ REM quick and dirty build file for testing different MSDEVs ...@@ -2,7 +2,6 @@ REM quick and dirty build file for testing different MSDEVs
setlocal setlocal
set myFLAGS= /I../include /I../../mySTL /c /W3 /G6 /O2 set myFLAGS= /I../include /I../../mySTL /c /W3 /G6 /O2
#set myFLAGS= /I../include /I../../mySTL /c /W3 /O1
cl %myFLAGS% aes.cpp cl %myFLAGS% aes.cpp
cl %myFLAGS% aestables.cpp cl %myFLAGS% aestables.cpp
......
# quick and dirty build file for testing different MSDEVs REM quick and dirty build file for testing different MSDEVs
setlocal setlocal
set myFLAGS= /I../include /I../../mySTL /c /W3 /G6 /O2 set myFLAGS= /I../include /I../../mySTL /c /W3 /G6 /O2
......
# quick and dirty build file for testing different MSDEVs REM quick and dirty build file for testing different MSDEVs
setlocal setlocal
set myFLAGS= /I../include /I../taocrypt/include /I../mySTL /c /W3 /G6 /O2 /MT /D"WIN32" /D"NO_MAIN_DRIVER" set myFLAGS= /I../include /I../taocrypt/include /I../mySTL /c /W3 /G6 /O2 /MT /D"WIN32" /D"NO_MAIN_DRIVER"
......
...@@ -91,6 +91,7 @@ int main(int argc, char** argv) ...@@ -91,6 +91,7 @@ int main(int argc, char** argv)
assert(memcmp(input, output, sizeof(input)) == 0); assert(memcmp(input, output, sizeof(input)) == 0);
printf("\nAll tests passed!\n"); printf("\nAll tests passed!\n");
yaSSL_CleanUp();
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment