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