cryptoservices/certificateandkeymgmt/certstore/unifiedkeystore.cpp
changeset 8 35751d3474b7
parent 0 2c201484c85f
child 15 da2ae96f639b
equal deleted inserted replaced
2:675a964f4eb5 8:35751d3474b7
    15 *
    15 *
    16 */
    16 */
    17 
    17 
    18 
    18 
    19 #include "unifiedkeystore.h"
    19 #include "unifiedkeystore.h"
    20 #include <ecom.h>
    20 #include <ecom/ecom.h>
    21 #include <random.h>
    21 #include <random.h>
    22 #include <pbedata.h>
    22 #include <pbedata.h>
    23 #include <asnpkcs.h>
    23 #include <asnpkcs.h>
       
    24 #include "mctcertappinterface.h"
       
    25 #include <mctkeystoreuids.h>
    24 
    26 
    25 _LIT(KUnifiedKeyStore, "UnifiedKeyStore");
    27 _LIT(KUnifiedKeyStore, "UnifiedKeyStore");
    26 
    28 
    27 /////////////////////////////////////////////////////////////////////////////////////
    29 /////////////////////////////////////////////////////////////////////////////////////
    28 //CUnifiedKeyStore
    30 //CUnifiedKeyStore
   588 			}
   590 			}
   589 		}
   591 		}
   590 	__ASSERT_ALWAYS(result != NULL, User::Panic(KUnifiedKeyStore, EArrayAccessOutOfBounds));
   592 	__ASSERT_ALWAYS(result != NULL, User::Panic(KUnifiedKeyStore, EArrayAccessOutOfBounds));
   591 	return *result;
   593 	return *result;
   592 	}
   594 	}
       
   595 
       
   596 #ifdef SYMBIAN_AUTH_SERVER
       
   597 	
       
   598 EXPORT_C void CUnifiedKeyStore::CreateKey(	TInt aKeyStoreIndex, TKeyUsagePKCS15 aUsage,TUint aSize, 
       
   599 								const TDesC& aLabel, CCTKeyInfo::EKeyAlgorithm aAlgorithm, 
       
   600 								TInt aAccessType, TTime aStartDate, TTime aEndDate, 
       
   601 								const TDesC& aAuthenticationString, TInt aFreshness,
       
   602 								CCTKeyInfo*& aKeyInfoOut, TRequestStatus& aStatus)
       
   603 		{
       
   604 		
       
   605 		StartAsyncOperation(ECreateKey, aStatus);
       
   606 		TRAPD(err, PrepareToCreateKeyL(aKeyStoreIndex, aUsage, aSize, aLabel, aAlgorithm, aAccessType,
       
   607 									   aStartDate, aEndDate, aStatus));
       
   608 		if (KErrNone != err)
       
   609 			{
       
   610 			Complete(err);
       
   611 			return;
       
   612 			}
       
   613 		
       
   614 		iKeyInfoOut = &aKeyInfoOut;
       
   615 		aKeyInfoOut = NULL;
       
   616 		iKeyStoreManager->CreateKey(aAuthenticationString, aFreshness, iKeyInfo, iStatus);
       
   617 		SetActive();
       
   618 		
       
   619 		}
       
   620 
       
   621 
       
   622 EXPORT_C void CUnifiedKeyStore::ImportKey(	TInt aKeyStoreIndex, const TDesC8& aKeyData,
       
   623 								TKeyUsagePKCS15 aUsage, const TDesC& aLabel, 
       
   624 								TInt aAccessType, TTime aStartDate, TTime aEndDate, 
       
   625 								const TDesC& aAuthenticationString, TInt aFreshness,
       
   626 								CCTKeyInfo*& aKeyInfoOut, TRequestStatus& aStatus)
       
   627 		{
       
   628 		TBool isEncrypted = TASN1DecPKCS8::IsEncryptedPKCS8Data(aKeyData);
       
   629 		StartAsyncOperation(isEncrypted ? EImportKeyEncrypted : EImportKey, aStatus);
       
   630 
       
   631 		ASSERT(!iKeyData);
       
   632 		iKeyData = aKeyData.Alloc();
       
   633 		if (!iKeyData)	//	OOM or some other catastrophe
       
   634 			{
       
   635 			Complete(KErrNoMemory);
       
   636 			return;
       
   637 			}
       
   638 		
       
   639 		TRAPD(err, PrepareToCreateKeyL(aKeyStoreIndex, aUsage, 0, aLabel, CCTKeyInfo::EInvalidAlgorithm, aAccessType,
       
   640 									   aStartDate, aEndDate, aStatus));
       
   641 		if (KErrNone != err)
       
   642 			{
       
   643 			Complete(err);
       
   644 			return;
       
   645 			}
       
   646 
       
   647 		iKeyInfoOut = &aKeyInfoOut;
       
   648 		aKeyInfoOut = NULL;
       
   649 
       
   650 		if (isEncrypted)
       
   651 			{
       
   652 			iKeyStoreManager->ImportEncryptedKey(*iKeyData, aAuthenticationString, aFreshness, iKeyInfo, iStatus);
       
   653 			}
       
   654 		else
       
   655 			{
       
   656 			iKeyStoreManager->ImportKey(*iKeyData, aAuthenticationString, aFreshness, iKeyInfo, iStatus);
       
   657 			}
       
   658 		SetActive();
       
   659 		}
       
   660 
       
   661 EXPORT_C void CUnifiedKeyStore::SetAuthenticationPolicy(	const TCTTokenObjectHandle aHandle, 
       
   662 															const TDesC& aAuthenticationString,
       
   663 															TInt aFreshness,					
       
   664 															TRequestStatus& aStatus)
       
   665 	{
       
   666 	StartAsyncOperation(ESetAuthenticationPolicy, aStatus);
       
   667 		
       
   668 	ASSERT(!iKeyStoreManager);	
       
   669 	iKeyStoreManager = FindKeyStoreManager(aHandle);
       
   670 	if (!iKeyStoreManager)
       
   671 		{
       
   672 		Complete(KErrNotFound);
       
   673 		return;
       
   674 		} 
       
   675 		
       
   676 	iKeyStoreManager->SetAuthenticationPolicy(aHandle, aAuthenticationString, aFreshness, iStatus);
       
   677 	SetActive();
       
   678 		
       
   679 	}
       
   680 
       
   681 EXPORT_C void CUnifiedKeyStore::GetAuthenticationPolicy(	const TCTTokenObjectHandle aHandle, 
       
   682 															HBufC*& aAuthenticationString,
       
   683 															TInt& aFreshness,					
       
   684 															TRequestStatus& aStatus)
       
   685 	{
       
   686 	StartAsyncOperation(EGetAuthenticationPolicy, aStatus);
       
   687 		
       
   688 	ASSERT(!iKeyStoreManager);	
       
   689 	iKeyStoreManager = FindKeyStoreManager(aHandle);
       
   690 	if (!iKeyStoreManager)
       
   691 		{
       
   692 		Complete(KErrNotFound);
       
   693 		return;
       
   694 		} 
       
   695 		
       
   696 	iKeyStoreManager->GetAuthenticationPolicy(aHandle, aAuthenticationString, aFreshness, iStatus);
       
   697 	SetActive();
       
   698 		
       
   699 	}
       
   700 
       
   701 #endif // SYMBIAN_AUTH_SERVER
   593 
   702 
   594 CUnifiedKeyStore::CUnifiedKeyStore(RFs& aFs)
   703 CUnifiedKeyStore::CUnifiedKeyStore(RFs& aFs)
   595 	:	CActive(EPriorityNormal), iFs(aFs), iState(EIdle)
   704 	:	CActive(EPriorityNormal), iFs(aFs), iState(EIdle)
   596 {//	Currently defaults to always try for key store manager interface
   705 {//	Currently defaults to always try for key store manager interface
   597 //	This may change (add parameter to NewL for required interface)
   706 //	This may change (add parameter to NewL for required interface)
   896 	    case EOpen:
  1005 	    case EOpen:
   897 		case EExportPublic:
  1006 		case EExportPublic:
   898 	    case EDeleteKey:
  1007 	    case EDeleteKey:
   899 	    case ESetUsePolicy:
  1008 	    case ESetUsePolicy:
   900 	    case ESetManagementPolicy:
  1009 	    case ESetManagementPolicy:
       
  1010 	    case EGetAuthenticationPolicy:
       
  1011 	    case ESetAuthenticationPolicy:
   901 			Complete(KErrNone);
  1012 			Complete(KErrNone);
   902 			break;
  1013 			break;
   903 		default:
  1014 		default:
   904 			User::Panic(KUnifiedKeyStore, EUnrecognisedState);
  1015 			User::Panic(KUnifiedKeyStore, EUnrecognisedState);
   905 			break;
  1016 			break;
  1117 	{
  1228 	{
  1118 		iKeyStore->Release();
  1229 		iKeyStore->Release();
  1119 		iKeyStore = NULL;
  1230 		iKeyStore = NULL;
  1120 	}
  1231 	}
  1121 }
  1232 }
       
  1233