pkiutilities/DeviceToken/Src/KeyStore/Client/DevCertOpenedKeys.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 26 Jan 2010 15:20:08 +0200
changeset 0 164170e6151a
permissions -rw-r--r--
Revision: 201004

/*
* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "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:   Implementation of DevCertOpenedKey
*
*/



#include <e32base.h>
#include <ct.h>
#include <mctkeystore.h>
#include <mctkeystoreuids.h>
#include <hash.h>
#include "DevCertOpenedKeys.h"
#include "DevCertKeyStore.h"


// ======== MEMBER FUNCTIONS ========

//CDevCertOpenedKey

// -----------------------------------------------------------------------------
// CDevCertOpenedKey::~CDevCertOpenedKey()
// -----------------------------------------------------------------------------
//
CDevCertOpenedKey::~CDevCertOpenedKey()
    {
    if ( iClient )
        {
        iClient->ReleaseObject(iHandle);
    	  }	
    delete iLabel;
    }

// CDevCertRSARepudiableSigner

// -----------------------------------------------------------------------------
// CDevCertRSARepudiableSigner::New()
// -----------------------------------------------------------------------------
//
CDevCertRSARepudiableSigner* CDevCertRSARepudiableSigner::New(CDevCertKeyStore* aClient)
    {
    return new CDevCertRSARepudiableSigner(aClient);
    }


// -----------------------------------------------------------------------------
// CDevCertRSARepudiableSigner::CDevCertRSARepudiableSigner()
// -----------------------------------------------------------------------------
//
CDevCertRSARepudiableSigner::CDevCertRSARepudiableSigner(CDevCertKeyStore* aClient)
    : MCTSigner<CRSASignature*>(aClient->Token())
    {
    iClient = aClient;
    iHandle.iTokenHandle = aClient->Token().Handle();
    iHandle.iObjectId = 0;
    }


// -----------------------------------------------------------------------------
// CDevCertRSARepudiableSigner::~CDevCertRSARepudiableSigner()
// -----------------------------------------------------------------------------
//
CDevCertRSARepudiableSigner::~CDevCertRSARepudiableSigner()
    {
    delete iDigest;
    }


// -----------------------------------------------------------------------------
// CDevCertRSARepudiableSigner::Release()
// -----------------------------------------------------------------------------
//
void CDevCertRSARepudiableSigner::Release()
    {
    MCTTokenObject::Release();
    }


// -----------------------------------------------------------------------------
// CDevCertRSARepudiableSigner::Label()
// -----------------------------------------------------------------------------
//
const TDesC& CDevCertRSARepudiableSigner::Label() const
    {
    return iLabel ? static_cast<const TDesC&>(*iLabel) : static_cast<const TDesC&>(KNullDesC);
    }


// -----------------------------------------------------------------------------
// CDevCertRSARepudiableSigner::Token()
// -----------------------------------------------------------------------------
//
MCTToken& CDevCertRSARepudiableSigner::Token() const
    {
    return iClient->Token();
    }


// -----------------------------------------------------------------------------
// CDevCertRSARepudiableSigner::Type()
// -----------------------------------------------------------------------------
//
TUid CDevCertRSARepudiableSigner::Type() const
    {
    return KRSARepudiableSignerUID;
    }


// -----------------------------------------------------------------------------
// CDevCertRSARepudiableSigner::Handle()
// -----------------------------------------------------------------------------
//
TCTTokenObjectHandle CDevCertRSARepudiableSigner::Handle() const
    {
    return iHandle;
    }


// -----------------------------------------------------------------------------
// CDevCertRSARepudiableSigner::SignMessage()
// -----------------------------------------------------------------------------
//
void CDevCertRSARepudiableSigner::SignMessage(const TDesC8& aPlaintext, 
          CRSASignature*& aSignature, 
          TRequestStatus& aStatus)
    {
    // Hash the data on the client side
    TRAPD(err, iDigest = CSHA1::NewL());
    if (err != KErrNone)
        {
        TRequestStatus* status = &aStatus;
        User::RequestComplete(status, err);
        }
    else
        {
        iDigest->Update(aPlaintext);  
        Sign(iDigest->Final(), aSignature, aStatus);
        }
    }


// -----------------------------------------------------------------------------
// CDevCertRSARepudiableSigner::Sign()
// -----------------------------------------------------------------------------
//
void CDevCertRSARepudiableSigner::Sign(const TDesC8& aPlaintext, 
          CRSASignature*& aSignature, 
          TRequestStatus& aStatus)
    {
    iClient->RepudiableRSASign(Handle(),aPlaintext, aSignature, aStatus);
    }


// -----------------------------------------------------------------------------
// CDevCertRSARepudiableSigner::CancelSign()
// -----------------------------------------------------------------------------
//
void CDevCertRSARepudiableSigner::CancelSign()
    {
    // Synchronous, no need to cancel
    }


// CDevCertDSARepudiableSigner 

// -----------------------------------------------------------------------------
// CDevCertDSARepudiableSigner::New()
// -----------------------------------------------------------------------------
//
CDevCertDSARepudiableSigner* CDevCertDSARepudiableSigner::New(CDevCertKeyStore* aClient)
    {
    return new CDevCertDSARepudiableSigner(aClient);
    }


// -----------------------------------------------------------------------------
// CDevCertDSARepudiableSigner::CDevCertDSARepudiableSigner()
// -----------------------------------------------------------------------------
//
CDevCertDSARepudiableSigner::CDevCertDSARepudiableSigner(CDevCertKeyStore* aClient)
    : MCTSigner<CDSASignature*>(aClient->Token())
    {
    iClient = aClient;
    iHandle.iTokenHandle = aClient->Token().Handle();
    iHandle.iObjectId = 0;
    }


// -----------------------------------------------------------------------------
// CDevCertDSARepudiableSigner::~CDevCertDSARepudiableSigner()
// -----------------------------------------------------------------------------
//
CDevCertDSARepudiableSigner::~CDevCertDSARepudiableSigner()
    {
    delete iDigest;
    }


// -----------------------------------------------------------------------------
// CDevCertDSARepudiableSigner::Release()
// -----------------------------------------------------------------------------
//
void CDevCertDSARepudiableSigner::Release()
    {
    MCTTokenObject::Release();
    }


// -----------------------------------------------------------------------------
// CDevCertDSARepudiableSigner::Label()
// -----------------------------------------------------------------------------
//
const TDesC& CDevCertDSARepudiableSigner::Label() const
    {
    return iLabel ? static_cast<const TDesC&>(*iLabel) : static_cast<const TDesC&>(KNullDesC);
    }


// -----------------------------------------------------------------------------
// CDevCertDSARepudiableSigner::Token()
// -----------------------------------------------------------------------------
//
MCTToken& CDevCertDSARepudiableSigner::Token() const
    {
    return iClient->Token();
    }


// -----------------------------------------------------------------------------
// CDevCertDSARepudiableSigner::Type()
// -----------------------------------------------------------------------------
//
TUid CDevCertDSARepudiableSigner::Type() const
    {
    return KDSARepudiableSignerUID;
    }


// -----------------------------------------------------------------------------
// CDevCertDSARepudiableSigner::Handle()
// -----------------------------------------------------------------------------
//
TCTTokenObjectHandle CDevCertDSARepudiableSigner::Handle() const
    {
    return iHandle;
    }


// -----------------------------------------------------------------------------
// CDevCertDSARepudiableSigner::SignMessage()
// -----------------------------------------------------------------------------
//
void CDevCertDSARepudiableSigner::SignMessage(const TDesC8& aPlaintext, 
          CDSASignature*& aSignature, 
        TRequestStatus& aStatus)
    {
    // Hash the data on the client side
    TRAPD(err, iDigest = CSHA1::NewL());
    if (err != KErrNone)
        {
        TRequestStatus* status = &aStatus;
        User::RequestComplete(status, err);
        }
    else
        {
        iDigest->Update(aPlaintext);
        Sign(iDigest->Final(), aSignature, aStatus);
        }
    }


// -----------------------------------------------------------------------------
// CDevCertDSARepudiableSigner::Sign()
// -----------------------------------------------------------------------------
//
void CDevCertDSARepudiableSigner::Sign(const TDesC8& aPlaintext, 
          CDSASignature*& aSignature, 
        TRequestStatus& aStatus)
    {
    iClient->RepudiableDSASign(Handle(),aPlaintext, aSignature, aStatus);
    }


// -----------------------------------------------------------------------------
// CDevCertDSARepudiableSigner::CancelSign()
// -----------------------------------------------------------------------------
//
void CDevCertDSARepudiableSigner::CancelSign()
    {
    // Synchronous, no need to cancel
    }


// CDevCertRSADecryptor

// -----------------------------------------------------------------------------
// CDevCertRSADecryptor::New()
// -----------------------------------------------------------------------------
//
CDevCertRSADecryptor* CDevCertRSADecryptor::New(CDevCertKeyStore* aClient)
    {
    return new CDevCertRSADecryptor(aClient);
    }


// -----------------------------------------------------------------------------
// CDevCertRSADecryptor::CDevCertRSADecryptor()
// -----------------------------------------------------------------------------
//
CDevCertRSADecryptor::CDevCertRSADecryptor(CDevCertKeyStore* aClient)
    : MCTDecryptor(aClient->Token())
    {
    iClient = aClient;
    iHandle.iTokenHandle = aClient->Token().Handle();
    iHandle.iObjectId = 0;
    }


// -----------------------------------------------------------------------------
// CDevCertRSADecryptor::~CDevCertRSADecryptor()
// -----------------------------------------------------------------------------
//
CDevCertRSADecryptor::~CDevCertRSADecryptor()
    {
    }


// -----------------------------------------------------------------------------
// CDevCertRSADecryptor::Release()
// -----------------------------------------------------------------------------
//
void CDevCertRSADecryptor::Release()
    {
    MCTTokenObject::Release();
    }


// -----------------------------------------------------------------------------
// CDevCertRSADecryptor::Label()
// -----------------------------------------------------------------------------
//
const TDesC& CDevCertRSADecryptor::Label() const
    {
    return iLabel ? static_cast<const TDesC&>(*iLabel) : static_cast<const TDesC&>(KNullDesC);
    }


// -----------------------------------------------------------------------------
// CDevCertRSADecryptor::Token()
// -----------------------------------------------------------------------------
//
MCTToken& CDevCertRSADecryptor::Token() const
    {
    return iClient->Token();
    }


// -----------------------------------------------------------------------------
// CDevCertRSADecryptor::Type()
// -----------------------------------------------------------------------------
//
TUid CDevCertRSADecryptor::Type() const
    {
    return KPrivateDecryptorUID;
    }


// -----------------------------------------------------------------------------
// CDevCertRSADecryptor::Handle()
// -----------------------------------------------------------------------------
//
TCTTokenObjectHandle CDevCertRSADecryptor::Handle() const
    {
    return iHandle;
    }


// -----------------------------------------------------------------------------
// CDevCertRSADecryptor::Decrypt()
// -----------------------------------------------------------------------------
//
void CDevCertRSADecryptor::Decrypt(const TDesC8& aCiphertext,
      TDes8& aPlaintext, 
      TRequestStatus& aStatus)
    {
    iClient->Decrypt(Handle(),aCiphertext,aPlaintext, aStatus);
    }


// -----------------------------------------------------------------------------
// CDevCertRSADecryptor::CancelDecrypt()
// -----------------------------------------------------------------------------
//
void CDevCertRSADecryptor::CancelDecrypt()
    {
    // Synchronous, no need to cancel
    }


// CDevCertDHAgreement

// -----------------------------------------------------------------------------
// CDevCertDHAgreement::New()
// -----------------------------------------------------------------------------
//
CDevCertDHAgreement* CDevCertDHAgreement::New(CDevCertKeyStore* aClient)
    {
    return new CDevCertDHAgreement(aClient);
    }


// -----------------------------------------------------------------------------
// CDevCertDHAgreement::CDevCertDHAgreement()
// -----------------------------------------------------------------------------
//
CDevCertDHAgreement::CDevCertDHAgreement(CDevCertKeyStore* aClient)
  : MCTDH(aClient->Token())
    {
    iClient = aClient;
    iHandle.iTokenHandle = aClient->Token().Handle();
    iHandle.iObjectId = 0;
    }


// -----------------------------------------------------------------------------
// CDevCertDHAgreement::~CDevCertDHAgreement()
// -----------------------------------------------------------------------------
//
CDevCertDHAgreement::~CDevCertDHAgreement()
    {
    }


// -----------------------------------------------------------------------------
// CDevCertDHAgreement::Release()
// -----------------------------------------------------------------------------
//
void CDevCertDHAgreement::Release()
    {
    MCTTokenObject::Release();
    }


// -----------------------------------------------------------------------------
// CDevCertDHAgreement::Label()
// -----------------------------------------------------------------------------
//
const TDesC& CDevCertDHAgreement::Label() const
    {
    return iLabel ? static_cast<const TDesC&>(*iLabel) : static_cast<const TDesC&>(KNullDesC);
    }


// -----------------------------------------------------------------------------
// CDevCertDHAgreement::Token()
// -----------------------------------------------------------------------------
//
MCTToken& CDevCertDHAgreement::Token() const
    {
    return iClient->Token();
    }


// -----------------------------------------------------------------------------
// CDevCertDHAgreement::Type()
// -----------------------------------------------------------------------------
//
TUid CDevCertDHAgreement::Type() const
    {
    return KKeyAgreementUID;
    }


// -----------------------------------------------------------------------------
// CDevCertDHAgreement::Handle()
// -----------------------------------------------------------------------------
//
TCTTokenObjectHandle CDevCertDHAgreement::Handle() const
    {
    return iHandle;
    }


// -----------------------------------------------------------------------------
// CDevCertDHAgreement::PublicKey()
// Returns the public key ('Big X') for the supplied set of parameters
// -----------------------------------------------------------------------------
//
void CDevCertDHAgreement::PublicKey(const TInteger& aN, const TInteger& aG, 
               CDHPublicKey*& aX, TRequestStatus& aStatus)
    {
    iClient->DHPublicKey(Handle(), aN, aG, aX, aStatus);
    }


// -----------------------------------------------------------------------------
// CDevCertDHAgreement::Agree()
// Agrees a session key given the public key of the other party
// -----------------------------------------------------------------------------
//
void CDevCertDHAgreement::Agree(const CDHPublicKey& iY, HBufC8*& aAgreedKey,
             TRequestStatus& aStatus)
    {
    iClient->DHAgree(Handle(), iY, aAgreedKey, aStatus);
    }


// -----------------------------------------------------------------------------
// CDevCertDHAgreement::CancelAgreement()
// Cancels either a PublicKey or Agree operation
// -----------------------------------------------------------------------------
//
void CDevCertDHAgreement::CancelAgreement()
    {
    // Synchronous, no need to cancel
    }
    
//EOF