sl@0: /* sl@0: * Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of the License "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: sl@0: * sl@0: */ sl@0: sl@0: sl@0: #include "keyconverter.h" sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: sl@0: using namespace CryptoSpi; sl@0: sl@0: /* CKeyConverter */ sl@0: sl@0: CKey* KeyConverter::CreateKeyL(const CDHPrivateKey& aPrivateKey) sl@0: { sl@0: /* sl@0: * setup key attributes sl@0: */ sl@0: TKeyProperty keyProperty; sl@0: keyProperty.iAlgorithmUid = KDHAgreementUid; sl@0: sl@0: /* sl@0: * extract key parameters from the compatibility dh key object sl@0: */ sl@0: CCryptoParams* keyParameters = CCryptoParams::NewLC(); sl@0: keyParameters->AddL(aPrivateKey.N(), KDhKeyParameterNUid); sl@0: keyParameters->AddL(aPrivateKey.G(), KDhKeyParameterGUid); sl@0: keyParameters->AddL(aPrivateKey.x(), KDhKeyParameterxUid); sl@0: sl@0: /* sl@0: * create a CKey from the parameters sl@0: */ sl@0: CKey* newPrivateKey = CKey::NewL(keyProperty, *keyParameters); sl@0: sl@0: CleanupStack::PopAndDestroy(1, keyParameters); sl@0: return newPrivateKey; sl@0: } sl@0: sl@0: CKey* KeyConverter::CreateKeyL(const CDHPublicKey& aPublicKey) sl@0: { sl@0: /* sl@0: * setup key attributes sl@0: */ sl@0: TKeyProperty keyProperty; sl@0: keyProperty.iAlgorithmUid = KDHAgreementUid; sl@0: sl@0: /* sl@0: * extract key parameters from the compatibility dh key object sl@0: */ sl@0: CCryptoParams* keyParameters = CCryptoParams::NewLC(); sl@0: keyParameters->AddL(aPublicKey.N(), KDhKeyParameterNUid); sl@0: keyParameters->AddL(aPublicKey.G(), KDhKeyParameterGUid); sl@0: keyParameters->AddL(aPublicKey.X(), KDhKeyParameterXUid); sl@0: sl@0: /* sl@0: * create a CKey from the parameters sl@0: */ sl@0: CKey* newPublicKey = CKey::NewL(keyProperty, *keyParameters); sl@0: sl@0: CleanupStack::PopAndDestroy(1, keyParameters); sl@0: return newPublicKey; sl@0: } sl@0: sl@0: CKey* KeyConverter::CreateKeyL(const CDSAPrivateKey& aPrivateKey) sl@0: { sl@0: TKeyProperty keyProperty = {KDsaSignerUid, KNullUid, KDsaPrivateKeyUid, KNonEmbeddedKeyUid}; sl@0: sl@0: CCryptoParams* keyParameters = CCryptoParams::NewLC(); sl@0: keyParameters->AddL(aPrivateKey.P(), KDsaKeyParameterPUid); sl@0: keyParameters->AddL(aPrivateKey.Q(), KDsaKeyParameterQUid); sl@0: keyParameters->AddL(aPrivateKey.G(), KDsaKeyParameterGUid); sl@0: keyParameters->AddL(aPrivateKey.X(), KDsaKeyParameterXUid); sl@0: sl@0: CKey* newPrivateKey = CKey::NewL(keyProperty, *keyParameters); sl@0: CleanupStack::PopAndDestroy(keyParameters); sl@0: return newPrivateKey; sl@0: } sl@0: sl@0: CKey* KeyConverter::CreateKeyL(const CDSAPublicKey& aPublicKey) sl@0: { sl@0: TKeyProperty keyProperty = {KDsaSignerUid, KNullUid, KDsaPublicKeyUid, KNonEmbeddedKeyUid}; sl@0: sl@0: CCryptoParams* keyParameters = CCryptoParams::NewLC(); sl@0: keyParameters->AddL(aPublicKey.P(), KDsaKeyParameterPUid); sl@0: keyParameters->AddL(aPublicKey.Q(), KDsaKeyParameterQUid); sl@0: keyParameters->AddL(aPublicKey.G(), KDsaKeyParameterGUid); sl@0: keyParameters->AddL(aPublicKey.Y(), KDsaKeyParameterYUid); sl@0: sl@0: CKey* newPublicKey = CKey::NewL(keyProperty, *keyParameters); sl@0: CleanupStack::PopAndDestroy(keyParameters); sl@0: return newPublicKey; sl@0: } sl@0: sl@0: // RSA convertors /////////////////////////////////////////////////////////////////////////// sl@0: CKey* KeyConverter::CreateKeyL(const CRSAPrivateKeyCRT& aPrivateKey) sl@0: { sl@0: TKeyProperty keyProperty = {KRsaCipherUid, sl@0: NULL, sl@0: KRsaPrivateKeyCRTUid, sl@0: KNonEmbeddedKeyUid }; sl@0: sl@0: CCryptoParams* keyParameters = CCryptoParams::NewLC(); sl@0: keyParameters->AddL(aPrivateKey.N(), KRsaKeyParameterNUid); sl@0: keyParameters->AddL(aPrivateKey.P(), KRsaKeyParameterPUid); sl@0: keyParameters->AddL(aPrivateKey.Q(), KRsaKeyParameterQUid); sl@0: keyParameters->AddL(aPrivateKey.QInv(), KRsaKeyParameterQInvUid); sl@0: keyParameters->AddL(aPrivateKey.DP(), KRsaKeyParameterDPUid); sl@0: keyParameters->AddL(aPrivateKey.DQ(), KRsaKeyParameterDQUid); sl@0: sl@0: CKey* newPrivateKey = CKey::NewL(keyProperty, *keyParameters); sl@0: CleanupStack::PopAndDestroy(keyParameters); sl@0: return newPrivateKey; sl@0: } sl@0: sl@0: CKey* KeyConverter::CreateKeyL(const CRSAPrivateKeyStandard& aPrivateKey) sl@0: { sl@0: TKeyProperty keyProperty = {KRsaCipherUid, sl@0: NULL, sl@0: KRsaPrivateKeyStandardUid, sl@0: KNonEmbeddedKeyUid }; sl@0: sl@0: CCryptoParams* keyParameters = CCryptoParams::NewLC(); sl@0: keyParameters->AddL(aPrivateKey.N(), KRsaKeyParameterNUid); sl@0: keyParameters->AddL(aPrivateKey.D(), KRsaKeyParameterDUid); sl@0: sl@0: CKey* newPrivateKey = CKey::NewL(keyProperty, *keyParameters); sl@0: CleanupStack::PopAndDestroy(keyParameters); sl@0: return newPrivateKey; sl@0: } sl@0: sl@0: CKey* KeyConverter::CreateKeyL(const CRSAPublicKey& aPublicKey) sl@0: { sl@0: TKeyProperty keyProperty = {KRsaCipherUid, sl@0: NULL, sl@0: KRsaPublicKeyUid, sl@0: KNonEmbeddedKeyUid }; sl@0: sl@0: CCryptoParams* keyParameters = CCryptoParams::NewLC(); sl@0: keyParameters->AddL(aPublicKey.N(), KRsaKeyParameterNUid); sl@0: keyParameters->AddL(aPublicKey.E(), KRsaKeyParameterEUid); sl@0: sl@0: CKey* newPublicKey = CKey::NewL(keyProperty, *keyParameters); sl@0: CleanupStack::PopAndDestroy(keyParameters); sl@0: return newPublicKey; sl@0: } sl@0: sl@0: CKey* KeyConverter::CreateKeyL(const CRSAPrivateKey& aPrivateKey) sl@0: { sl@0: // Determine which type of private key sl@0: if (aPrivateKey.PrivateKeyType() == EStandard) sl@0: { sl@0: const CRSAPrivateKeyStandard* stdKey = static_cast(&aPrivateKey); sl@0: return KeyConverter::CreateKeyL(*stdKey); sl@0: } sl@0: else if (aPrivateKey.PrivateKeyType() == EStandardCRT) sl@0: { sl@0: const CRSAPrivateKeyCRT* crtKey = static_cast(&aPrivateKey); sl@0: return KeyConverter::CreateKeyL(*crtKey); sl@0: } sl@0: return NULL; // Keep the compiler happy sl@0: } sl@0: sl@0: // Methods which are not supported or not exposed out of library can be excluded from the coverage. sl@0: #ifdef _BullseyeCoverage sl@0: #pragma suppress_warnings on sl@0: #pragma BullseyeCoverage off sl@0: #pragma suppress_warnings off sl@0: #endif sl@0: sl@0: CKeyPair* KeyConverter::CreateKeyPairL(const CDSAKeyPair& /*aKeyPair*/) sl@0: { sl@0: return NULL; sl@0: } sl@0: sl@0: CKeyPair* KeyConverter::CreateKeyPairL(const CRSAKeyPair& aKeyPair) sl@0: { sl@0: CKey* newPrivateKey = KeyConverter::CreateKeyL(aKeyPair.PrivateKey()); sl@0: CleanupStack::PushL(newPrivateKey); sl@0: CKey* newPublicKey = KeyConverter::CreateKeyL(aKeyPair.PublicKey()); sl@0: CleanupStack::PushL(newPublicKey); sl@0: CKeyPair* newKeyPair = CKeyPair::NewL(newPublicKey, newPrivateKey); sl@0: CleanupStack::Pop(2, newPrivateKey); sl@0: return newKeyPair; sl@0: } sl@0: sl@0: CKeyPair* KeyConverter::CreateKeyPairL(const CDHKeyPair& aKeyPair) sl@0: { sl@0: CKey* newPrivateKey = KeyConverter::CreateKeyL(aKeyPair.PrivateKey()); sl@0: CleanupStack::PushL(newPrivateKey); sl@0: CKey* newPublicKey = KeyConverter::CreateKeyL(aKeyPair.PublicKey()); sl@0: CleanupStack::PushL(newPublicKey); sl@0: CKeyPair* newKeyPair = CKeyPair::NewL(newPublicKey, newPrivateKey); sl@0: CleanupStack::Pop(2, newPrivateKey); sl@0: return newKeyPair; sl@0: }