eapol/eapol_framework/wapi_symbian/include/certificate_store_db_symbian.h
changeset 17 8840d3e38314
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eapol/eapol_framework/wapi_symbian/include/certificate_store_db_symbian.h	Fri Mar 19 09:29:58 2010 +0200
@@ -0,0 +1,621 @@
+/*
+* ============================================================================
+*  Name        : ./accesssec/eapol/eapol_framework/wapi_symbian/include/certificate_store_db_symbian.h
+*  Part of     : WAPI / WAPI       *** Info from the SWAD
+*  Description : WAPI authentication
+*  Version     : %version: 38 % << Don't touch! Updated by Synergy at check-out.
+*
+*  Copyright © 2001-2009 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+* Template version: 4.2
+*/
+
+#ifndef CERTIFICATESTOREDBSYMBIAN_H
+#define CERTIFICATESTOREDBSYMBIAN_H
+
+// INCLUDES
+#include <d32dbms.h>
+#include <e32cmn.h>
+#include <etelmm.h>
+#include <EapType.h>
+#include "eap_status.h"
+#include "certificate_store_db_parameters.h"
+#include "eap_expanded_type.h"
+#include "ec_cs_types.h"
+#include "eap_array.h"
+#include "WapiCertificates.h"
+
+// CONSTANTS
+const TInt KNumBytesForLimiters = 2;
+
+struct SWapiCertEntry
+{
+	HBufC8* iReference;	
+	HBufC8* iData;
+};
+
+// FORWARD DECLARATIONS
+class abs_eap_am_tools_c;
+class eap_variable_data_c;
+class wapi_am_core_symbian_c;
+
+// CLASS DECLARATION
+/**
+* Class implements certificate store functionality.
+*/
+NONSHARABLE_CLASS ( CCertificateStoreDatabase )
+    {
+    
+    private: // CS states
+    
+        /**
+        * State defines the type of service called.
+        */ 
+        enum TCertificateStoreState
+            {
+            ECertificateStoreNotInitialized,     /* 0 */
+            ECertificateStoreInitialized,        /* 1 */
+            // ...
+            ECertificateStoreStatesNumber        /* 2 */   // keep always as last element
+            };
+
+                
+    public:  // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        * 
+        * @param aAmTools Pointer to adaptation module tools.
+        */
+        static CCertificateStoreDatabase* NewL(
+                abs_eap_am_tools_c* aAmTools );
+	
+        /**
+        * Destructor.
+        */
+        virtual ~CCertificateStoreDatabase();
+
+        
+    public:	// New, open/close/destroy functionality	
+		
+        /**
+        * Open certificate store database.
+        * 
+        * Database and tables are created.
+        * Method leaves if an error occurs.
+        */ 
+        void OpenCertificateStoreL();
+	
+        /**
+        * Close certificate DB and session.
+        */ 
+        void Close();	
+
+        /**
+        * Destroy certificate store.
+        * 
+        * @return General symbian error.
+        */ 
+	    TInt DestroyCertificateStore();
+	    
+        /**
+        * Set core partner.
+        * 
+        * This method is used to deliver pointer of core class.
+        */ 
+
+	    void SetCorePartner(wapi_am_core_symbian_c *partner);
+	    
+    public: // New 
+       
+	    /**
+	    * Function initializes the certificate store.
+	    * 
+	    * This function is completed by function call
+	    * complete_initialize_certificate_store() .
+	    */
+        void InitializeCertificateStoreL();
+
+	    /**
+	    * Function cancels all certificate_store store operations.
+	    */
+	    void CancelCertificateStoreStoreOperations();
+
+	
+    public: // New, get/set/remove data in database    
+        
+        /**
+        * Get data from CS by reference.
+        * 
+        * Memory is allocated inside the method.
+        * The caller is responsible for memory cleaning.
+        * Note that method can leave.
+        * @param aDataType Type of data (CA cert., client cert., or private key).
+        * @param aDataReference Reference used to search data.
+        * @param aOutColumnValue Returned column value. The caller is responsible
+        *                        for memory cleaning.
+        */ 
+        void GetCsDataByReferenceL( ec_cs_data_type_e aDataType,
+           	                        const TDesC8& aDataReference,
+       	                            HBufC8** aOutColumnValue );
+        
+        /**
+        * Get data from CS by int reference.
+        * 
+        * Memory is allocated inside the method.
+        * The caller is responsible for memory cleaning.
+        * Note that method can leave.
+        * @param aDataType Type of data (CA cert., client cert., or private key).
+        * @param aDataReference Reference used to search data.
+        * @param aOutColumnValue Returned column value. The caller is responsible
+        *                        for memory cleaning.
+        */ 
+        void GetCsDataByReferenceL( ec_cs_data_type_e aDataType,
+           	                        const TUint aDataReference,
+       	                            HBufC8** aOutColumnValue );
+        
+        /**
+        * Get data from CS by reference.
+        * 
+        * Memory is allocated inside the method.
+        * The caller is responsible for memory cleaning.
+        * Note that method can leave.
+        * @param aDataType Type of data to be searched in CS.
+        * @param aOutColumnValue Returned column value. The caller is responsible
+        *                        for memory cleaning.
+        */ 
+        void GetCsDataL( ec_cs_data_type_e aDataType,
+          	            HBufC8** aOutColumnValue,
+						RArray<SWapiCertEntry>& aArray,
+						TBool aGetAll);
+ 
+   
+        /**
+        * Set CS data by reference.
+        * 
+        * @param aDataType Type of data to be saved in CS.
+        * @param aColumnValue Reference to column value descriptor.
+        * @param aDataReference Reference used to search data.
+        * @param aIsNewEntry ETrue - insert new item,
+        *                    EFalse - update existing one.
+        */ 
+        void SetCsDataByReferenceL( ec_cs_data_type_e aDataType,
+        		                    const TDesC8& aColumnValue,
+        		                    const TDesC8& aDataReference,
+        		                    const TBool aIsNewEntry );
+
+        /**
+        * Set CS data by int reference.
+        * 
+        * @param aDataType Type of data to be saved in CS.
+        * @param aColumnValue Reference to column value descriptor.
+        * @param aDataReference Reference used to search data.
+        * @param aIsNewEntry ETrue - insert new item,
+        *                    EFalse - update existing one.
+        */ 
+        void SetCsDataByReferenceL( ec_cs_data_type_e aDataType,
+        		                    const TDesC8& aColumnValue,
+        		                    const TUint aDataReference,
+        		                    const TBool aIsNewEntry );
+
+
+        /**
+        * Set CS data.
+        * 
+        * @param aDataType Type of data to be saved in CS.
+        * @param aColumnValue Reference to column value descriptor.
+        * @param aIsNewEntry  ETrue - insert new item,
+        *                     EFalse - update existing one.
+        */ 
+        void SetCsDataL( ec_cs_data_type_e aDataType,
+        		         const TDesC8& aColumnValue,
+        		         const TBool aIsNewEntry );
+        
+        
+        /**
+        * Remove CS data by reference.
+        * 
+        * Method leaves if an error occurs.
+        * @param aDataType Type of data to be saved in CS.
+        * @param aColumnValue Reference to column value descriptor.
+        * @param aDataReference Reference used to search data.
+        */ 
+        void RemoveCsDataByReferenceL( ec_cs_data_type_e aDataType,
+                                       const TDesC8& aColumnValue,
+                                       const TDesC8& aDataReference );
+
+        /**
+        * Remove CS data by int reference.
+        * 
+        * Method leaves if an error occurs.
+        * @param aDataType Type of data to be saved in CS.
+        * @param aColumnValue Reference to column value descriptor.
+        * @param aDataReference Reference used to search data.
+        */ 
+        void RemoveCsDataByReferenceL( ec_cs_data_type_e aDataType,
+                                       const TDesC8& aColumnValue,
+                                       const TUint aDataReference );
+
+        /**
+        * Remove CS data by data type.
+        * 
+        * @param aDataType Type of data to be saved in CS.
+        * @param aColumnValue Reference to column value descriptor. 
+        */ 
+        void RemoveCsDataL( ec_cs_data_type_e aDataType,
+        	                const TDesC8& aColumnValue );
+        
+        /**
+        * Remove CS data by from table matching the id.
+        * 
+        * @param aTableName The table to be modified
+        * @param aReferenceName The reference column 
+        * @param aRefId The reference id 
+        */ 
+        void RemoveDataFromTableL( const TDesC& aTableName, const TDesC& aReferenceName, TUint aRefId  );
+        
+        /**
+        * Remove specific rows from all the AP specific tables.
+        * 
+        * @param aId The reference id (service table id )
+        */
+        void DeleteAPSpecificDataL( const TInt aId );
+        
+    public: // New, boolean conditions
+    
+	    /**
+        * Check if certificate store was initialized by common side.
+        * 
+        * @return ETrue - initilized, EFalse - not initialized.
+        */ 
+	    TBool IsInitializedL();
+	    		
+
+    public: // Access
+
+        /**
+        * Return reference to certificate store DB.
+        */ 
+        RDbNamedDatabase& GetCertificateStoreDb();
+    
+    public: // WAPI certificate label get/set functionality
+    		
+        /**
+        *  Set WAPI CA certificate identity KCsWapiCertLabelTable table, matching the id
+        */ 
+        void SetCACertL( const TInt aId, const TBuf8 <KMaxIdentityLength> aSelectedCert );
+        
+        /**
+        * Set WAPI user certificate identity to the KCsWapiCertLabelTable table, matching the id
+        */ 
+        void SetUserCertL( const TInt aId, const TBuf8 <KMaxIdentityLength> aSelectedCert);
+        
+        /**
+        * Set WAPI certificate identity to the KCsWapiCertLabelTable table for the
+        * given parameter, matching the id 
+        */ 
+        void SetCertL ( const TInt aId, const TBuf8<KMaxIdentityLength> aSelectedCert, 
+                 const TDesC& aParameterName );
+        
+        /**
+        * Get certificate labels set to the KCsWapiCertLabelTable table matching the id
+        */ 
+        void GetConfigurationL( const TInt aId, TDes& aCACert, TDes& aUserCert );
+        
+        /**
+        * Reads and decodes the label data from the given view
+        */ 
+        void ReadLabelTableL( RDbView& aView, TDes& aCert );
+        
+       
+        
+                                          
+    private: // New, database, tables
+	
+        /**
+        * Create CS database and all necessary tables.
+        * 
+        * Note that method can leave.
+        */
+	    void CreateCertificateStoreL();
+	    
+	    /**
+	    * Create CS database.
+	    * 
+	    * Note that method can leave.
+	    */ 
+	    void CreateDatabaseL();
+	    
+	    /**
+	    * Create table for general settings.
+	    * 
+	    * Create table for general settings, such as
+	    * CS password, reference counter, master key,
+	    * initialization flag, CS password max. validity time,
+	    * CS password last identity time, CS WAPI session max
+	    * validity time, CS WAPI session last full auth. time.
+	    * Note that method can leave.
+	    */ 
+	    void CreateGeneralSettingsTableL();	    	    
+	    
+	    /**
+	    * Create table that stores list of client ASU IDs.
+	    * 
+	    * Note that method can leave.
+	    */ 	    
+	    void CreateClientAsuIdListTableL();
+	    
+	    /**
+	    * Create table that stores list of CA ASU IDs.
+	    * 
+	    * Note that method can leave.
+	    */ 
+	    void CreateCaAsuIdListTableL();
+	    
+	    /*
+	    * Create table that stores list of client certificate data.
+	    * 
+	    * Note that method can leave.
+	    */ 
+	    void CreateClientCertificateTableL();
+	    
+	    /**
+	    * Create table that stores list of CA certificate data.
+	    * 
+	    * Note that method can leave.
+	    */ 
+	    void CreateCaCertificateTableL();
+	    
+	    /**
+	    * Create table that stores list of private key data.
+	    * 
+	    * Note that method can leave.
+	    */ 
+	    void CreatePrivateKeyTableL();
+	    
+	    /**
+	    * Create table that stores the WAPI certificate labels
+	    */ 
+	    void CreateWapiCertLabeltableL();
+	    
+	    /**
+	     * Create table that stores the WAPI certificate files
+	    */ 
+        void CreateWapiCertFiletableL();
+
+    private: // Operations with RDbView rowset  
+
+        /**
+	    * Get long binary data.
+	    * 
+	    * Read long binary data using stream from DB view.
+	    * Note that the caller is responsible for memory cleaning.
+	    * Note that method can leave.
+	    * @param aView Reference to rowsets from an SQL query
+	    * @param aOutColumnValue Returned column value. Memory is allocated
+	    *                        inside the method.
+	    */ 
+	    void GetLongBinaryDataL( RDbView& aView, HBufC8** aOutColumnValue );
+	
+        /**
+	    * Get binary data.
+	    * 
+	    * Read binary data from DB view.
+	    * Note that the caller is responsible for memory cleaning.
+	    * Note that method can leave.
+	    * @param aView Reference to rowsets from an SQL query.
+	    * @param aOutColumnValue Returned column value. Memory is allocated
+	    *                        inside the method.
+	    */ 
+	    void GetBinaryDataL( RDbView& aView, HBufC8** aOutColumnValue );
+	
+        /**
+	    * Get binary data.
+	    * 
+	    * Read binary data from DB view.
+	    * Note that the caller is responsible for memory cleaning.
+	    * Note that method can leave.
+	    * @param aView Reference to rowsets from an SQL query.
+	    * @param aArray Returned column values. Memory is allocated
+	    *                        inside the method.
+	    */ 
+		void GetTableDataL( RDbView& aView, RArray<SWapiCertEntry>& aArray );
+								
+        /**
+        * Insert data and reference to view.
+        * 
+        * Note that method can leave.
+        * @param aView Reference to rowset from SQL query.
+        * @param aReferenceColumnName Column name for reference.
+        * @param aDataColumnName Column name for data.
+        * @param aDataReference16 Reference to descriptor containing
+        *                         data reference value in unicode.
+        * @param aColumnValue Reference to descriptor containing column value.
+        */ 
+        void InsertDataAndReferenceL( RDbView& aView,
+                                      const TDesC& aReferenceColumnName,
+                                      const TDesC& aDataColumnName,
+                                      const TDesC16& aDataReference16,
+                                      const TDesC8& aColumnValue );
+        
+        /**
+        * Insert data and reference to view.
+        * 
+        * Note that method can leave.
+        * @param aView Reference to rowset from SQL query.
+        * @param aReferenceColumnName Column name for reference.
+        * @param aDataColumnName Column name for data.
+        * @param aDataRef Reference to the row to be modified
+        * @param aColumnValue Reference to descriptor containing column value.
+        */
+        void InsertDataAndReferenceL( RDbView& aView,
+                                      const TDesC& aReferenceColumnName,
+                                      const TDesC& aDataColumnName,
+                                      const TUint aDataRef,
+                                      const TDesC8& aColumnValue );
+        
+        /**
+        * Insert data and reference to view.
+        * 
+        * Note that method can leave.
+        * @param aView Reference to rowset from SQL query.
+        * @param aReferenceColumnName Column name for reference.
+        * @param aDataColumnName Column name for data.
+        * @param aDataRef Reference to the row to be modified
+        * @param aColumnValue Reference to descriptor containing column value.
+        */
+        void InsertDataAndReferenceL( RDbView& aView,
+                                      const TDesC& aReferenceColumnName,
+                                      const TDesC& aDataColumnName,
+                                      const TUint aDataRef,
+                                      const TDesC& aColumnValue );
+
+        /**
+        * Insert data value to view.
+        * 
+        * Note that method can leave.
+        * @param aView Reference to rowset from SQL query.
+        * @param aDataColumnName Column name for data.
+        * @param aColumnValue Reference to descriptor containing column value.
+        */ 
+		void InsertDataL( RDbView& aView,
+				          const TDesC& aDataColumnName,
+				          const TDesC8& aColumnValue );		
+
+        /**
+        * Update view with specified column value.
+        * 
+        * There should be only one-row-one-column in view.
+        * Note that method can leave.
+        * @param aView Reference to rowset from SQL query.
+        * @param aColumnValue Reference to descriptor containg column value.
+        */ 
+        void UpdateColOneRowOneL( RDbView& aView,
+        		                  const TDesC8& aColumnValue );
+        
+
+    private: // Other
+
+        /**
+        * Convert from utf8 to unicode.
+        * 
+        * Note that the caller is responsible for memory cleaning.
+        * Note that method can leave.
+        * @param aInBuf Const reference to the input buffer.
+        * @param aOutBuf Returned converted buffer, memory is allocated inside
+        *                the method. 
+        */
+        void ConvertFromBuf8ToBuf16LC( const TDesC8& aInBuf8, HBufC16** aOutBuf16 );
+
+        /**
+        * Convert from unicode to utf8.
+        * 
+        * Note that the caller is responsible for memory cleaning.
+        * Note that method can leave.
+        * @param aInBuf Const reference to the input buffer.
+        * @param aOutBuf Returned converted buffer, memory is allocated inside
+        *                the method. 
+        */
+        void ConvertFromBuf16ToBuf8LC( const TDesC16& aInBuf16, HBufC8** aOutBuf8 );
+
+	    /**
+        * Writes certificate store state in CS database.
+        * 
+	    * If CS object is deleted, the state can be recovered
+	    * from database.
+	    * Note that method can leave.
+	    * @param aState Parameter defines CS state.
+	    */ 
+        void WriteCertificateStoreStateL( TCertificateStoreState aState );	    
+    
+	    /**
+	    * Get database names.
+	    *  
+	    * According to data type, return table, reference and data
+	    * column names.
+	    * Note that method can leave.
+	    * @param aDataType Certificate store data types.
+	    * @param aTableName Table name.
+	    * @param aReferenceColumnName Column name of reference.
+	    * @param aDataColumnName Column name of data.
+	    */ 
+	    void GetDbNamesFromDataTypeL( ec_cs_data_type_e aDataType,
+	     		                      TDes& aTableName,
+	     		                      TDes& aReferenceColumnName,
+	     		                      TDes& aDataColumnName );
+	     
+	     /**
+	     * Get database names.
+	     *  
+	     * According to data type, return table and data
+	     * column names.
+	     * Note that method can leave.
+	     * @param aDataType Certificate store data types.
+	     * @param aTableName Table name.
+	     * @param aDataColumnName Column name of data.
+	     */ 
+	     void GetDbNamesFromDataTypeL( ec_cs_data_type_e aDataType,
+	      		                       TDes& aTableName,
+	                                   TDes& aDataColumnName );
+
+	      
+    private: // Private constructors
+
+        /**
+        * C++ default constructor.
+        */
+        CCertificateStoreDatabase( abs_eap_am_tools_c* aAmTools );
+        
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+	
+        
+    private: // Data
+	
+        /**
+        * State defines the type of the requested service.
+        */ 
+	    TCertificateStoreState iState;	
+	
+        /**
+        * Generic database implementation.
+        */ 
+	    RDbNamedDatabase iCsDb;
+
+        /**
+        * Represents a session with the DBMS server.
+        */ 
+	    RDbs iCsDbSession;	
+	
+        /**
+        * ETrue - CS created, EFalse - not.
+        */ 
+	    TBool iCsDbCreated;
+	    
+        /**
+        * ETrue - CS session opened, EFalse - not.
+        */ 
+	    TBool iCsSessionOpened;
+	
+        /**
+        * Adaptation module tools.
+        */ 
+	    abs_eap_am_tools_c* iAmTools;
+	    
+		// pointer to core class, to provide method interface	   
+        wapi_am_core_symbian_c *iPartner;
+		
+    }; // NONSHARABLE_CLASS ( CCertificateStoreDatabase )
+
+#endif // CERTIFICATESTOREDBSYMBIAN_H
+
+// End of file.