os/security/cryptoservices/filebasedcertificateandkeystores/source/keystore/Client/ClientOpenedKeys.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
/*
sl@0
     2
* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     3
* All rights reserved.
sl@0
     4
* This component and the accompanying materials are made available
sl@0
     5
* under the terms of the License "Eclipse Public License v1.0"
sl@0
     6
* which accompanies this distribution, and is available
sl@0
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     8
*
sl@0
     9
* Initial Contributors:
sl@0
    10
* Nokia Corporation - initial contribution.
sl@0
    11
*
sl@0
    12
* Contributors:
sl@0
    13
*
sl@0
    14
* Description: 
sl@0
    15
*
sl@0
    16
*/
sl@0
    17
sl@0
    18
sl@0
    19
#include <e32base.h>
sl@0
    20
#include <ct.h>
sl@0
    21
#include <mctkeystore.h>
sl@0
    22
#include "ClientOpenedKeys.h"
sl@0
    23
#include "cfskeystoreclient.h"
sl@0
    24
#include "hash.h"
sl@0
    25
#include <mctkeystoreuids.h>
sl@0
    26
sl@0
    27
sl@0
    28
// COpenedKey //////////////////////////////////////////////////////////////////
sl@0
    29
	
sl@0
    30
COpenedKey::~COpenedKey()
sl@0
    31
	{
sl@0
    32
	iClient->ReleaseObject(iHandle);
sl@0
    33
	delete iLabel;
sl@0
    34
	}
sl@0
    35
sl@0
    36
// CRSARepudiableSigner ////////////////////////////////////////////////////////
sl@0
    37
sl@0
    38
CRSARepudiableSigner* CRSARepudiableSigner::New(CFSKeyStoreClient* aClient)
sl@0
    39
	{
sl@0
    40
	return new CRSARepudiableSigner(aClient);
sl@0
    41
	}
sl@0
    42
sl@0
    43
CRSARepudiableSigner::CRSARepudiableSigner(CFSKeyStoreClient* aClient)
sl@0
    44
		: MCTSigner<CRSASignature*>(aClient->Token())
sl@0
    45
	{
sl@0
    46
	iClient = aClient;
sl@0
    47
	iHandle.iTokenHandle = aClient->Token().Handle();
sl@0
    48
	iHandle.iObjectId = 0;
sl@0
    49
	}
sl@0
    50
sl@0
    51
CRSARepudiableSigner::~CRSARepudiableSigner()
sl@0
    52
	{
sl@0
    53
	delete iDigest;
sl@0
    54
	}
sl@0
    55
sl@0
    56
void CRSARepudiableSigner::Release()
sl@0
    57
	{
sl@0
    58
	MCTTokenObject::Release();
sl@0
    59
	}
sl@0
    60
sl@0
    61
const TDesC& CRSARepudiableSigner::Label() const
sl@0
    62
	{
sl@0
    63
	return iLabel ? static_cast<const TDesC&>(*iLabel) : static_cast<const TDesC&>(KNullDesC);
sl@0
    64
	}
sl@0
    65
sl@0
    66
MCTToken& CRSARepudiableSigner::Token() const
sl@0
    67
	{
sl@0
    68
	return iClient->Token();
sl@0
    69
	}
sl@0
    70
sl@0
    71
TUid CRSARepudiableSigner::Type() const
sl@0
    72
	{
sl@0
    73
	return KRSARepudiableSignerUID;
sl@0
    74
	}
sl@0
    75
sl@0
    76
TCTTokenObjectHandle CRSARepudiableSigner::Handle() const
sl@0
    77
	{
sl@0
    78
	return iHandle;
sl@0
    79
	}
sl@0
    80
sl@0
    81
void CRSARepudiableSigner::SignMessage(const TDesC8& aPlaintext, 
sl@0
    82
  				CRSASignature*& aSignature, 
sl@0
    83
  				TRequestStatus& aStatus)
sl@0
    84
	{
sl@0
    85
	// Hash the data on the client side
sl@0
    86
	TRAPD(err, iDigest = CSHA1::NewL());
sl@0
    87
	if (err != KErrNone)
sl@0
    88
		{
sl@0
    89
		TRequestStatus* status = &aStatus;
sl@0
    90
		User::RequestComplete(status, err);
sl@0
    91
		}
sl@0
    92
    else
sl@0
    93
        {
sl@0
    94
        iDigest->Update(aPlaintext);	
sl@0
    95
        Sign(iDigest->Final(), aSignature, aStatus);
sl@0
    96
        }
sl@0
    97
	}
sl@0
    98
sl@0
    99
void CRSARepudiableSigner::Sign(const TDesC8& aPlaintext, 
sl@0
   100
  				CRSASignature*& aSignature, 
sl@0
   101
  				TRequestStatus& aStatus)
sl@0
   102
	{
sl@0
   103
	iClient->RepudiableRSASign(Handle(),aPlaintext, aSignature, aStatus);
sl@0
   104
	}
sl@0
   105
sl@0
   106
void CRSARepudiableSigner::CancelSign()
sl@0
   107
	{
sl@0
   108
	iClient->CancelRepudiableRSASign();
sl@0
   109
	}
sl@0
   110
sl@0
   111
// CDSARepudiableSigner ////////////////////////////////////////////////////////
sl@0
   112
sl@0
   113
CDSARepudiableSigner* CDSARepudiableSigner::New(CFSKeyStoreClient* aClient)
sl@0
   114
	{
sl@0
   115
	return new CDSARepudiableSigner(aClient);
sl@0
   116
	}
sl@0
   117
sl@0
   118
CDSARepudiableSigner::CDSARepudiableSigner(CFSKeyStoreClient* aClient)
sl@0
   119
		: MCTSigner<CDSASignature*>(aClient->Token())
sl@0
   120
	{
sl@0
   121
	iClient = aClient;
sl@0
   122
	iHandle.iTokenHandle = aClient->Token().Handle();
sl@0
   123
	iHandle.iObjectId = 0;
sl@0
   124
	}
sl@0
   125
sl@0
   126
sl@0
   127
CDSARepudiableSigner::~CDSARepudiableSigner()
sl@0
   128
	{
sl@0
   129
	delete iDigest;
sl@0
   130
	}
sl@0
   131
sl@0
   132
void CDSARepudiableSigner::Release()
sl@0
   133
	{
sl@0
   134
	MCTTokenObject::Release();
sl@0
   135
	}
sl@0
   136
sl@0
   137
const TDesC& CDSARepudiableSigner::Label() const
sl@0
   138
	{
sl@0
   139
	return iLabel ? static_cast<const TDesC&>(*iLabel) : static_cast<const TDesC&>(KNullDesC);
sl@0
   140
	}
sl@0
   141
sl@0
   142
MCTToken& CDSARepudiableSigner::Token() const
sl@0
   143
	{
sl@0
   144
	return iClient->Token();
sl@0
   145
	}
sl@0
   146
sl@0
   147
TUid CDSARepudiableSigner::Type() const
sl@0
   148
	{
sl@0
   149
	return KDSARepudiableSignerUID;
sl@0
   150
	}
sl@0
   151
sl@0
   152
TCTTokenObjectHandle CDSARepudiableSigner::Handle() const
sl@0
   153
	{
sl@0
   154
	return iHandle;
sl@0
   155
	}
sl@0
   156
sl@0
   157
void CDSARepudiableSigner::SignMessage(const TDesC8& aPlaintext, 
sl@0
   158
  				CDSASignature*& aSignature, 
sl@0
   159
 				TRequestStatus& aStatus)
sl@0
   160
	{
sl@0
   161
	// Hash the data on the client side
sl@0
   162
	TRAPD(err, iDigest = CSHA1::NewL());
sl@0
   163
	if (err != KErrNone)
sl@0
   164
		{
sl@0
   165
		TRequestStatus* status = &aStatus;
sl@0
   166
		User::RequestComplete(status, err);
sl@0
   167
		}
sl@0
   168
    else
sl@0
   169
        {
sl@0
   170
        iDigest->Update(aPlaintext);
sl@0
   171
        Sign(iDigest->Final(), aSignature, aStatus);
sl@0
   172
        }
sl@0
   173
	}
sl@0
   174
sl@0
   175
void CDSARepudiableSigner::Sign(const TDesC8& aPlaintext, 
sl@0
   176
  				CDSASignature*& aSignature, 
sl@0
   177
 				TRequestStatus& aStatus)
sl@0
   178
	{
sl@0
   179
	iClient->RepudiableDSASign(Handle(),aPlaintext, aSignature, aStatus);
sl@0
   180
	}
sl@0
   181
sl@0
   182
void CDSARepudiableSigner::CancelSign()
sl@0
   183
	{
sl@0
   184
	iClient->CancelRepudiableDSASign();
sl@0
   185
	}
sl@0
   186
sl@0
   187
// CFSRSADecryptor /////////////////////////////////////////////////////////////
sl@0
   188
sl@0
   189
CFSRSADecryptor* CFSRSADecryptor::New(CFSKeyStoreClient* aClient)
sl@0
   190
	{
sl@0
   191
	return new CFSRSADecryptor(aClient);
sl@0
   192
	}
sl@0
   193
sl@0
   194
CFSRSADecryptor::CFSRSADecryptor(CFSKeyStoreClient* aClient)
sl@0
   195
		: MCTDecryptor(aClient->Token())
sl@0
   196
	{
sl@0
   197
	iClient = aClient;
sl@0
   198
	iHandle.iTokenHandle = aClient->Token().Handle();
sl@0
   199
	iHandle.iObjectId = 0;
sl@0
   200
	}
sl@0
   201
sl@0
   202
CFSRSADecryptor::~CFSRSADecryptor()
sl@0
   203
	{
sl@0
   204
	}
sl@0
   205
sl@0
   206
void CFSRSADecryptor::Release()
sl@0
   207
	{
sl@0
   208
	MCTTokenObject::Release();
sl@0
   209
	}
sl@0
   210
sl@0
   211
const TDesC& CFSRSADecryptor::Label() const
sl@0
   212
	{
sl@0
   213
	return iLabel ? static_cast<const TDesC&>(*iLabel) : static_cast<const TDesC&>(KNullDesC);
sl@0
   214
	}
sl@0
   215
sl@0
   216
MCTToken& CFSRSADecryptor::Token() const
sl@0
   217
	{
sl@0
   218
	return iClient->Token();
sl@0
   219
	}
sl@0
   220
sl@0
   221
TUid CFSRSADecryptor::Type() const
sl@0
   222
	{
sl@0
   223
	return KPrivateDecryptorUID;
sl@0
   224
	}
sl@0
   225
sl@0
   226
TCTTokenObjectHandle CFSRSADecryptor::Handle() const
sl@0
   227
	{
sl@0
   228
	return iHandle;
sl@0
   229
	}
sl@0
   230
sl@0
   231
void CFSRSADecryptor::Decrypt(const TDesC8& aCiphertext,
sl@0
   232
			TDes8& aPlaintext, 
sl@0
   233
			TRequestStatus& aStatus
sl@0
   234
	)
sl@0
   235
	{
sl@0
   236
	iClient->Decrypt(Handle(),aCiphertext,aPlaintext, aStatus);
sl@0
   237
	}
sl@0
   238
sl@0
   239
void CFSRSADecryptor::CancelDecrypt()
sl@0
   240
	{
sl@0
   241
	iClient->CancelDecrypt();
sl@0
   242
	}
sl@0
   243
sl@0
   244
// CDHAgreement ////////////////////////////////////////////////////////////////
sl@0
   245
sl@0
   246
CDHAgreement* CDHAgreement::New(CFSKeyStoreClient* aClient)
sl@0
   247
	{
sl@0
   248
	return new CDHAgreement(aClient);
sl@0
   249
	}
sl@0
   250
sl@0
   251
CDHAgreement::CDHAgreement(CFSKeyStoreClient* aClient)
sl@0
   252
	: MCTDH(aClient->Token())
sl@0
   253
	{
sl@0
   254
	iClient = aClient;
sl@0
   255
	iHandle.iTokenHandle = aClient->Token().Handle();
sl@0
   256
	iHandle.iObjectId = 0;
sl@0
   257
	}
sl@0
   258
sl@0
   259
CDHAgreement::~CDHAgreement()
sl@0
   260
	{
sl@0
   261
	}
sl@0
   262
sl@0
   263
void CDHAgreement::Release()
sl@0
   264
	{
sl@0
   265
	MCTTokenObject::Release();
sl@0
   266
	}
sl@0
   267
sl@0
   268
const TDesC& CDHAgreement::Label() const
sl@0
   269
	{
sl@0
   270
	return iLabel ? static_cast<const TDesC&>(*iLabel) : static_cast<const TDesC&>(KNullDesC);
sl@0
   271
	}
sl@0
   272
sl@0
   273
MCTToken& CDHAgreement::Token() const
sl@0
   274
	{
sl@0
   275
	return iClient->Token();
sl@0
   276
	}
sl@0
   277
sl@0
   278
TUid CDHAgreement::Type() const
sl@0
   279
	{
sl@0
   280
	return KKeyAgreementUID;
sl@0
   281
	}
sl@0
   282
sl@0
   283
TCTTokenObjectHandle CDHAgreement::Handle() const
sl@0
   284
	{
sl@0
   285
	return iHandle;
sl@0
   286
	}
sl@0
   287
sl@0
   288
/** Returns the public key ('Big X') for the supplied set of parameters */
sl@0
   289
void CDHAgreement::PublicKey(const TInteger& aN, const TInteger& aG, 
sl@0
   290
							 CDHPublicKey*& aX, TRequestStatus& aStatus)
sl@0
   291
	{
sl@0
   292
	iClient->DHPublicKey(Handle(), aN, aG, aX, aStatus);
sl@0
   293
	}
sl@0
   294
sl@0
   295
/** Agrees a session key given the public key of the other party */
sl@0
   296
void CDHAgreement::Agree(const CDHPublicKey& iY, HBufC8*& aAgreedKey,
sl@0
   297
						 TRequestStatus& aStatus)
sl@0
   298
	{
sl@0
   299
	iClient->DHAgree(Handle(), iY, aAgreedKey, aStatus);
sl@0
   300
	}
sl@0
   301
sl@0
   302
/** Cancels either a PublicKey or Agree operation */
sl@0
   303
void CDHAgreement::CancelAgreement()
sl@0
   304
	{
sl@0
   305
	iClient->CancelDH();
sl@0
   306
	}