ssl/libssl/src/libssl_wsd.cpp
changeset 0 e4d67989cc36
equal deleted inserted replaced
-1:000000000000 0:e4d67989cc36
       
     1 /*
       
     2 Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
       
     3 
       
     4 Redistribution and use in source and binary forms, with or without 
       
     5 modification, are permitted provided that the following conditions are met:
       
     6 
       
     7 * Redistributions of source code must retain the above copyright notice, this 
       
     8   list of conditions and the following disclaimer.
       
     9 * Redistributions in binary form must reproduce the above copyright notice, 
       
    10   this list of conditions and the following disclaimer in the documentation 
       
    11   and/or other materials provided with the distribution.
       
    12 * Neither the name of Nokia Corporation nor the names of its contributors 
       
    13   may be used to endorse or promote products derived from this software 
       
    14   without specific prior written permission.
       
    15 
       
    16 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
       
    17 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
       
    18 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
       
    19 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 
       
    20 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
       
    21 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
       
    22 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
       
    23 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
       
    24 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
       
    25 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
       
    26 
       
    27 Description:
       
    28 */
       
    29 
       
    30 
       
    31 
       
    32 #include <openssl/bio.h>
       
    33 #include <openssl/err.h>
       
    34 #include <e32std.h>
       
    35 
       
    36 
       
    37 #include "libssl_wsd.h"
       
    38 /*
       
    39 #include "wsd_solution.h"
       
    40 */
       
    41 
       
    42 #ifdef __WINSCW__ 
       
    43 #include <emulator.h> //GetProcAddress, GetModuleHandle
       
    44 #include "pls.h" // For emulator WSD API 
       
    45 const TUid KLibdlUid3 = {0x10281F34}; // This is the UID of the library
       
    46 #endif//defined(__WINSCW__) || defined(__WINS__)
       
    47 
       
    48 #ifdef __cplusplus
       
    49 extern "C" 
       
    50 {
       
    51 #endif
       
    52 
       
    53 #ifdef EMULATOR
       
    54 
       
    55 
       
    56 extern const SSL_METHOD temp_methods_sslp;								
       
    57 extern const SSL_METHOD temp_DTLSv1_method_data;
       
    58 extern const SSL_METHOD temp_DTLSv1_client_method_data;
       
    59 extern const SSL_METHOD temp_dtlsv1_base_method_data;
       
    60 extern const SSL_METHOD temp_DTLSv1_server_method_data;
       
    61 extern const SSL_METHOD temp_SSLv23_client_method_data;
       
    62 extern const SSL_METHOD temp_sslv23_base_method_data;
       
    63 extern const SSL_METHOD temp_SSLv23_method_data;
       
    64 extern const SSL_METHOD temp_SSLv23_server_method_data;
       
    65 extern const SSL_METHOD temp_SSLv2_client_method_data;
       
    66 extern const SSL_METHOD temp_sslv2_base_method_data;
       
    67 extern const SSL_METHOD temp_SSLv2_method_data;
       
    68 extern const SSL_METHOD temp_SSLv2_server_method_data;
       
    69 extern const SSL_METHOD temp_SSLv3_client_method_data;
       
    70 extern const SSL_METHOD temp_sslv3_base_method_data;
       
    71 extern const SSL_METHOD temp_SSLv3_method_data;
       
    72 extern const SSL_METHOD temp_SSLv3_server_method_data;
       
    73 extern const SSL_METHOD temp_TLSv1_client_method_data;
       
    74 extern const SSL_METHOD temp_tlsv1_base_method_data;
       
    75 extern const SSL_METHOD temp_TLSv1_server_method_data;
       
    76 extern const SSL_METHOD temp_TLSv1_method_data;
       
    77 extern const ERR_STRING_DATA temp_SSL_str_functs[172];
       
    78 extern const ERR_STRING_DATA temp_SSL_str_reasons[238];
       
    79 extern const SSL_CIPHER temp_ssl3_ciphers[87];
       
    80 extern const SSL_CIPHER temp_ssl2_ciphers[10];
       
    81 extern const SSL3_ENC_METHOD temp_ssl3_undef_enc_method;
       
    82 extern const SSL3_ENC_METHOD temp_DTLSv1_enc_data;
       
    83 extern const SSL3_ENC_METHOD temp_SSLv3_enc_data;
       
    84 extern const SSL3_ENC_METHOD temp_TLSv1_enc_data;
       
    85 
       
    86 int LibSSLWSD_Init(_libssl_wsd *p);
       
    87 
       
    88 _libssl_wsd *Libssl_ImpurePtr()
       
    89  	{	
       
    90 /* 		// Access the PLS area of this process.
       
    91 		struct _libssl_wsd *p = (struct _libssl_wsd*)Pls();
       
    92 
       
    93 		if(p)
       
    94 			return p;
       
    95 
       
    96 		// To allocate storage for the global object within the
       
    97 		// VAS of the emulator.
       
    98 		p = (struct _libssl_wsd *)AllocatePls(sizeof(struct _libssl_wsd));
       
    99 		
       
   100 		if(!p)
       
   101 			User::Panic(_L("LIBSSL-INIT"),KErrNoMemory);	
       
   102 		
       
   103 		// Placement new to construct the WSD object at 'p'
       
   104 		new (p) struct _libssl_wsd;
       
   105 		
       
   106 		// WSD object initialization
       
   107 		Mem::FillZ(p,sizeof(struct _libssl_wsd));
       
   108 		InitSSLWsdVar(p);
       
   109 		
       
   110 		// Set the Pls with the new value
       
   111 		TInt err = SetPls(p);
       
   112 		
       
   113 		if(err != KErrNone)
       
   114 		{
       
   115 			User::Panic(_L("LIBSSL-INIT"),err);
       
   116 		}
       
   117 */
       
   118 		_libssl_wsd *p = Pls<_libssl_wsd>(KLibdlUid3, LibSSLWSD_Init);
       
   119 		return p;
       
   120  	}
       
   121  	
       
   122 int LibSSLWSD_Init(_libssl_wsd *p)
       
   123 {
       
   124 	if(p)
       
   125 		{
       
   126 			
       
   127 			memcpy(&(p->GET_WSD_VAR_NAME(methods_sslp,bio_ssl,s)),&temp_methods_sslp,sizeof(SSL_METHOD));
       
   128 			
       
   129 			
       
   130 			memcpy(&(p->GET_WSD_VAR_NAME(ssl3_undef_enc_method,ssl_lib,g)),&temp_ssl3_undef_enc_method,sizeof(SSL3_ENC_METHOD));
       
   131 			
       
   132 			memcpy(&(p->GET_WSD_VAR_NAME(DTLSv1_enc_data,d1_lib,g)),&temp_DTLSv1_enc_data,sizeof(SSL3_ENC_METHOD));
       
   133 			
       
   134 			memcpy(&(p->GET_WSD_VAR_NAME(TLSv1_enc_data,t1_lib,g)),&temp_TLSv1_enc_data,sizeof(SSL3_ENC_METHOD));
       
   135 			
       
   136 			memcpy(&(p->GET_WSD_VAR_NAME(SSLv3_enc_data,s3_lib,g)),&temp_SSLv3_enc_data,sizeof(SSL3_ENC_METHOD));
       
   137 			
       
   138 			
       
   139 			memcpy(&(p->GET_WSD_VAR_NAME(DTLSv1_method_data,d1_meth,s)),&temp_DTLSv1_method_data,sizeof(SSL_METHOD));			
       
   140 			(p->GET_WSD_VAR_NAME(DTLSv1_method_data,d1_meth,s)).ssl3_enc = &(p->GET_WSD_VAR_NAME(DTLSv1_enc_data,d1_lib,g));
       
   141 			
       
   142 			memcpy(&(p->GET_WSD_VAR_NAME(DTLSv1_client_method_data,d1_clnt,s)),&temp_DTLSv1_client_method_data,sizeof(SSL_METHOD));
       
   143 			(p->GET_WSD_VAR_NAME(DTLSv1_client_method_data,d1_clnt,s)).ssl3_enc = &(p->GET_WSD_VAR_NAME(DTLSv1_enc_data,d1_lib,g));
       
   144 			
       
   145 			memcpy(&(p->GET_WSD_VAR_NAME(dtlsv1_base_method_data,d1_lib,s)),&temp_dtlsv1_base_method_data,sizeof(SSL_METHOD));
       
   146 			(p->GET_WSD_VAR_NAME(dtlsv1_base_method_data,d1_lib,s)).ssl3_enc = &(p->GET_WSD_VAR_NAME(DTLSv1_enc_data,d1_lib,g));
       
   147 			
       
   148 			memcpy(&(p->GET_WSD_VAR_NAME(DTLSv1_server_method_data,d1_srvr,s)),&temp_DTLSv1_server_method_data,sizeof(SSL_METHOD));
       
   149 			(p->GET_WSD_VAR_NAME(DTLSv1_server_method_data,d1_srvr,s)).ssl3_enc = &(p->GET_WSD_VAR_NAME(DTLSv1_enc_data,d1_lib,g));
       
   150 			
       
   151 			memcpy(&(p->GET_WSD_VAR_NAME(SSLv23_client_method_data,s23_clnt,s)),&temp_SSLv23_client_method_data,sizeof(SSL_METHOD));
       
   152 			(p->GET_WSD_VAR_NAME(SSLv23_client_method_data,s23_clnt,s)).ssl3_enc = &(p->GET_WSD_VAR_NAME(ssl3_undef_enc_method,ssl_lib,g));			
       
   153 			
       
   154 			memcpy(&(p->GET_WSD_VAR_NAME(sslv23_base_method_data,s23_lib,s)),&temp_sslv23_base_method_data,sizeof(SSL_METHOD));
       
   155 			(p->GET_WSD_VAR_NAME(sslv23_base_method_data,s23_lib,s)).ssl3_enc = &(p->GET_WSD_VAR_NAME(ssl3_undef_enc_method,ssl_lib,g));
       
   156 			
       
   157 			memcpy(&(p->GET_WSD_VAR_NAME(SSLv23_method_data,s23_meth,s)),&temp_SSLv23_method_data,sizeof(SSL_METHOD));
       
   158 			(p->GET_WSD_VAR_NAME(SSLv23_method_data,s23_meth,s)).ssl3_enc = &(p->GET_WSD_VAR_NAME(ssl3_undef_enc_method,ssl_lib,g));
       
   159 						
       
   160 			memcpy(&(p->GET_WSD_VAR_NAME(SSLv23_server_method_data,s23_srvr,s)),&temp_SSLv23_server_method_data,sizeof(SSL_METHOD));
       
   161 			(p->GET_WSD_VAR_NAME(SSLv23_server_method_data,s23_srvr,s)).ssl3_enc = &(p->GET_WSD_VAR_NAME(ssl3_undef_enc_method,ssl_lib,g));
       
   162 			
       
   163 			memcpy(&(p->GET_WSD_VAR_NAME(SSLv2_client_method_data,s2_clnt,s)),&temp_SSLv2_client_method_data,sizeof(SSL_METHOD));
       
   164 			(p->GET_WSD_VAR_NAME(SSLv2_client_method_data,s2_clnt,s)).ssl3_enc = &(p->GET_WSD_VAR_NAME(ssl3_undef_enc_method,ssl_lib,g));
       
   165 			
       
   166 			memcpy(&(p->GET_WSD_VAR_NAME(sslv2_base_method_data,s2_lib,s)),&temp_sslv2_base_method_data,sizeof(SSL_METHOD));
       
   167 			(p->GET_WSD_VAR_NAME(sslv2_base_method_data,s2_lib,s)).ssl3_enc = &(p->GET_WSD_VAR_NAME(ssl3_undef_enc_method,ssl_lib,g));
       
   168 			
       
   169 			memcpy(&(p->GET_WSD_VAR_NAME(SSLv2_method_data,s2_meth,s)),&temp_SSLv2_method_data,sizeof(SSL_METHOD));
       
   170 			(p->GET_WSD_VAR_NAME(SSLv2_method_data,s2_meth,s)).ssl3_enc = &(p->GET_WSD_VAR_NAME(ssl3_undef_enc_method,ssl_lib,g));
       
   171 				
       
   172 			memcpy(&(p->GET_WSD_VAR_NAME(SSLv2_server_method_data,s2_srvr,s)),&temp_SSLv2_server_method_data,sizeof(SSL_METHOD));
       
   173 			(p->GET_WSD_VAR_NAME(SSLv2_server_method_data,s2_srvr,s)).ssl3_enc = &(p->GET_WSD_VAR_NAME(ssl3_undef_enc_method,ssl_lib,g));
       
   174 			
       
   175 			memcpy(&(p->GET_WSD_VAR_NAME(SSLv3_client_method_data,s3_clnt,s)),&temp_SSLv3_client_method_data,sizeof(SSL_METHOD));
       
   176 			(p->GET_WSD_VAR_NAME(SSLv3_client_method_data,s3_clnt,s)).ssl3_enc = &(p->GET_WSD_VAR_NAME(SSLv3_enc_data,s3_lib,g));
       
   177 			
       
   178 			memcpy(&(p->GET_WSD_VAR_NAME(sslv3_base_method_data,s3_lib,s)),&temp_sslv3_base_method_data,sizeof(SSL_METHOD));
       
   179 			(p->GET_WSD_VAR_NAME(sslv3_base_method_data,s3_lib,s)).ssl3_enc = &(p->GET_WSD_VAR_NAME(SSLv3_enc_data,s3_lib,g));
       
   180 									
       
   181 			memcpy(&(p->GET_WSD_VAR_NAME(SSLv3_method_data,s3_meth,s)),&temp_SSLv3_method_data,sizeof(SSL_METHOD));
       
   182 			(p->GET_WSD_VAR_NAME(SSLv3_method_data,s3_meth,s)).ssl3_enc = &(p->GET_WSD_VAR_NAME(SSLv3_enc_data,s3_lib,g));
       
   183 			
       
   184 			memcpy(&(p->GET_WSD_VAR_NAME(SSLv3_server_method_data,s3_srvr,s)),&temp_SSLv3_server_method_data,sizeof(SSL_METHOD));
       
   185 			(p->GET_WSD_VAR_NAME(SSLv3_server_method_data,s3_srvr,s)).ssl3_enc = &(p->GET_WSD_VAR_NAME(SSLv3_enc_data,s3_lib,g));
       
   186 			
       
   187 			memcpy(&(p->GET_WSD_VAR_NAME(TLSv1_client_method_data,t1_clnt,s)),&temp_TLSv1_client_method_data,sizeof(SSL_METHOD));
       
   188 			(p->GET_WSD_VAR_NAME(TLSv1_client_method_data,t1_clnt,s)).ssl3_enc = &(p->GET_WSD_VAR_NAME(TLSv1_enc_data,t1_lib,g));
       
   189 			
       
   190 			memcpy(&(p->GET_WSD_VAR_NAME(tlsv1_base_method_data,t1_lib,s)),&temp_tlsv1_base_method_data,sizeof(SSL_METHOD));
       
   191 			(p->GET_WSD_VAR_NAME(tlsv1_base_method_data,t1_lib,s)).ssl3_enc = &(p->GET_WSD_VAR_NAME(TLSv1_enc_data,t1_lib,g));	
       
   192 			
       
   193 			memcpy(&(p->GET_WSD_VAR_NAME(TLSv1_server_method_data,t1_srvr,s)),&temp_TLSv1_server_method_data,sizeof(SSL_METHOD));
       
   194 			(p->GET_WSD_VAR_NAME(TLSv1_server_method_data,t1_srvr,s)).ssl3_enc = &(p->GET_WSD_VAR_NAME(TLSv1_enc_data,t1_lib,g));	
       
   195 			
       
   196 			memcpy(&(p->GET_WSD_VAR_NAME(TLSv1_method_data,t1_meth,s)),&temp_TLSv1_method_data,sizeof(SSL_METHOD));
       
   197 			(p->GET_WSD_VAR_NAME(TLSv1_method_data,t1_meth,s)).ssl3_enc = &(p->GET_WSD_VAR_NAME(TLSv1_enc_data,t1_lib,g));	
       
   198 			
       
   199 			p->GET_WSD_VAR_NAME(ssl_x509_store_ctx_idx,ssl_cert,s) = -1;
       
   200 			
       
   201 			p->GET_WSD_VAR_NAME(ssl_comp_methods,ssl_ciph,s) = NULL;	
       
   202 			
       
   203 			
       
   204 			memcpy(&(p->GET_WSD_VAR_NAME(SSL_str_functs,ssl_err,s)),&temp_SSL_str_functs,sizeof(ERR_STRING_DATA) * SSL_STR_FUNCTS_NUM);
       
   205 			
       
   206 			memcpy(&(p->GET_WSD_VAR_NAME(SSL_str_reasons,ssl_err,s)),&temp_SSL_str_reasons,sizeof(ERR_STRING_DATA) * SSL_STR_REASONS_NUM);
       
   207 			
       
   208 			memcpy(&(p->GET_WSD_VAR_NAME(ssl3_ciphers,s3_lib,g)),&temp_ssl3_ciphers,sizeof(SSL_CIPHER) * SSL3_NUM_CIPHERS);
       
   209 			
       
   210 			memcpy(&(p->GET_WSD_VAR_NAME(ssl2_ciphers,s2_lib,g)),&temp_ssl2_ciphers,sizeof(SSL_CIPHER) * SSL2_NUM_CIPHERS);
       
   211 
       
   212 		
       
   213 																	
       
   214 		}
       
   215 		return KErrNone;
       
   216 }
       
   217 #endif  /*EMULATOR*/
       
   218 
       
   219 #ifdef __cplusplus
       
   220 }
       
   221 #endif
       
   222