1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/ossrv/ssl/libssl/src/libssl_wsd.cpp Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,222 @@
1.4 +/*
1.5 +Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
1.6 +
1.7 +Redistribution and use in source and binary forms, with or without
1.8 +modification, are permitted provided that the following conditions are met:
1.9 +
1.10 +* Redistributions of source code must retain the above copyright notice, this
1.11 + list of conditions and the following disclaimer.
1.12 +* Redistributions in binary form must reproduce the above copyright notice,
1.13 + this list of conditions and the following disclaimer in the documentation
1.14 + and/or other materials provided with the distribution.
1.15 +* Neither the name of Nokia Corporation nor the names of its contributors
1.16 + may be used to endorse or promote products derived from this software
1.17 + without specific prior written permission.
1.18 +
1.19 +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
1.20 +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1.21 +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
1.22 +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
1.23 +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1.24 +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
1.25 +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
1.26 +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
1.27 +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
1.28 +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1.29 +
1.30 +Description:
1.31 +*/
1.32 +
1.33 +
1.34 +
1.35 +#include <openssl/bio.h>
1.36 +#include <openssl/err.h>
1.37 +#include <e32std.h>
1.38 +
1.39 +
1.40 +#include "libssl_wsd.h"
1.41 +/*
1.42 +#include "wsd_solution.h"
1.43 +*/
1.44 +
1.45 +#ifdef __WINSCW__
1.46 +#include <emulator.h> //GetProcAddress, GetModuleHandle
1.47 +#include "pls.h" // For emulator WSD API
1.48 +const TUid KLibdlUid3 = {0x10281F34}; // This is the UID of the library
1.49 +#endif//defined(__WINSCW__) || defined(__WINS__)
1.50 +
1.51 +#ifdef __cplusplus
1.52 +extern "C"
1.53 +{
1.54 +#endif
1.55 +
1.56 +#ifdef EMULATOR
1.57 +
1.58 +
1.59 +extern const SSL_METHOD temp_methods_sslp;
1.60 +extern const SSL_METHOD temp_DTLSv1_method_data;
1.61 +extern const SSL_METHOD temp_DTLSv1_client_method_data;
1.62 +extern const SSL_METHOD temp_dtlsv1_base_method_data;
1.63 +extern const SSL_METHOD temp_DTLSv1_server_method_data;
1.64 +extern const SSL_METHOD temp_SSLv23_client_method_data;
1.65 +extern const SSL_METHOD temp_sslv23_base_method_data;
1.66 +extern const SSL_METHOD temp_SSLv23_method_data;
1.67 +extern const SSL_METHOD temp_SSLv23_server_method_data;
1.68 +extern const SSL_METHOD temp_SSLv2_client_method_data;
1.69 +extern const SSL_METHOD temp_sslv2_base_method_data;
1.70 +extern const SSL_METHOD temp_SSLv2_method_data;
1.71 +extern const SSL_METHOD temp_SSLv2_server_method_data;
1.72 +extern const SSL_METHOD temp_SSLv3_client_method_data;
1.73 +extern const SSL_METHOD temp_sslv3_base_method_data;
1.74 +extern const SSL_METHOD temp_SSLv3_method_data;
1.75 +extern const SSL_METHOD temp_SSLv3_server_method_data;
1.76 +extern const SSL_METHOD temp_TLSv1_client_method_data;
1.77 +extern const SSL_METHOD temp_tlsv1_base_method_data;
1.78 +extern const SSL_METHOD temp_TLSv1_server_method_data;
1.79 +extern const SSL_METHOD temp_TLSv1_method_data;
1.80 +extern const ERR_STRING_DATA temp_SSL_str_functs[172];
1.81 +extern const ERR_STRING_DATA temp_SSL_str_reasons[238];
1.82 +extern const SSL_CIPHER temp_ssl3_ciphers[87];
1.83 +extern const SSL_CIPHER temp_ssl2_ciphers[10];
1.84 +extern const SSL3_ENC_METHOD temp_ssl3_undef_enc_method;
1.85 +extern const SSL3_ENC_METHOD temp_DTLSv1_enc_data;
1.86 +extern const SSL3_ENC_METHOD temp_SSLv3_enc_data;
1.87 +extern const SSL3_ENC_METHOD temp_TLSv1_enc_data;
1.88 +
1.89 +int LibSSLWSD_Init(_libssl_wsd *p);
1.90 +
1.91 +_libssl_wsd *Libssl_ImpurePtr()
1.92 + {
1.93 +/* // Access the PLS area of this process.
1.94 + struct _libssl_wsd *p = (struct _libssl_wsd*)Pls();
1.95 +
1.96 + if(p)
1.97 + return p;
1.98 +
1.99 + // To allocate storage for the global object within the
1.100 + // VAS of the emulator.
1.101 + p = (struct _libssl_wsd *)AllocatePls(sizeof(struct _libssl_wsd));
1.102 +
1.103 + if(!p)
1.104 + User::Panic(_L("LIBSSL-INIT"),KErrNoMemory);
1.105 +
1.106 + // Placement new to construct the WSD object at 'p'
1.107 + new (p) struct _libssl_wsd;
1.108 +
1.109 + // WSD object initialization
1.110 + Mem::FillZ(p,sizeof(struct _libssl_wsd));
1.111 + InitSSLWsdVar(p);
1.112 +
1.113 + // Set the Pls with the new value
1.114 + TInt err = SetPls(p);
1.115 +
1.116 + if(err != KErrNone)
1.117 + {
1.118 + User::Panic(_L("LIBSSL-INIT"),err);
1.119 + }
1.120 +*/
1.121 + _libssl_wsd *p = Pls<_libssl_wsd>(KLibdlUid3, LibSSLWSD_Init);
1.122 + return p;
1.123 + }
1.124 +
1.125 +int LibSSLWSD_Init(_libssl_wsd *p)
1.126 +{
1.127 + if(p)
1.128 + {
1.129 +
1.130 + memcpy(&(p->GET_WSD_VAR_NAME(methods_sslp,bio_ssl,s)),&temp_methods_sslp,sizeof(SSL_METHOD));
1.131 +
1.132 +
1.133 + memcpy(&(p->GET_WSD_VAR_NAME(ssl3_undef_enc_method,ssl_lib,g)),&temp_ssl3_undef_enc_method,sizeof(SSL3_ENC_METHOD));
1.134 +
1.135 + memcpy(&(p->GET_WSD_VAR_NAME(DTLSv1_enc_data,d1_lib,g)),&temp_DTLSv1_enc_data,sizeof(SSL3_ENC_METHOD));
1.136 +
1.137 + memcpy(&(p->GET_WSD_VAR_NAME(TLSv1_enc_data,t1_lib,g)),&temp_TLSv1_enc_data,sizeof(SSL3_ENC_METHOD));
1.138 +
1.139 + memcpy(&(p->GET_WSD_VAR_NAME(SSLv3_enc_data,s3_lib,g)),&temp_SSLv3_enc_data,sizeof(SSL3_ENC_METHOD));
1.140 +
1.141 +
1.142 + memcpy(&(p->GET_WSD_VAR_NAME(DTLSv1_method_data,d1_meth,s)),&temp_DTLSv1_method_data,sizeof(SSL_METHOD));
1.143 + (p->GET_WSD_VAR_NAME(DTLSv1_method_data,d1_meth,s)).ssl3_enc = &(p->GET_WSD_VAR_NAME(DTLSv1_enc_data,d1_lib,g));
1.144 +
1.145 + memcpy(&(p->GET_WSD_VAR_NAME(DTLSv1_client_method_data,d1_clnt,s)),&temp_DTLSv1_client_method_data,sizeof(SSL_METHOD));
1.146 + (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));
1.147 +
1.148 + memcpy(&(p->GET_WSD_VAR_NAME(dtlsv1_base_method_data,d1_lib,s)),&temp_dtlsv1_base_method_data,sizeof(SSL_METHOD));
1.149 + (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));
1.150 +
1.151 + memcpy(&(p->GET_WSD_VAR_NAME(DTLSv1_server_method_data,d1_srvr,s)),&temp_DTLSv1_server_method_data,sizeof(SSL_METHOD));
1.152 + (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));
1.153 +
1.154 + memcpy(&(p->GET_WSD_VAR_NAME(SSLv23_client_method_data,s23_clnt,s)),&temp_SSLv23_client_method_data,sizeof(SSL_METHOD));
1.155 + (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));
1.156 +
1.157 + memcpy(&(p->GET_WSD_VAR_NAME(sslv23_base_method_data,s23_lib,s)),&temp_sslv23_base_method_data,sizeof(SSL_METHOD));
1.158 + (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));
1.159 +
1.160 + memcpy(&(p->GET_WSD_VAR_NAME(SSLv23_method_data,s23_meth,s)),&temp_SSLv23_method_data,sizeof(SSL_METHOD));
1.161 + (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));
1.162 +
1.163 + memcpy(&(p->GET_WSD_VAR_NAME(SSLv23_server_method_data,s23_srvr,s)),&temp_SSLv23_server_method_data,sizeof(SSL_METHOD));
1.164 + (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));
1.165 +
1.166 + memcpy(&(p->GET_WSD_VAR_NAME(SSLv2_client_method_data,s2_clnt,s)),&temp_SSLv2_client_method_data,sizeof(SSL_METHOD));
1.167 + (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));
1.168 +
1.169 + memcpy(&(p->GET_WSD_VAR_NAME(sslv2_base_method_data,s2_lib,s)),&temp_sslv2_base_method_data,sizeof(SSL_METHOD));
1.170 + (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));
1.171 +
1.172 + memcpy(&(p->GET_WSD_VAR_NAME(SSLv2_method_data,s2_meth,s)),&temp_SSLv2_method_data,sizeof(SSL_METHOD));
1.173 + (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));
1.174 +
1.175 + memcpy(&(p->GET_WSD_VAR_NAME(SSLv2_server_method_data,s2_srvr,s)),&temp_SSLv2_server_method_data,sizeof(SSL_METHOD));
1.176 + (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));
1.177 +
1.178 + memcpy(&(p->GET_WSD_VAR_NAME(SSLv3_client_method_data,s3_clnt,s)),&temp_SSLv3_client_method_data,sizeof(SSL_METHOD));
1.179 + (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));
1.180 +
1.181 + memcpy(&(p->GET_WSD_VAR_NAME(sslv3_base_method_data,s3_lib,s)),&temp_sslv3_base_method_data,sizeof(SSL_METHOD));
1.182 + (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));
1.183 +
1.184 + memcpy(&(p->GET_WSD_VAR_NAME(SSLv3_method_data,s3_meth,s)),&temp_SSLv3_method_data,sizeof(SSL_METHOD));
1.185 + (p->GET_WSD_VAR_NAME(SSLv3_method_data,s3_meth,s)).ssl3_enc = &(p->GET_WSD_VAR_NAME(SSLv3_enc_data,s3_lib,g));
1.186 +
1.187 + memcpy(&(p->GET_WSD_VAR_NAME(SSLv3_server_method_data,s3_srvr,s)),&temp_SSLv3_server_method_data,sizeof(SSL_METHOD));
1.188 + (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));
1.189 +
1.190 + memcpy(&(p->GET_WSD_VAR_NAME(TLSv1_client_method_data,t1_clnt,s)),&temp_TLSv1_client_method_data,sizeof(SSL_METHOD));
1.191 + (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));
1.192 +
1.193 + memcpy(&(p->GET_WSD_VAR_NAME(tlsv1_base_method_data,t1_lib,s)),&temp_tlsv1_base_method_data,sizeof(SSL_METHOD));
1.194 + (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));
1.195 +
1.196 + memcpy(&(p->GET_WSD_VAR_NAME(TLSv1_server_method_data,t1_srvr,s)),&temp_TLSv1_server_method_data,sizeof(SSL_METHOD));
1.197 + (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));
1.198 +
1.199 + memcpy(&(p->GET_WSD_VAR_NAME(TLSv1_method_data,t1_meth,s)),&temp_TLSv1_method_data,sizeof(SSL_METHOD));
1.200 + (p->GET_WSD_VAR_NAME(TLSv1_method_data,t1_meth,s)).ssl3_enc = &(p->GET_WSD_VAR_NAME(TLSv1_enc_data,t1_lib,g));
1.201 +
1.202 + p->GET_WSD_VAR_NAME(ssl_x509_store_ctx_idx,ssl_cert,s) = -1;
1.203 +
1.204 + p->GET_WSD_VAR_NAME(ssl_comp_methods,ssl_ciph,s) = NULL;
1.205 +
1.206 +
1.207 + memcpy(&(p->GET_WSD_VAR_NAME(SSL_str_functs,ssl_err,s)),&temp_SSL_str_functs,sizeof(ERR_STRING_DATA) * SSL_STR_FUNCTS_NUM);
1.208 +
1.209 + memcpy(&(p->GET_WSD_VAR_NAME(SSL_str_reasons,ssl_err,s)),&temp_SSL_str_reasons,sizeof(ERR_STRING_DATA) * SSL_STR_REASONS_NUM);
1.210 +
1.211 + memcpy(&(p->GET_WSD_VAR_NAME(ssl3_ciphers,s3_lib,g)),&temp_ssl3_ciphers,sizeof(SSL_CIPHER) * SSL3_NUM_CIPHERS);
1.212 +
1.213 + memcpy(&(p->GET_WSD_VAR_NAME(ssl2_ciphers,s2_lib,g)),&temp_ssl2_ciphers,sizeof(SSL_CIPHER) * SSL2_NUM_CIPHERS);
1.214 +
1.215 +
1.216 +
1.217 + }
1.218 + return KErrNone;
1.219 +}
1.220 +#endif /*EMULATOR*/
1.221 +
1.222 +#ifdef __cplusplus
1.223 +}
1.224 +#endif
1.225 +