diff -r da2ae96f639b -r cd501b96611d cryptoplugins/cryptospiplugins/source/softwarecrypto/pluginentry.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cryptoplugins/cryptospiplugins/source/softwarecrypto/pluginentry.cpp Fri Nov 06 13:21:00 2009 +0200 @@ -0,0 +1,448 @@ +/* +* Copyright (c) 2006-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: +* plugin entry implementation +* plugin entry implementation +* +*/ + + +/** + @file +*/ + +#include "pluginentry.h" +#include "keypair.h" +#include "pluginconfig.h" +#include "md2impl.h" +#include "md5impl.h" +#include "md4impl.h" +#include "sha1impl.h" +#include "hmacimpl.h" +#include "keys.h" +#include "3desimpl.h" +#include "desimpl.h" +#include "rc2impl.h" +#include "arc4impl.h" +#include "randomimpl.h" +#include "rijndaelimpl.h" +#include "randomimpl.h" +#include "rsaimpl.h" +#include "dhimpl.h" +#include "dhkeypairgenimpl.h" +#include "rsakeypairgenimpl.h" +#include "dsakeypairgenimpl.h" +#include "dsasignerimpl.h" +#include "dsaverifyimpl.h" +#include "rsasignerimpl.h" +#include "rsaverifyimpl.h" +#include + +#ifdef SYMBIAN_SDP_IPSEC_VOIP_SUPPORT + #include "macimpl.h" +#endif + + +using namespace SoftwareCrypto; + +EXPORT_C const TCharacteristics** CCryptoPluginEntry::Enumerate(TUid aInterface, TInt& aNumPlugins) + { + const TCharacteristics** ptr(0); + switch (aInterface.iUid) + { + case KHashInterface: + { + aNumPlugins=sizeof(KHashCharacteristics)/sizeof(THashCharacteristics*); + ptr = (const TCharacteristics**) &KHashCharacteristics[0]; + } + break; + +#ifdef SYMBIAN_SDP_IPSEC_VOIP_SUPPORT + + case KMacInterface: + { + aNumPlugins=sizeof(KMacCharacteristics)/sizeof(TMacCharacteristics*); + ptr = (const TCharacteristics**) &KMacCharacteristics[0]; + } + break; + +#endif + + case KRandomInterface: + { + aNumPlugins=sizeof(KRandomCharacteristics)/sizeof(TRandomCharacteristics*); + ptr= (const TCharacteristics**) &KRandomCharacteristics[0]; + } + break; + + case KSymmetricCipherInterface: + { + aNumPlugins=sizeof(KSymmetricCipherCharacteristics)/sizeof(TSymmetricCipherCharacteristics*); + ptr = (const TCharacteristics**) &KSymmetricCipherCharacteristics[0]; + } + break; + + case KAsymmetricCipherInterface: + { + aNumPlugins=sizeof(KAsymmetricCipherCharacteristics)/sizeof(TAsymmetricCipherCharacteristics*); + ptr = (const TCharacteristics**) &KAsymmetricCipherCharacteristics[0]; + } + break; + + case KSignerInterface: + { + aNumPlugins=sizeof(KSignerCharacteristics)/sizeof(TAsymmetricSignatureCharacteristics*); + ptr = (const TCharacteristics**) &KSignerCharacteristics[0]; + } + break; + + case KVerifierInterface: + { + aNumPlugins=sizeof(KVerifierCharacteristics)/sizeof(TAsymmetricSignatureCharacteristics*); + ptr = (const TCharacteristics**) &KVerifierCharacteristics[0]; + } + break; + + case KKeyAgreementInterface: + { + aNumPlugins=sizeof(KKeyAgreementCharacteristics)/sizeof(TKeyAgreementCharacteristics*); + ptr = (const TCharacteristics**) &KKeyAgreementCharacteristics[0]; + } + break; + + case KKeypairGeneratorInterface: + { + aNumPlugins=sizeof(KKeyPairGeneratorCharacteristics)/sizeof(TAsymmetricKeypairGeneratorCharacteristics*); + ptr = (const TCharacteristics**) &KKeyPairGeneratorCharacteristics[0]; + } + break; + + case KKeyGeneratorInterface: + break; + + default:; + } + + return ptr; + } + +EXPORT_C void CCryptoPluginEntry::GetExtendedCharacteristicsL(TUid aImplementationUid, CExtendedCharacteristics*& aExt) + { + switch (aImplementationUid.iUid) + { + +#ifdef SYMBIAN_SDP_IPSEC_VOIP_SUPPORT + case KCryptoPluginMacHashMd2: +#endif + + case KCryptoPluginMd2: + aExt = CMD2Impl::CreateExtendedCharacteristicsL(); + break; + +#ifdef SYMBIAN_SDP_IPSEC_VOIP_SUPPORT + case KCryptoPluginMacHashMd5: +#endif + + case KCryptoPluginMd5: + aExt = CMD5Impl::CreateExtendedCharacteristicsL(); + break; + +#ifdef SYMBIAN_SDP_IPSEC_VOIP_SUPPORT + case KCryptoPluginMacHashSha1: +#endif + + case KCryptoPluginSha1: + aExt = CSHA1Impl::CreateExtendedCharacteristicsL(); + break; + +#ifdef SYMBIAN_SDP_IPSEC_VOIP_SUPPORT + case KCryptoPluginMacHashMd4: +#endif + + case KCryptoPluginMd4: + aExt = CMD4Impl::CreateExtendedCharacteristicsL(); + break; + case KCryptoPluginRandom: + aExt = CRandomImpl::CreateExtendedCharacteristicsL(); + break; + case KCryptoPluginDes: + aExt = CDesImpl::CreateExtendedCharacteristicsL(); + break; + case KCryptoPlugin3Des: + aExt = C3DesImpl::CreateExtendedCharacteristicsL(); + break; + case KCryptoPluginRc2: + aExt = CRc2Impl::CreateExtendedCharacteristicsL(); + break; + case KCryptoPluginArc4: + aExt = CArc4Impl::CreateExtendedCharacteristicsL(); + break; + +#ifdef SYMBIAN_SDP_IPSEC_VOIP_SUPPORT + case KCryptoPluginMacAesXcbcMac96: + case KCryptoPluginMacAesXcbcPrf128: +#endif + + case KCryptoPluginAes: + aExt = CRijndaelImpl::CreateExtendedCharacteristicsL(); + break; + case KCryptoPluginRsaCipher: + aExt = CRSAImpl::CreateExtendedCharacteristicsL(); + break; + case KCryptoPluginRsaSigner: + aExt = CRSASignerImpl::CreateExtendedCharacteristicsL(); + break; + case KCryptoPluginDsaSigner: + aExt = CDSASignerImpl::CreateExtendedCharacteristicsL(); + break; + case KCryptoPluginRsaVerifier: + aExt = CRSAVerifierImpl::CreateExtendedCharacteristicsL(); + break; + case KCryptoPluginDsaVerifier: + aExt = CDSAVerifierImpl::CreateExtendedCharacteristicsL(); + break; + case KCryptoPluginDhKeyAgreement: + aExt = CDHImpl::CreateExtendedCharacteristicsL(); + break; + case KCryptoPluginDhKeyPairGen: + aExt = CDHKeyPairGenImpl::CreateExtendedCharacteristicsL(); + break; + case KCryptoPluginRsaKeyPairGen: + aExt = CRSAKeyPairGenImpl::CreateExtendedCharacteristicsL(); + break; + case KCryptoPluginDsaKeyPairGen: + aExt = CDSAKeyPairGenImpl::CreateExtendedCharacteristicsL(); + break; + default: + User::Leave(KErrNotSupported); + } + } + +EXPORT_C void CCryptoPluginEntry::CreateAsymmetricCipherL(MAsymmetricCipher*& aPlugin, + TUid aImplementationId, + const CKey& aKey, + TUid aCryptoMode, + TUid aPaddingMode, + const CCryptoParams* /*aAlgorithmParams*/) + { + switch (aImplementationId.iUid) + { + case KCryptoPluginRsaCipher: + { + aPlugin = CRSAImpl::NewL(aKey, aCryptoMode, aPaddingMode); + } + break; + + default: + User::Leave(KErrNotFound); + } + } + +EXPORT_C void CCryptoPluginEntry::CreateAsymmetricSignerL(MSigner*& aPlugin, + TUid aImplementationId, + const CKey& aKey, + TUid aPaddingMode, + const CCryptoParams* /*aAlgorithmParams*/) + { + switch (aImplementationId.iUid) + { + case KCryptoPluginRsaSigner: + { + aPlugin = CRSASignerImpl::NewL(aKey, aPaddingMode); + } + break; + + case KCryptoPluginDsaSigner: + { + aPlugin = CDSASignerImpl::NewL(aKey); + } + break; + + default: + User::Leave(KErrNotFound); + } + } + +EXPORT_C void CCryptoPluginEntry::CreateAsymmetricVerifierL(MVerifier*& aPlugin, + TUid aImplementationId, + const CKey& aKey, + TUid aPaddingMode, + const CCryptoParams* /*aAlgorithmParams*/) + { + switch (aImplementationId.iUid) + { + case KCryptoPluginRsaVerifier: + aPlugin = CRSAVerifierImpl::NewL(aKey, aPaddingMode); + break; + + case KCryptoPluginDsaVerifier: + { + aPlugin = CDSAVerifierImpl::NewL(aKey); + } + break; + + default: + User::Leave(KErrNotFound); + } + } + +EXPORT_C void CCryptoPluginEntry::CreateHashL(MHash*& aPlugin, + TUid aImplementationId, + TUid aOperationMode, + const CKey* aKey, + const CCryptoParams* /*aAlgorithmParams*/) + { + aPlugin=CSoftwareHash::NewL(aImplementationId, aOperationMode, aKey); + } + +#ifdef SYMBIAN_SDP_IPSEC_VOIP_SUPPORT + +EXPORT_C void CCryptoPluginEntry::CreateHashL(MHash*& aPlugin, + TUid aImplementationId, + const CCryptoParams* /*aAlgorithmParams*/) + { + aPlugin=CSoftwareHash::NewL(aImplementationId); + } + +EXPORT_C void CCryptoPluginEntry::CreateMacL(MMac*& aPlugin, + const TUid aImplementationId, + const CKey& aKey, + const CCryptoParams* aAlgorithmParams) + { + aPlugin=CMacImpl::NewL(aKey, aImplementationId, aAlgorithmParams); + } + +#endif + +EXPORT_C void CCryptoPluginEntry::CreateKeyAgreementL(MKeyAgreement*& aPlugin, + TUid aImplementationId, + const CKey& aPrivateKey, + const CCryptoParams* aAlgorithmParams) + { + // create requested key agreement implementation in this plugin + switch (aImplementationId.iUid) + { + case KCryptoPluginDhKeyAgreement: + { + aPlugin = CDHImpl::NewL(aPrivateKey, aAlgorithmParams); + } + break; + + default: + User::Leave(KErrNotFound); + } + } + +EXPORT_C void CCryptoPluginEntry::CreateKeyPairGeneratorL(MKeyPairGenerator*& aPlugin, + TUid aImplementationId, + const CCryptoParams* /*aAlgorithmParams*/) + { + // create requested key pair generator implementation in this plugin + switch (aImplementationId.iUid) + { + case KCryptoPluginDhKeyPairGen: + { + aPlugin = CDHKeyPairGenImpl::NewL(); + } + break; + + case KCryptoPluginRsaKeyPairGen: + { + aPlugin = CRSAKeyPairGenImpl::NewL(); + } + break; + + case KCryptoPluginDsaKeyPairGen: + { + aPlugin = CDSAKeyPairGenImpl::NewL(); + } + break; + + default: + User::Leave(KErrNotFound); + } + } + +EXPORT_C void CCryptoPluginEntry::CreateRandomL(MRandom*& aPlugin, + TUid /*aImplementationId*/, + const CCryptoParams* /*aAlgorithmParams*/) + { + aPlugin=CRandomImpl::NewL(); + } + +EXPORT_C void CCryptoPluginEntry::CreateSymmetricCipherL(MSymmetricCipher*& aPlugin, + TUid aImplementationId, + const CKey& aKey, + TUid aCryptoMode, + TUid aOperationMode, + TUid aPadding, + const CCryptoParams* aAlgorithmParams) + { + switch (aImplementationId.iUid) + { + case KCryptoPluginAes: + { + aPlugin=CRijndaelImpl::NewL( + aKey, aCryptoMode, aOperationMode, aPadding); + } + break; + case KCryptoPluginDes: + { + aPlugin=CDesImpl::NewL( + aKey, aCryptoMode, aOperationMode, aPadding); + } + break; + case KCryptoPlugin3Des: + { + aPlugin=C3DesImpl::NewL( + aKey, aCryptoMode, aOperationMode, aPadding); + } + break; + case KCryptoPluginRc2: + { + TInt effectiveKeyLenBits(CRc2Impl::KDefaultEffectiveKeyLenBits); + + if (aAlgorithmParams && aAlgorithmParams->IsPresent(KRC2EffectiveKeyLenBits)) + { + effectiveKeyLenBits = aAlgorithmParams->GetTIntL(KRC2EffectiveKeyLenBits); + if (effectiveKeyLenBits < 0) + { + User::Leave(KErrArgument); + } + } + aPlugin=CRc2Impl::NewL( + aKey, aCryptoMode, aOperationMode, aPadding, effectiveKeyLenBits); + } + break; + + case KCryptoPluginArc4: + { + TInt discardBytes(CArc4Impl::KDefaultDiscardBytes); + if (aAlgorithmParams && aAlgorithmParams->IsPresent(KARC4DiscardBytes)) + { + discardBytes = aAlgorithmParams->GetTIntL(KARC4DiscardBytes); + if (discardBytes < 0) + { + User::Leave(KErrArgument); + } + } + aPlugin=CArc4Impl::NewL(aKey, discardBytes); + } + break; + + default: + User::Leave(KErrNotFound); + } + } +