--- /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.