sl@0: /* sl@0: * Copyright (c) 2004-2009 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 sl@0: #include sl@0: #include sl@0: #include "ClientOpenedKeys.h" sl@0: #include "cfskeystoreclient.h" sl@0: #include "hash.h" sl@0: #include sl@0: sl@0: sl@0: // COpenedKey ////////////////////////////////////////////////////////////////// sl@0: sl@0: COpenedKey::~COpenedKey() sl@0: { sl@0: iClient->ReleaseObject(iHandle); sl@0: delete iLabel; sl@0: } sl@0: sl@0: // CRSARepudiableSigner //////////////////////////////////////////////////////// sl@0: sl@0: CRSARepudiableSigner* CRSARepudiableSigner::New(CFSKeyStoreClient* aClient) sl@0: { sl@0: return new CRSARepudiableSigner(aClient); sl@0: } sl@0: sl@0: CRSARepudiableSigner::CRSARepudiableSigner(CFSKeyStoreClient* aClient) sl@0: : MCTSigner(aClient->Token()) sl@0: { sl@0: iClient = aClient; sl@0: iHandle.iTokenHandle = aClient->Token().Handle(); sl@0: iHandle.iObjectId = 0; sl@0: } sl@0: sl@0: CRSARepudiableSigner::~CRSARepudiableSigner() sl@0: { sl@0: delete iDigest; sl@0: } sl@0: sl@0: void CRSARepudiableSigner::Release() sl@0: { sl@0: MCTTokenObject::Release(); sl@0: } sl@0: sl@0: const TDesC& CRSARepudiableSigner::Label() const sl@0: { sl@0: return iLabel ? static_cast(*iLabel) : static_cast(KNullDesC); sl@0: } sl@0: sl@0: MCTToken& CRSARepudiableSigner::Token() const sl@0: { sl@0: return iClient->Token(); sl@0: } sl@0: sl@0: TUid CRSARepudiableSigner::Type() const sl@0: { sl@0: return KRSARepudiableSignerUID; sl@0: } sl@0: sl@0: TCTTokenObjectHandle CRSARepudiableSigner::Handle() const sl@0: { sl@0: return iHandle; sl@0: } sl@0: sl@0: void CRSARepudiableSigner::SignMessage(const TDesC8& aPlaintext, sl@0: CRSASignature*& aSignature, sl@0: TRequestStatus& aStatus) sl@0: { sl@0: // Hash the data on the client side sl@0: TRAPD(err, iDigest = CSHA1::NewL()); sl@0: if (err != KErrNone) sl@0: { sl@0: TRequestStatus* status = &aStatus; sl@0: User::RequestComplete(status, err); sl@0: } sl@0: else sl@0: { sl@0: iDigest->Update(aPlaintext); sl@0: Sign(iDigest->Final(), aSignature, aStatus); sl@0: } sl@0: } sl@0: sl@0: void CRSARepudiableSigner::Sign(const TDesC8& aPlaintext, sl@0: CRSASignature*& aSignature, sl@0: TRequestStatus& aStatus) sl@0: { sl@0: iClient->RepudiableRSASign(Handle(),aPlaintext, aSignature, aStatus); sl@0: } sl@0: sl@0: void CRSARepudiableSigner::CancelSign() sl@0: { sl@0: iClient->CancelRepudiableRSASign(); sl@0: } sl@0: sl@0: // CDSARepudiableSigner //////////////////////////////////////////////////////// sl@0: sl@0: CDSARepudiableSigner* CDSARepudiableSigner::New(CFSKeyStoreClient* aClient) sl@0: { sl@0: return new CDSARepudiableSigner(aClient); sl@0: } sl@0: sl@0: CDSARepudiableSigner::CDSARepudiableSigner(CFSKeyStoreClient* aClient) sl@0: : MCTSigner(aClient->Token()) sl@0: { sl@0: iClient = aClient; sl@0: iHandle.iTokenHandle = aClient->Token().Handle(); sl@0: iHandle.iObjectId = 0; sl@0: } sl@0: sl@0: sl@0: CDSARepudiableSigner::~CDSARepudiableSigner() sl@0: { sl@0: delete iDigest; sl@0: } sl@0: sl@0: void CDSARepudiableSigner::Release() sl@0: { sl@0: MCTTokenObject::Release(); sl@0: } sl@0: sl@0: const TDesC& CDSARepudiableSigner::Label() const sl@0: { sl@0: return iLabel ? static_cast(*iLabel) : static_cast(KNullDesC); sl@0: } sl@0: sl@0: MCTToken& CDSARepudiableSigner::Token() const sl@0: { sl@0: return iClient->Token(); sl@0: } sl@0: sl@0: TUid CDSARepudiableSigner::Type() const sl@0: { sl@0: return KDSARepudiableSignerUID; sl@0: } sl@0: sl@0: TCTTokenObjectHandle CDSARepudiableSigner::Handle() const sl@0: { sl@0: return iHandle; sl@0: } sl@0: sl@0: void CDSARepudiableSigner::SignMessage(const TDesC8& aPlaintext, sl@0: CDSASignature*& aSignature, sl@0: TRequestStatus& aStatus) sl@0: { sl@0: // Hash the data on the client side sl@0: TRAPD(err, iDigest = CSHA1::NewL()); sl@0: if (err != KErrNone) sl@0: { sl@0: TRequestStatus* status = &aStatus; sl@0: User::RequestComplete(status, err); sl@0: } sl@0: else sl@0: { sl@0: iDigest->Update(aPlaintext); sl@0: Sign(iDigest->Final(), aSignature, aStatus); sl@0: } sl@0: } sl@0: sl@0: void CDSARepudiableSigner::Sign(const TDesC8& aPlaintext, sl@0: CDSASignature*& aSignature, sl@0: TRequestStatus& aStatus) sl@0: { sl@0: iClient->RepudiableDSASign(Handle(),aPlaintext, aSignature, aStatus); sl@0: } sl@0: sl@0: void CDSARepudiableSigner::CancelSign() sl@0: { sl@0: iClient->CancelRepudiableDSASign(); sl@0: } sl@0: sl@0: // CFSRSADecryptor ///////////////////////////////////////////////////////////// sl@0: sl@0: CFSRSADecryptor* CFSRSADecryptor::New(CFSKeyStoreClient* aClient) sl@0: { sl@0: return new CFSRSADecryptor(aClient); sl@0: } sl@0: sl@0: CFSRSADecryptor::CFSRSADecryptor(CFSKeyStoreClient* aClient) sl@0: : MCTDecryptor(aClient->Token()) sl@0: { sl@0: iClient = aClient; sl@0: iHandle.iTokenHandle = aClient->Token().Handle(); sl@0: iHandle.iObjectId = 0; sl@0: } sl@0: sl@0: CFSRSADecryptor::~CFSRSADecryptor() sl@0: { sl@0: } sl@0: sl@0: void CFSRSADecryptor::Release() sl@0: { sl@0: MCTTokenObject::Release(); sl@0: } sl@0: sl@0: const TDesC& CFSRSADecryptor::Label() const sl@0: { sl@0: return iLabel ? static_cast(*iLabel) : static_cast(KNullDesC); sl@0: } sl@0: sl@0: MCTToken& CFSRSADecryptor::Token() const sl@0: { sl@0: return iClient->Token(); sl@0: } sl@0: sl@0: TUid CFSRSADecryptor::Type() const sl@0: { sl@0: return KPrivateDecryptorUID; sl@0: } sl@0: sl@0: TCTTokenObjectHandle CFSRSADecryptor::Handle() const sl@0: { sl@0: return iHandle; sl@0: } sl@0: sl@0: void CFSRSADecryptor::Decrypt(const TDesC8& aCiphertext, sl@0: TDes8& aPlaintext, sl@0: TRequestStatus& aStatus sl@0: ) sl@0: { sl@0: iClient->Decrypt(Handle(),aCiphertext,aPlaintext, aStatus); sl@0: } sl@0: sl@0: void CFSRSADecryptor::CancelDecrypt() sl@0: { sl@0: iClient->CancelDecrypt(); sl@0: } sl@0: sl@0: // CDHAgreement //////////////////////////////////////////////////////////////// sl@0: sl@0: CDHAgreement* CDHAgreement::New(CFSKeyStoreClient* aClient) sl@0: { sl@0: return new CDHAgreement(aClient); sl@0: } sl@0: sl@0: CDHAgreement::CDHAgreement(CFSKeyStoreClient* aClient) sl@0: : MCTDH(aClient->Token()) sl@0: { sl@0: iClient = aClient; sl@0: iHandle.iTokenHandle = aClient->Token().Handle(); sl@0: iHandle.iObjectId = 0; sl@0: } sl@0: sl@0: CDHAgreement::~CDHAgreement() sl@0: { sl@0: } sl@0: sl@0: void CDHAgreement::Release() sl@0: { sl@0: MCTTokenObject::Release(); sl@0: } sl@0: sl@0: const TDesC& CDHAgreement::Label() const sl@0: { sl@0: return iLabel ? static_cast(*iLabel) : static_cast(KNullDesC); sl@0: } sl@0: sl@0: MCTToken& CDHAgreement::Token() const sl@0: { sl@0: return iClient->Token(); sl@0: } sl@0: sl@0: TUid CDHAgreement::Type() const sl@0: { sl@0: return KKeyAgreementUID; sl@0: } sl@0: sl@0: TCTTokenObjectHandle CDHAgreement::Handle() const sl@0: { sl@0: return iHandle; sl@0: } sl@0: sl@0: /** Returns the public key ('Big X') for the supplied set of parameters */ sl@0: void CDHAgreement::PublicKey(const TInteger& aN, const TInteger& aG, sl@0: CDHPublicKey*& aX, TRequestStatus& aStatus) sl@0: { sl@0: iClient->DHPublicKey(Handle(), aN, aG, aX, aStatus); sl@0: } sl@0: sl@0: /** Agrees a session key given the public key of the other party */ sl@0: void CDHAgreement::Agree(const CDHPublicKey& iY, HBufC8*& aAgreedKey, sl@0: TRequestStatus& aStatus) sl@0: { sl@0: iClient->DHAgree(Handle(), iY, aAgreedKey, aStatus); sl@0: } sl@0: sl@0: /** Cancels either a PublicKey or Agree operation */ sl@0: void CDHAgreement::CancelAgreement() sl@0: { sl@0: iClient->CancelDH(); sl@0: }