xmlsecurityengine/xmlseccertman/inc/xmlsecmsymbiankeystore.h
changeset 0 e35f40988205
child 8 e65204f75c47
--- /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 <e32base.h>
+#include <unifiedkeystore.h>
+#include <e32std.h>
+#include <signed.h>
+
+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__