diff -r 8873e6835f7b -r dd83586b62d6 crypto/weakcrypto/source/cryptoswitch/cryptoswitch.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/crypto/weakcrypto/source/cryptoswitch/cryptoswitch.cpp Fri Jun 11 15:32:35 2010 +0300 @@ -0,0 +1,83 @@ +/* +* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#include + + +extern "C" { + +#include "cryptography_stubs.h" + +FARPROC vector[MAX_ORDINAL+1]; + +void fill_vector(HINSTANCE aDll) + { + int i; + for (i=1;i<=MAX_ORDINAL;i++) + { + vector[i] = GetProcAddress(aDll, (LPCSTR)i); + } + vector[0] = (FARPROC)1; // initialised + } + +void init_vector() + { + __LOCK_HOST; // prevent deadlock with EKA2 scheduler + + HINSTANCE instance; + + // Try for strong cryptography + // + instance = LoadLibraryA("strong_cryptography.dll"); + if (instance != NULL) + { + fill_vector(instance); + return; + } + + // Try for weak cryptography + // + instance = LoadLibraryA("weak_cryptography.dll"); + if (instance != NULL) + { + fill_vector(instance); + return; + } + + // die + // + OutputDebugStringA("Unable to load cryptography implementation"); + _asm int 3; + } + +__declspec(naked) void common_dispatch() + { + _asm cmp dword ptr vector,0 // initialised? + _asm jne call_though_vector + _asm push eax + _asm push ecx + _asm push edx + _asm call init_vector + _asm pop edx + _asm pop ecx + _asm pop eax +call_though_vector: + _asm jmp [vector+eax*4] + } + +}