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