Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 206875
Collapse All | Expand All

(-)src-native-new/src/transport/tptpOpenSSL/tptpOpenSSL.make (+127 lines)
Added Link Here
1
2
################################################################################
3
#                                       
4
#  makefile:  tptpOpenSSL project          
5
#                                       
6
# $Id:$                                  
7
################################################################################
8
9
10
#-----------------------------------
11
#
12
#   Customizable section
13
#
14
#   - The TARGETREALNAME variable specifies the name of the library file
15
#     that will be generated, this includes a base (TARGETLIB) plus	a 
16
#     version number plus a minor number plus a release number
17
#   - The TARGETSONAME variable specifies a file name that has just the
18
#     library name plus the major version number
19
#   - The TARGETLIB variable specifies the base library name
20
#   - The TARGETSONAME and TARGETLIB are generated as symbolic links
21
#     when the library is built
22
#
23
#-----------------------------------
24
TARGET         :=  libtptpOpenSSL
25
TARGETDIR      :=  ../../../lib
26
27
if [ x$VERSIONNUM = x ]; then export VERSIONNUM=0; fi
28
if [ x$MINORNUM = x ]; then export MINORNUM=0; fi
29
if [ x$RELEASENUM = x ]; then export RELEASENUM=0; fi
30
31
TARGETLIB      :=  $(TARGET).so
32
TARGETSONAME   :=  $(TARGETLIB).$(VERSIONNUM)
33
TARGETREALNAME :=  $(TARGETSONAME).$(MINORNUM).$(RELEASENUM)
34
35
36
#-----------------------------------
37
#   list of additional INCLUDE directories to search headers from
38
#      (separated by blanks)
39
#-----------------------------------
40
INCLUDEDIRS    :=  . ../../../include
41
42
43
#-----------------------------------
44
#   list of additional libraries to be linked with
45
#      (separated by blanks)
46
#-----------------------------------
47
LIBS       :=  dl transportSupport 
48
49
#-----------------------------------
50
#   list of additional library directories to search from
51
#      (separated by blanks)
52
#-----------------------------------
53
LIBDIRS    :=  ../../../lib
54
55
56
#-----------------------------------
57
#
58
#   Compiler options
59
#
60
#      -g       produce debug info
61
#      -Wall    enable all types of warnings
62
#      -O3      highest level of code optimization
63
#      -fPIC    generate position-independent code (PIC).
64
#               This is required for building shared library.
65
#      -c       compile only
66
#
67
#   Linking options
68
#
69
#       -Wl       pass options to linker
70
#       -shared   produce shared library
71
#       -L        add the given directory to the search path for libraries
72
#
73
#-----------------------------------
74
75
CFLAGS     :=  $(C_FLAGS) $(DEBUGABLE) -Wall $(OPTIMIZABLE) -fPIC $(addprefix -I,$(INCLUDEDIRS))  -D_LINUX_X86
76
77
CXXFLAGS   :=  $(CFLAGS)
78
79
LINKOPTS   :=  $(L_FLAGS) $(DEBUGABLE) -shared -Wl,-soname,$(TARGETSONAME) -o $(TARGETDIR)/$(TARGETREALNAME) $(addprefix -L,$(LIBDIRS))
80
81
82
#-----------------------------------
83
#   general commands and options
84
#-----------------------------------
85
86
CC          :=  gcc
87
CXX         :=  $(CC)
88
89
SOURCE     :=  $(wildcard *.c)  $(wildcard *.cpp)
90
91
OBJS       :=  $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCE)))
92
93
REMOVEFILE :=  rm -f
94
CREATELINK :=  ln -sf
95
96
97
#-----------------------------------
98
#   "make" rules
99
#-----------------------------------
100
101
.PHONY : default everything objs clean veryclean rebuild $(TARGET)
102
103
104
default : $(TARGET)
105
106
107
objs : $(OBJS)
108
109
110
clean :
111
	$(REMOVEFILE) *.o
112
113
114
veryclean: clean
115
	$(REMOVEFILE) $(TARGETDIR)/$(TARGETLIB)
116
	$(REMOVEFILE) $(TARGETDIR)/$(TARGETSONAME)
117
	$(REMOVEFILE) $(TARGETDIR)/$(TARGETREALNAME)
118
119
120
rebuild: veryclean everything
121
122
123
$(TARGET) : $(OBJS)
124
	$(CC) $(LINKOPTS) $(OBJS) $(addprefix -l,$(LIBS))
125
	$(CREATELINK) $(TARGETREALNAME)  $(TARGETDIR)/$(TARGETSONAME)
126
	$(CREATELINK) $(TARGETSONAME)    $(TARGETDIR)/$(TARGETLIB)
127
(-)src-native-new/src/transport/tptpOpenSSL/openSSLLog.h (+42 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2007 Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Igor Alelekov, Intel - Initial implementation
10
 *
11
 * $Id$
12
 *
13
 *******************************************************************************/ 
14
15
#ifndef _OPENSSLLOG_H_
16
#define _OPENSSLLOG_H_
17
18
/*****************************************************************************************************
19
 *                                                                                                   *
20
 * To use the log macros in TPTPLog.h, the following must be defined:                                *
21
 *                                                                                                   *
22
 *    RESOLVE_LOG_EVENT_FUNC(p)      resolves to a logEvent function pointer                         *
23
 *    RESOLVE_INITIAL_PARAM(p)       if a parameter is needed before the subcomponent, this macro    *
24
 *                                     should give that parameter, including the separating comma    *
25
 *                                     if no such parameter is needed this macro should resolve to   *
26
 *                                   white space                                                     *
27
 *    TPTP_LOG_SUBCOMPONENT_NAME(p)  the name of the subcomponent to appear in the log file          *
28
 *    TPTP_LOG_INSTANCE_ID(p)        an instance ID for the log file                                 *
29
 *                                                                                                   *
30
 *****************************************************************************************************/
31
32
/* These definitions assume 'p' will point to a server_block_t as defined in SocketListener.h */
33
34
#define RESOLVE_LOG_EVENT_FUNC(p)     p->logEventEntry
35
#define RESOLVE_INITIAL_PARAM(p)      p->cmo, /* Note: this trailing comma is required */
36
#define TPTP_LOG_SUBCOMPONENT_NAME(p) "tptpOpenSSL"
37
#define TPTP_LOG_INSTANCE_ID(p)       0
38
39
/* Do not move this include, it requires the above definitions */
40
#include "tptp/TPTPLog.h"
41
42
#endif /* _OPENSSLLOG_H_ */
(-)src-native-new/src/transport/tptpOpenSSL/tptpOpenSSL.dsp (+125 lines)
Added Link Here
1
# Microsoft Developer Studio Project File - Name="tptpOpenSSL" - Package Owner=<4>
2
# Microsoft Developer Studio Generated Build File, Format Version 6.00
3
# ** DO NOT EDIT **
4
5
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
6
7
CFG=tptpOpenSSL - Win32 Debug
8
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
9
!MESSAGE use the Export Makefile command and run
10
!MESSAGE 
11
!MESSAGE NMAKE /f "tptpOpenSSL.mak".
12
!MESSAGE 
13
!MESSAGE You can specify a configuration when running NMAKE
14
!MESSAGE by defining the macro CFG on the command line. For example:
15
!MESSAGE 
16
!MESSAGE NMAKE /f "tptpOpenSSL.mak" CFG="tptpOpenSSL - Win32 Debug"
17
!MESSAGE 
18
!MESSAGE Possible choices for configuration are:
19
!MESSAGE 
20
!MESSAGE "tptpOpenSSL - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
21
!MESSAGE "tptpOpenSSL - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
22
!MESSAGE 
23
24
# Begin Project
25
# PROP AllowPerConfigDependencies 0
26
# PROP Scc_ProjName ""
27
# PROP Scc_LocalPath ""
28
CPP=cl.exe
29
MTL=midl.exe
30
RSC=rc.exe
31
32
!IF  "$(CFG)" == "tptpOpenSSL - Win32 Release"
33
34
# PROP BASE Use_MFC 0
35
# PROP BASE Use_Debug_Libraries 0
36
# PROP BASE Output_Dir "Release"
37
# PROP BASE Intermediate_Dir "Release"
38
# PROP BASE Target_Dir ""
39
# PROP Use_MFC 0
40
# PROP Use_Debug_Libraries 0
41
# PROP Output_Dir "../../../bin"
42
# PROP Intermediate_Dir "Release"
43
# PROP Ignore_Export_Lib 0
44
# PROP Target_Dir ""
45
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TPTPOPENSSL_EXPORTS" /YX /FD /c
46
# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TPTPOPENSSL_EXPORTS" /YX /FD /I $(OPENSSL_HOME)/include /c
47
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
48
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
49
# ADD BASE RSC /l 0x419 /d "NDEBUG"
50
# ADD RSC /l 0x419 /d "NDEBUG"
51
BSC32=bscmake.exe
52
# ADD BASE BSC32 /nologo
53
# ADD BSC32 /nologo
54
LINK32=link.exe
55
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
56
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib transportSupport.lib /nologo /dll /machine:I386 /libpath:"../../../lib"
57
# SUBTRACT LINK32 /pdb:none
58
59
!ELSEIF  "$(CFG)" == "tptpOpenSSL - Win32 Debug"
60
61
# PROP BASE Use_MFC 0
62
# PROP BASE Use_Debug_Libraries 1
63
# PROP BASE Output_Dir "Debug"
64
# PROP BASE Intermediate_Dir "Debug"
65
# PROP BASE Target_Dir ""
66
# PROP Use_MFC 0
67
# PROP Use_Debug_Libraries 1
68
# PROP Output_Dir "../../../bin"
69
# PROP Intermediate_Dir "Debug"
70
# PROP Ignore_Export_Lib 0
71
# PROP Target_Dir ""
72
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TPTPOPENSSL_EXPORTS" /YX /FD /GZ /c
73
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TPTPOPENSSL_EXPORTS" /YX /FD /GZ /I $(OPENSSL_HOME)/include /c
74
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
75
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
76
# ADD BASE RSC /l 0x419 /d "_DEBUG"
77
# ADD RSC /l 0x419 /d "_DEBUG"
78
BSC32=bscmake.exe
79
# ADD BASE BSC32 /nologo
80
# ADD BSC32 /nologo
81
LINK32=link.exe
82
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
83
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib transportSupport.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../lib"
84
# SUBTRACT LINK32 /pdb:none
85
86
!ENDIF 
87
88
# Begin Target
89
90
# Name "tptpOpenSSL - Win32 Release"
91
# Name "tptpOpenSSL - Win32 Debug"
92
# Begin Group "Source Files"
93
94
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
95
# Begin Source File
96
97
SOURCE=.\tptpOpenSSL.c
98
# End Source File
99
# Begin Source File
100
101
SOURCE=.\tptpOpenSSL.def
102
# End Source File
103
# End Group
104
# Begin Group "Header Files"
105
106
# PROP Default_Filter "h;hpp;hxx;hm;inl"
107
# Begin Source File
108
109
SOURCE=.\openSSLLog.h
110
# End Source File
111
# Begin Source File
112
113
SOURCE=.\openSSLTypes.h
114
# End Source File
115
# Begin Source File
116
117
SOURCE=.\tptpOpenSSL.h
118
# End Source File
119
# End Group
120
# Begin Group "Resource Files"
121
122
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
123
# End Group
124
# End Target
125
# End Project
(-)src-native-new/src/transport/tptpOpenSSL/tptpOpenSSL.c (+339 lines)
Added Link Here
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <string.h>
4
#include <errno.h>
5
6
#ifdef _WIN32
7
	#include <direct.h>
8
#else	
9
	#include <unistd.h>
10
#endif
11
12
#include "tptpOpenSSL.h"
13
#include "openSSLTypes.h"
14
#include "tptp/tptpSSLProvider.h"
15
#include "openSSLLog.h"
16
17
/* Resolved OpenSSL functions */
18
static sslv23_server_method_t sslv23_server_method; 
19
static ssl_CTX_new_t ssl_CTX_new;
20
static ssl_CTX_use_certificate_file_t ssl_CTX_use_certificate_file;
21
static ssl_CTX_use_PrivateKey_file_t ssl_CTX_use_PrivateKey_file;
22
static ssl_CTX_check_private_key_t ssl_CTX_check_private_key;
23
static ssl_new_t ssl_new;
24
static ssl_set_fd_t ssl_set_fd;
25
static ssl_accept_t ssl_accept;
26
static ssl_read_t ssl_read;
27
static ssl_write_t ssl_write;
28
static ssl_get_error_t ssl_get_error;
29
static ssl_free_t ssl_free;
30
static ssl_CTX_free_t ssl_CTX_free;
31
static ssl_shutdown_t ssl_shutdown;
32
33
static SOCKET serverSocket;
34
static char* certFile = NULL;
35
static char* keyFile = NULL;
36
37
static log_service_t *logService;
38
39
static int initKeys();
40
static int loadOpenSSLLibrary();
41
42
int sslInit(log_service_t *_logService, int port) {
43
	struct sockaddr_in  saddr;
44
	int rc;
45
46
	logService = _logService;
47
	
48
	if (loadOpenSSLLibrary() < 0) {
49
		TPTP_LOG_ERROR_MSG(logService, "Error: unable to load tptpSSLProvider's openssl library.") ;
50
		return -1;
51
	}	
52
	
53
	if (initKeys() < 0) {
54
		return -1;
55
	}
56
57
	/* create and initialize the server socket */
58
	serverSocket = getTheSocket(port, &saddr);
59
60
	if (serverSocket < 0) {
61
		TPTP_LOG_ERROR_MSG1(logService, "Error: unable to create the server socket at port %d.", port) ;
62
		return -1;
63
	}
64
	else {
65
		rc = bindAndListen(serverSocket, (struct sockaddr*)&saddr) ;
66
	}
67
	
68
	TPTP_LOG_DEBUG_MSG1(logService, "Socket server is running at port number of %d.", port) ;
69
70
	return rc;
71
}
72
73
void* sslAccept() {
74
	ssl_socket_t ssl_socket;
75
	SOCKET clientSocket;
76
	
77
    clientSocket = acceptSocketConnection(serverSocket); 
78
	if (isSocketValid(clientSocket) == 0) {
79
		TPTP_LOG_ERROR_MSG(logService, "Accept() receives invalid socket request.") ;
80
		return NULL;
81
	}
82
83
	setHandleInherited((HANDLE) clientSocket);
84
85
	/* set up the data block for each request */
86
	ssl_socket = (ssl_socket_t) malloc(sizeof(ssl_socket_data_t));
87
	ssl_socket->clientSocket = clientSocket;
88
	ssl_socket->secured = FALSE;
89
	
90
	return ssl_socket;
91
} 
92
93
int sslHandshake(void* _ssl_socket) {
94
	ssl_socket_t ssl_socket = (ssl_socket_t) _ssl_socket;	// to make compiler happy :)
95
  	SSL_METHOD *meth;
96
  	SSL_CTX* ctx;
97
  	SSL*     ssl;
98
  	int err;
99
100
  	meth = (*sslv23_server_method)();
101
102
  	ctx = (*ssl_CTX_new)(meth);
103
  	if (!ctx) {
104
		TPTP_LOG_DEBUG_MSG(logService, "SSL: context error");
105
    	return -1;
106
    }
107
108
  	if (certFile == NULL) {
109
		TPTP_LOG_DEBUG_MSG(logService, "SSL: no certificate file found");
110
    	return -1;
111
  	}
112
113
  	if ((*ssl_CTX_use_certificate_file)(ctx, certFile, SSL_FILETYPE_PEM) <= 0) {
114
		TPTP_LOG_DEBUG_MSG1(logService, "SSL: invalid certificate file %s", certFile);
115
    	return -1;
116
  	}
117
118
  	if (keyFile == NULL) {
119
		TPTP_LOG_DEBUG_MSG(logService, "SSL: no key file found");
120
    	return -1;
121
  	}
122
123
  	if ((*ssl_CTX_use_PrivateKey_file)(ctx, keyFile, SSL_FILETYPE_PEM) <= 0) {
124
		TPTP_LOG_DEBUG_MSG1(logService, "SSL: invalid key file %s", keyFile);
125
    	return -1;
126
  	}
127
128
  	if (!(*ssl_CTX_check_private_key)(ctx)) { 
129
		TPTP_LOG_DEBUG_MSG2(logService, "SSL: Private key %s does not match the certificate public key %s",
130
			keyFile, certFile);
131
    	return -1;
132
  	}
133
    
134
  	ssl = (*ssl_new)(ctx);
135
  	if (ssl < 0) {
136
		TPTP_LOG_DEBUG_MSG(logService, "SSL.new error");
137
  		return -1;
138
  	}
139
  	                          
140
  	(*ssl_set_fd)(ssl, ssl_socket->clientSocket);
141
  	err = (*ssl_accept)(ssl);
142
	if (err < 0) {
143
		TPTP_LOG_DEBUG_MSG1(logService, "SSL: ssl_accept error %d", (*ssl_get_error)(ssl, err));
144
		return -1;
145
	}  	
146
147
	ssl_socket->secured = TRUE;
148
	ssl_socket->sslCtx = ctx;
149
	ssl_socket->ssl = ssl;
150
	
151
	return 0;
152
}
153
154
int sslRead(void* _ssl_socket, char* buffer, int length) {
155
	ssl_socket_t ssl_socket = (ssl_socket_t) _ssl_socket;
156
	int rc, bytesRead;
157
158
	if (ssl_socket == NULL) return -1;
159
	
160
	if (ssl_socket->secured) {
161
		return (ssl_read == NULL) ? -1 : (*ssl_read)(ssl_socket->ssl, buffer, length);
162
	}
163
	else {
164
		rc = readFromSocket(ssl_socket->clientSocket, buffer, length, &bytesRead);
165
		return (rc < 0) ? -1 : bytesRead; 
166
	}
167
}
168
169
int sslWrite(void* _ssl_socket, char* buffer, int length) {
170
	ssl_socket_t ssl_socket = (ssl_socket_t) _ssl_socket;
171
	if (ssl_socket == NULL) return -1;
172
173
	if (ssl_socket->secured) {
174
		return (ssl_write == NULL) ? -1 : (*ssl_write)(ssl_socket->ssl, buffer, length);
175
	}
176
	else {
177
		return writeToSocket(ssl_socket->clientSocket, buffer, length);
178
	}
179
}
180
181
int sslClose(void* _ssl_socket) {
182
	ssl_socket_t ssl_socket = (ssl_socket_t) _ssl_socket;
183
	if (ssl_socket == NULL) return -1;
184
	
185
	if (ssl_socket->ssl != NULL) {
186
		(*ssl_shutdown)(ssl_socket->ssl);  
187
	}	
188
189
	closeSocket(ssl_socket->clientSocket);
190
	
191
	if (ssl_socket->ssl != NULL) {
192
		(*ssl_free)(ssl_socket->ssl);
193
		ssl_socket->ssl = NULL; 
194
	}
195
196
	if (ssl_socket->sslCtx != NULL) { 
197
		(*ssl_CTX_free)(ssl_socket->sslCtx);  
198
		ssl_socket->sslCtx = NULL; 
199
	}
200
201
	free(ssl_socket);
202
203
	return 0;
204
}
205
206
int sslReset() {
207
	closeSocket(serverSocket);
208
	return 0;
209
}
210
211
int loadOpenSSLLibrary() {
212
	DLL_REFERENCE opensslLibrary;
213
	ssl_load_error_strings_t ssl_load_error_strings = NULL;
214
	ssl_library_init_t ssl_library_init = NULL;
215
	int rc;
216
217
	opensslLibrary = LOAD_LIBRARY(SSL_LIBRARY_NAME);
218
	if (opensslLibrary == NULL) {
219
		TPTP_LOG_ERROR_MSG(logService, "Unable to find openssl library") ;
220
		return -1;
221
	}
222
	
223
    ssl_load_error_strings = (ssl_load_error_strings_t) RESOLVE_ENTRY_POINT(opensslLibrary, SSL_LOAD_ESTRINGS);
224
	ssl_library_init = (ssl_library_init_t) RESOLVE_ENTRY_POINT(opensslLibrary, SSL_LIBRARY_INIT); 
225
	sslv23_server_method = (sslv23_server_method_t) RESOLVE_ENTRY_POINT(opensslLibrary, SSLV23_SERVER_METHOD);
226
	ssl_CTX_new = (ssl_CTX_new_t) RESOLVE_ENTRY_POINT(opensslLibrary, SSL_CTX_NEW);
227
	ssl_CTX_use_certificate_file = (ssl_CTX_use_certificate_file_t) RESOLVE_ENTRY_POINT(opensslLibrary, SSL_CTX_CERT_FILE);
228
	ssl_CTX_use_PrivateKey_file = (ssl_CTX_use_PrivateKey_file_t) RESOLVE_ENTRY_POINT(opensslLibrary, SSL_CTX_KEY_FILE);
229
	ssl_CTX_check_private_key = (ssl_CTX_check_private_key_t) RESOLVE_ENTRY_POINT(opensslLibrary, SSL_CTX_CHECK_KEY);
230
	ssl_new = (ssl_new_t) RESOLVE_ENTRY_POINT(opensslLibrary, SSL_NEW);
231
	ssl_set_fd = (ssl_set_fd_t) RESOLVE_ENTRY_POINT(opensslLibrary, SSL_SET_FD);
232
	ssl_accept = (ssl_accept_t) RESOLVE_ENTRY_POINT(opensslLibrary, SSL_ACCEPT);
233
	ssl_read = (ssl_read_t) RESOLVE_ENTRY_POINT(opensslLibrary, SSL_READ);
234
	ssl_write = (ssl_write_t) RESOLVE_ENTRY_POINT(opensslLibrary, SSL_WRITE);
235
	ssl_get_error = (ssl_get_error_t) RESOLVE_ENTRY_POINT(opensslLibrary, SSL_GET_ERROR);
236
	ssl_free = (ssl_free_t) RESOLVE_ENTRY_POINT(opensslLibrary, SSL_FREE);
237
	ssl_CTX_free = (ssl_CTX_free_t) RESOLVE_ENTRY_POINT(opensslLibrary, SSL_CTX_FREE);
238
	ssl_shutdown = (ssl_shutdown_t) RESOLVE_ENTRY_POINT(opensslLibrary, SSL_SHUTDOWN);
239
240
    /* Check to make sure we found everything */ 
241
    if (ssl_load_error_strings &&
242
    	ssl_library_init &&
243
    	sslv23_server_method &&
244
    	ssl_CTX_new &&
245
    	ssl_CTX_use_certificate_file &&
246
    	ssl_CTX_use_PrivateKey_file &&
247
    	ssl_CTX_check_private_key &&
248
    	ssl_new &&
249
    	ssl_set_fd &&
250
    	ssl_accept &&
251
    	ssl_read &&
252
    	ssl_write &&
253
    	ssl_get_error &&
254
    	ssl_free &&
255
    	ssl_shutdown &&
256
    	ssl_CTX_free) {
257
258
		(*ssl_load_error_strings)();
259
		(*ssl_library_init)();
260
261
		rc = 0;		
262
    } 
263
	else {
264
		TPTP_LOG_ERROR_MSG(logService, "Unable to resolve openssl library");
265
		rc = -1;
266
	}
267
	
268
	return rc;
269
}
270
271
int checkFile (char* fileName) {
272
	FILE *fp;
273
	
274
	if (fileName == NULL) return -1;
275
	
276
	fp = fopen(fileName, "r");
277
	if (fp == NULL) {
278
		return -1;
279
	} 
280
	
281
	fclose(fp);
282
	
283
	return 0;
284
}
285
286
int initKeys() {
287
	if (certFile == NULL) {
288
		TPTP_LOG_ERROR_MSG(logService, "SSL: no certificate file provided");
289
		return -1;
290
	}
291
	
292
	if (checkFile(certFile) < 0) {
293
		TPTP_LOG_ERROR_MSG1(logService, "SSL: certificate file %s not found", certFile);
294
		return -1;
295
	}
296
297
	if (keyFile == NULL) {
298
		TPTP_LOG_ERROR_MSG(logService, "SSL: no key file provided");
299
		return -1;
300
	}
301
	
302
	if (checkFile(keyFile) < 0) {
303
		TPTP_LOG_ERROR_MSG1(logService, "SSL: key file %s not found\n", keyFile);
304
		return -1;
305
	}
306
		
307
	return 0;	
308
}
309
310
void sslSetValue(const char* name, const char* value) {
311
	if (!strcmp(CERTIFICATE_FILE_KEY,name)) {
312
		if (value == NULL)
313
			certFile = NULL;
314
		else {
315
			if (certFile != NULL) free(certFile);
316
			certFile = (char*) malloc(strlen(value)+1);
317
			strcpy(certFile, value);
318
		}
319
	}
320
	else if (!strcmp(KEYS_FILE_KEY,name)) {
321
		if (value == NULL)
322
			keyFile = NULL;
323
		else {
324
			if (keyFile != NULL) free(keyFile);
325
			keyFile = (char*) malloc(strlen(value)+1);
326
			strcpy(keyFile, value);
327
		}
328
	}
329
}
330
331
char* sslGetValue(const char* name) {
332
	if (!strcmp(CERTIFICATE_FILE_KEY,name))	return certFile;
333
	if (!strcmp(KEYS_FILE_KEY,name)) return keyFile;
334
	return NULL;
335
}
336
337
char* sslGetProviderName() {
338
	return VERSION_NUMBER;
339
}
(-)src-native-new/src/transport/tptpOpenSSL/tptpOpenSSL.h (+17 lines)
Added Link Here
1
#ifndef TPTP_OPENSSL_H
2
#define TPTP_OPENSSL_H
3
4
#include <openssl/ssl.h> 
5
#include "tptp/SocketTL.h"
6
#include "tptp/TransportSupport.h"
7
8
typedef struct {
9
	BOOL	 secured;
10
	SOCKET 	 clientSocket;
11
  	SSL_CTX* sslCtx;
12
  	SSL*     ssl;
13
} ssl_socket_data_t;
14
15
typedef ssl_socket_data_t* ssl_socket_t;
16
17
#endif
(-)src-native-new/src/transport/tptpOpenSSL/tptpOpenSSL.def (+13 lines)
Added Link Here
1
LIBRARY tptpOpenSSL
2
DESCRIPTION "OpenSSL ssl provider."
3
EXPORTS
4
	sslInit
5
	sslAccept
6
	sslHandshake
7
	sslRead
8
	sslWrite
9
	sslClose
10
	sslReset
11
	sslGetValue
12
	sslSetValue
13
	sslGetProviderName
(-)src-native-new/src/transport/tptpOpenSSL/openSSLTypes.h (+52 lines)
Added Link Here
1
#ifndef _OPENSSL_TYPES_H
2
#define _OPENSSL_TYPES_H
3
4
#include <openssl/ssl.h> 
5
6
#define VERSION_NUMBER	"tptpOpenSSL provider v.1.0"
7
#define CERTIFICATE_FILE_KEY "certificate.file"
8
#define KEYS_FILE_KEY		 "keys.file" 
9
10
#ifdef _WIN32
11
	#define SSL_LIBRARY_NAME "libssl32"
12
#else
13
	#define SSL_LIBRARY_NAME "libssl.so"
14
#endif
15
16
/* OpenSSL function names to be imported */
17
#define SSL_LOAD_ESTRINGS 	"SSL_load_error_strings"
18
#define SSL_LIBRARY_INIT 	"SSL_library_init"
19
#define SSLV23_SERVER_METHOD "SSLv23_server_method"
20
#define SSL_CTX_NEW "SSL_CTX_new"
21
#define SSL_CTX_CERT_FILE "SSL_CTX_use_certificate_file"
22
#define SSL_CTX_KEY_FILE "SSL_CTX_use_PrivateKey_file"
23
#define SSL_CTX_CHECK_KEY "SSL_CTX_check_private_key"
24
#define SSL_NEW "SSL_new"
25
#define SSL_SET_FD "SSL_set_fd"
26
#define SSL_ACCEPT "SSL_accept"
27
#define SSL_READ "SSL_read"
28
#define SSL_WRITE "SSL_write"
29
#define SSL_GET_ERROR "SSL_get_error"
30
#define SSL_FREE "SSL_free"
31
#define SSL_CTX_FREE "SSL_CTX_free"
32
#define SSL_SHUTDOWN "SSL_shutdown"
33
34
/* OpenSSL function types */
35
typedef void (*ssl_load_error_strings_t)(); 
36
typedef void (*ssl_library_init_t)();
37
typedef SSL_METHOD* (*sslv23_server_method_t)();
38
typedef SSL_CTX* (*ssl_CTX_new_t)();
39
typedef int (*ssl_CTX_use_certificate_file_t)();
40
typedef int (*ssl_CTX_use_PrivateKey_file_t)();
41
typedef int (*ssl_CTX_check_private_key_t)();
42
typedef SSL* (*ssl_new_t)();
43
typedef int (*ssl_set_fd_t)();
44
typedef int (*ssl_accept_t)();
45
typedef int (*ssl_read_t)();
46
typedef int (*ssl_write_t)();
47
typedef int (*ssl_get_error_t)();
48
typedef char* (*ssl_free_t)();
49
typedef char* (*ssl_CTX_free_t)();
50
typedef int (*ssl_shutdown_t)();
51
52
#endif

Return to bug 206875