diff -r 000000000000 -r e35f40988205 xmlsecurityengine/xmlseccertman/inc/xmlsecmsymbiankeystore.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xmlsecurityengine/xmlseccertman/inc/xmlsecmsymbiankeystore.h Thu Dec 17 09:29:21 2009 +0200 @@ -0,0 +1,341 @@ +/* +* Copyright (c) 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: An interface to the Symbian Unified Key Store +* +*/ + +#ifndef __XMLSECCERTMAN_SYMBIANKEYSTORE_H_ +#define __XMLSECCERTMAN_SYMBIANKEYSTORE_H__ + +#include +#include +#include +#include + +class CSymbianKeyStore : public CActive + { +public: + + /** + * Create new object. + * + * @since S60 v3.2 + * @return pointer to new object + */ + IMPORT_C static CSymbianKeyStore* NewL(); + + /** + * Create new object and put it on clean stack. + * + * @since S60 v3.2 + * @return pointer to new object + */ + IMPORT_C static CSymbianKeyStore* NewLC(); + + /** + * Destructor. + */ + virtual ~CSymbianKeyStore(); + + /** + * Create Unified Key Store + * + * @since S60 v3.2 + */ + void CreateUnifiedKeyStoreL(); + + /** + * Find a key in the Unified Key Store + * + * @since S60 v3.2 + * @param aLabel The name of the key to be found + * @param aAlgo The algorithm of the key to be found + */ + IMPORT_C void FindKey(const TDesC8 &aLabel, CKeyInfoBase::EKeyAlgorithm aAlgo); + + /** + * Check if a key is found in the Unified Key Store + * + * @since S60 v3.2 + * @return KErrNone if the key is found + * @return KErrNotFound if the key is not found + */ + IMPORT_C TInt hasKey(); + + /** + * Get the size of the key stored + * + * @since S60 v3.2 + * @return TUint Size of the key + */ + IMPORT_C TUint GetKeySize(); + + /** + * Get the algorithm of the key stored + * + * @since S60 v3.2 + * @return CCTKeyInfo::EKeyAlgorithm + */ + IMPORT_C CCTKeyInfo::EKeyAlgorithm GetKeyAlgorithm(); + + /** + * Create RSA Key + * + * @since S60 v3.2 + * @param aSize Bit size of the key + * @param aKeyName Name of the key + */ + IMPORT_C void CreateRSAKey(TUint aSize, const TDesC8 &aKeyName); + + /** + * Import key + * + * @since S60 v3.2 + * @param aKeyData The key data to import, ASN.1 DER encoded PKCS#8 + * @aKeyName Name of the key + */ + IMPORT_C void ImportKey(const TDesC8 &aKeyData, const TDesC8 &aKeyName); + + /** + * Opens RSA key for signing the data + * + * @since S60 v3.2 + * @param aDataToSign The data to be signed + * @param aLen Length of the data + */ + IMPORT_C void RSASignL(const TUint8* aDataToSign, TUint aLen); + + /** + * Verify a RSA signed data + * + * @since S60 v3.2 + * @param aDataToVerify The signed data to be verified + * @param aDataLen Length of the signed data + * @param aSig A reference to the signature that signed the data + * @param aSigLen Length of the signature + */ + IMPORT_C void RSAVerifyL(const TUint8* aDataToVerify, + TUint aDataLen, + const TUint8* aSig, + TUint aSigLen); + + /** + * Verify an RSA signed data with a public key passed from a certificate + * + * @since S60 v3.2 + * @param aDataToVerify The signed data to be verified + * @param aDataLen Length of the signed data + * @param aSig A reference to the signature that signed the data + * @param aSigLen Length of the signature + * @param aSubPubKeyInfo A handle to the public key passed from a certificate + * @return ETrue The verification is succeeded + * @return EFalse The verification is failed + */ + IMPORT_C TBool RSAVerifyWithPublicKeyL(const TUint8* aDataToVerify, + TUint aDataLen, + const TUint8* aSig, + TUint aSigLen, + CSubjectPublicKeyInfo *aSubPubKeyInfo); + + /** + * Gets Signed data + * + * @since S60 v3.2 + * @param aLen sets length of signed data + */ + IMPORT_C const TUint8* GetSignedData(TUint* aLen); + + /** + * Gets verification result + * + * @since S60 v3.2 + * @return ETrue The verification was succeeded + * @return EFalse The cerification was failed + */ + IMPORT_C TBool GetVerifyResult(); + + /** + * Get the error flag + * + * @since S60 v3.2 + * @return error code + */ + IMPORT_C TInt CSymbianKeyStore::GetError(); + + /** + * Perform RSA sign operation + * + * @since S60 v3.2 + */ + void PerformRSASignOperation(); + + /** + * Perform RSA verify operation + * + * @since S60 v3.2 + */ + void PerformRSAVerifyOperationL(); + + /** + * Export public key if none present + * + * @since S60 v3.2 + */ + void ExportRSAPublicKeyL(); + +protected: + /** + * From CActive Callback function, invoked to handle responses from the server + */ + void RunL(); + + /** + * This function is called as part of the active object's Cancel(). + */ + void DoCancel(); + + /** + * Handles Leaves from RunL function. + */ + TInt RunError(TInt aError); + +private: + /** + * C++ default constructor. + */ + CSymbianKeyStore(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + /** + * To find matched key in the phase EFindingKeys + */ + void FindMatchedKey(); + + /** + * Sets iSignature buffer + */ + void GetRSASignatureL(); + + /** + * Release all resources kept in iKeys array (exept for iKey + * which is released separetly) and empty iKeys array + */ + void ResetAndDestroyKeysArray(); + +private: + /** + * State of active object. + * EUnitialized standard state + * EInitializingKeystore during initialize keystore + * EFindingKeys during finding keys + * ECreateKey during creating key + * EImportKey during importing key + * EOpenRsaKeyForSigning during preparing key for signing + * EPerformRSASignOperation during signing + * EExportPublic during exporting public key + */ + enum TState + { + EUnitialized, + EInitializingKeystore, + EFindingKeys, + ECreateKey, + EImportKey, + EOpenRSAKeyForSigning, + EPerformRSASignOperation, + EExportPublic + }; + +private: + /** + * A reference to the CUnifiedKeyStore class + */ + CUnifiedKeyStore *iKeyStore; + + /** + * Store the generated key + */ + CCTKeyInfo *iKey; + + /** + * Store the RSA Signer + */ + MRSASigner *iRSASigner; + + /** + * Store the data to be signed + */ + HBufC8* iDataToSign; + + /** + * Store the data to be verified + */ + HBufC8* iDataToVerify; + + /** + * Contain the result of the RSA Signer + */ + CRSASignature* iRSASignature; + + /** + * Store the signed signature + */ + HBufC8* iSignature; + + /** + * Contain the exported public key + */ + HBufC8* iPublicKeyData; + + /** + * An internal state + */ + TState iState; + + /** + * To store the key label to find + */ + HBufC *iKeyLabelToFind; + + /** + * Store the result of signature verification + */ + TBool iVerifyResult; + + /** + * To check if it was out of memory during previous verify operation + */ + TBool iOutOfMemoryFlag; + + /** + * Store the keys found + */ + RMPointerArray< CCTKeyInfo > iKeys; + + /** + * A reference to the File Server Client + */ + RFs iFs; + + /** + * Error flag + */ + TInt iError; + }; + +#endif // __XMLSECCERTMAN_SYMBIANKEYSTORE_H__