os/ossrv/ssl/libssl/src/libssl_wsd.cpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
     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