diff -r 000000000000 -r 164170e6151a wim/WimServer/inc/WimCertUtil.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wim/WimServer/inc/WimCertUtil.h Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,405 @@ +/* +* Copyright (c) 2004-2009 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: Interface which handles certificate related operations +* +*/ + + + +#ifndef WIMCERTUTIL_H +#define WIMCERTUTIL_H + + +//INCLUDES +#include "WimClsv.h" +#include "Wimi.h" +#include + + +// FORWARD DECLARATIONS +class CWimCertInfo; +class CCTCertInfo; +class CWimUtilityFuncs; + +// CONSTANTS +typedef HBufC8* PHBufC8; +typedef TPtr8* PTPtr8; + + +// CLASS DECLARATION +/** +* Utility class that handles certificate related operations. + +* @since Series60 3.0 +*/ +class CWimCertUtil : public CActive + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aToken -Reference to current token + */ + static CWimCertUtil* NewL( MCTToken& aToken ); + + /** + * Destructor + */ + virtual ~CWimCertUtil(); + + public: // New functions + + /** + * Restores certificates from WIM cache. If Restore cannot find + * any certificate, it will return KErrNotFound to caller. + * @param aArray -Array where new certificates are + * inserted. Caller is responsible + * to deallocate CWimCertInfo -objects + * by calling ResetAndDestroy.(IN/OUT) + * @param aStatus -Status from caller. + */ + void Restore( RPointerArray& aArray, + TRequestStatus& aStatus ); + + + /** + * Cancels outgoing Restore operation. Sets an internal flag to true. + * After necessary cleanup, caller is signalled with KErrCancel + * -error code. + */ + void CancelRestore(); + + /** + * Retrieves the actual certificate. In case of other cert than + * Url cert the binary encoded certificate is written into the + * aEncodedCert parameter. In case of Url cert the data is + * the actual url. + * @param aIndex. Used to point iCertRefLst and iCertInfoArr + * -arrays for correct certificate. + * @param aEncodedCert. A buffer to put the certificate in. + * @param aStatus. A request status that is completed when the + * operation has finished.(IN/OUT) + */ + void RetrieveCertByIndexL( const TInt aIndex, + TDes8& aEncodedCert, + TRequestStatus& aStatus ); + + private: + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + /** + * C++ default constructor. + * @param aToken -Reference to current token + */ + CWimCertUtil( MCTToken& aToken ); + + /** + * Get count of certificates in WIM + * @param aRef WIM card reference pointer. + * @param aCertCount Count of certificates in WIM card pointed by aRef + * @param aUsage Certificate usage. + * @return Status returned by WIMI. See in WimClsv.h. + */ + WIMI_STAT GetCertificateCountByWIM( WIMI_Ref_t* aRef, + TUint8& aCertCount, + TUint8 aUsage ) const; + /** + * Get certificate extra data + * @param aWimRef WIM card reference pointer. + * @param aUsage Certificate usage. + * @param aKeyHash Key hash of certificate + * @param aCertExtrasInfo Returned extra data + * @return Status returned by WIMI. + */ + WIMI_STAT GetExtrasFromWimRefL( + WIMI_Ref_t* aWimRef, + TInt8 aUsage, + TDesC8& aKeyHash, + TCertExtrasInfo& aCertExtrasInfo ) const; + + /** + * Allocates memory for the array which is filled by server. + * @param aWimCertInfoArr -Array to be initialized + * @param aCount -Count of elements in the array + */ + void AllocWimCertInfoL( TWimCertInfo* aWimCertInfoArr, TInt aCount ); + + /** + * Deallocates memory from the array. + */ + void DeallocWimCertInfo(); + + /** + * Allocates memory for a struct which is filled by server. + */ + void AllocMemoryForCertDetailsL(); + + /** + * Creates new certificate objects which can be returned to the caller. + */ + void CreateNewCertObjectsL(); + + /** + * Creates new wim certificate objects. + */ + void CreateNewWimCertObjectL(); + + /** + * Gets trusted usages. + */ + void GetTrustedUsagesL(); + + /** + * Completion of trusted usages. + */ + void TrustedUsagesDoneL(); + + /** + * Sets own iStatus to KRequestPending, and signals it + * with User::RequestComplete() -request. This gives chance + * to activescheduler to run other active objects. After a quick + * visit in activescheduler, signal returns to RunL() and starts next + * phase of operation. + */ + void SignalOwnStatusAndComplete(); + + /** + * Copies data to caller's buffer by using pointer. + */ + void CopyRetrievedCertData(); + + /** + * DeAllocates memory from member variables, which are used + * when communicating with WIM. + */ + void DeallocCertHBufs(); + + /** + * If user has cancelled initialization process, dealloc references + * from loaded certs. + */ + void DeallocReferences(); + + /** + * Returns certificate format according to received index. + * @param aIndex -index of the certificate to be returned. + * @return TCertificateFormat -format of the certificate + */ + TCertificateFormat GetCertFormatByIndex( TInt aIndex ); + + /** + * Copy certificate extra data + * @param aCert Reference to certificate + * @param aCertExtrasInfo Returned extra data + */ + void CopyCertExtrasInfoL( WIMI_Ref_t* aCert, + TCertExtrasInfo& aCertExtrasInfo ) const; + + /** + * Return count of certificates in WIM + * @param aType Certificate type + * @return Count of certificates + */ + TUint8 CertCount( TWimEntryType aType ); + + /** + * Get certificate reference list + * @param aCertAddrLst + * @param aCertInfoArr + * @param aCertEntryType + */ + void CertRefLstL( TCertificateAddressList aCertAddrLst, + TWimCertInfo* aCertInfoArr, + TWimEntryType aCertEntryType ); + + /** + * Get certificate extra data + * @param aKeyId + * @param aCertExtrasInfo + * @param aUsage + * @param aStatus + */ + void GetCertExtrasL( const TPtr8* aKeyId, + TCertExtrasInfo& aCertExtrasInfo, + TUint aUsage, + TRequestStatus& aStatus ); + + /** + * Get certificate details + * @param aCertAddr + * @param aWimCertDetails + */ + void CertDetailsL( const TCertificateAddress aCertAddr, + TWimCertDetails& aWimCertDetails ); + + /** + * + * @param aTmpWimRef + * @param aUsage + * @param aCertNum + * @param aCertRefLst + * @param aCertInfoLst + * @return Error code returned by WIMI + */ + WIMI_STAT GetCertificateFromWimRefL( WIMI_Ref_t* aTmpWimRef, + TInt8 aUsage, + TUint8& aCertNum, + TUint32* aCertRefLst, + TWimCertInfo* aCertInfoLst ); + + /** + * Copy certificate info + * @param aCertInfo + * @param aCert + */ + void CopyCertificateInfo( TWimCertInfo& aCertInfo, + WIMI_Ref_t* aCert ); + + private: //from CActive + + /** + * Different phases are handled here. + */ + void RunL(); + + /** + * Cancellation function + * Deallocates member variables and completes client status with + * KErrCancel error code. + */ + void DoCancel(); + + /** + * The active scheduler calls this function if this active + * object's RunL() function leaves. + * Handles necessary cleanup and completes request with + * received error code. + * @param aError -The error code which caused this function call. + * @return TInt -Error code to activescheduler, is always KErrNone. + */ + TInt RunError( TInt aError ); + + private: + + /** + * Seven different phases, which are used to + * Read certificates from WIM cache, create new certificate objects and + * retrieve certificate + */ + enum TPhase + { + EListCertsFromWim, + ECreateNewCertObjects, + EGetTrustedUsages, + ECertObjectsDone, + ETrustedUsagesDone, + ERetrieveCertificate, + ERetrievingCompleted + }; + + //Client status is stored here while operation + //on the server side is done. + TRequestStatus* iClientStatus; + //Array which is used to contain new certificate objects. + //Not owned. Caller is responsible to destroy array. + RPointerArray* iArray; + //Details of the certificate. Owned. + TWimCertDetails iWimCertDetails; + //Reference to current token. Needed in CCTCertInfo creation. + MCTToken& iToken; + //Typedefs for the reference to certificate. Owned. + TCertificateAddressList iCertRefLst; + // Certificate information structure. Owned. + TWimCertInfo* iCertInfoArr; + //Used to handle different phases. + TPhase iPhase; + //Index to point which certificate we want to be retrieved + TInt iCertRetrieveIndex; + //Used to inform the size of the array, needed in array construction/ + //destruction. + TInt iArraySize; + //The count of certificates + TUint8 iCertCount; + //Pointer to HBufC8*. This is used as an array when listing every + //certificate from WIM to an array during startup. Owned. + PHBufC8* iLabel; + //Pointer to HBufC8*. This is used as an array when listing every + //certificate from WIM to an array during startup. Owned. + PHBufC8* iKeyId; + //Pointer to HBufC8*. This is used as an array when listing every + //certificate from WIM to an array during startup. Owned. + PHBufC8* iCAId; + //Pointer to HBufC8*. This is used as an array when listing every + //certificate from WIM to an array during startup. Owned. + PHBufC8* iIssuerHash; + //Pointer to iLabel. Also used as an array. Owned. + PTPtr8* iLabelPtr; + //Pointer to iKeyId. Also used as an array. Owned. + PTPtr8* iKeyIdPtr; + //Pointer to iCAId. Also used as an array. Owned. + PTPtr8* iCAIdPtr; + //Pointer to iIssuerHash. Also used as an array. Owned. + PTPtr8* iIssuerHashPtr; + //Modifiable 8-bit descriptor which points + //to caller's descriptor. We copy retrieved certificate + //data to this descriptor. Owned. + TDes8* iEncodedCert; + //Buffer which is used to contain certificate data. Owned. + HBufC8* iCertHBufOne; + //Pointer to iCertHBufOne. Owned. + TPtr8* iCertHBufOnePtr; + //Buffer which is used to contain certificate data. Owned. + HBufC8* iCertHBufTwo; + //Pointer to iCertHBufTwo. Owned. + TPtr8* iCertHBufTwoPtr; + //Buffer which is used to contain certificate data. Owned. + HBufC8* iCertHBufThree; + //Pointer to iCertHBufThree. Owned. + TPtr8* iCertHBufThreePtr; + //Buffer which is used to contain certificate data. Owned. + HBufC8* iCertHBufFour; + //Pointer to iCertHBufFour. Owned. + TPtr8* iCertHBufFourPtr; + //ActiveSchedulerWaiter for certificate extra information + //fetching. + CActiveSchedulerWait iActiveSchedulerWait; + //Pointer for trusted usage buffer + HBufC* iTrustedUsages; + //Pointer to trusted usage buffer pointer + TPtr* iTrustedUsagesPtr; + //Index pointing to certificate elements + TUint8 iIndex; + //Pointer to one certificate info, owned + CCTCertInfo* iCert; + //Pointer to one WIM specific certificate info, owned + CWimCertInfo* iCertInfo; + //An array of trusted usage oids + RArray* iOids; + //Package structure for certificate extra info + TCertExtrasInfo iCertExtrasInfo; + //Pointer for key identifier buffer + HBufC8* iKeyIdBuf; + //Used to point right keyId when retrieving extra data + TPtr8* iKeyIdPointer; + //Pointer to utility functions. Owned. + CWimUtilityFuncs* iWimUtilFuncs; + }; + +#endif //WIMCERTUTIL_H + +// End of File