pkiutilities/DeviceToken/Src/KeyStore/Client/DevCertOpenedKeys.cpp
changeset 0 164170e6151a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pkiutilities/DeviceToken/Src/KeyStore/Client/DevCertOpenedKeys.cpp	Tue Jan 26 15:20:08 2010 +0200
@@ -0,0 +1,531 @@
+/*
+* 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
+