crypto/weakcrypto/inc/pbedata.h
changeset 8 35751d3474b7
parent 0 2c201484c85f
--- a/crypto/weakcrypto/inc/pbedata.h	Tue Jul 21 01:04:32 2009 +0100
+++ b/crypto/weakcrypto/inc/pbedata.h	Thu Sep 10 14:01:51 2009 +0300
@@ -1,499 +1,484 @@
-/*
-* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "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: 
-* ** IMPORTANT ** PublishedPartner API's in this file are published to 3rd party developers via the 
-* Symbian website. Changes to these API's should be treated as PublishedAll API changes and the Security TA should be consulted.
-*
-*/
-
-
-
-
-/**
- @file
- @publishedPartner
- @released
-*/
-
-#ifndef __PBEDATA_H__
-#define __PBEDATA_H__
-
-#include <s32strm.h>
-#include <pbe.h>
-
-/**
- * Contains the Password Based Encryption parameters.
- * An object of this class can be input for CPBEncryptElement or CPBEncryptSet objects.
- *
- * @since v7.0s
- */
-class CPBEncryptParms : public CBase
-	{
-public:
-	enum TKdf
-	/**
-		Key derivation function.
-		This does not affect the authentication key,
-		which always uses PKCS#5.
-	 */
-		{
-		EKdfPkcs5,
-		EKdfPkcs12
-		};
-	
-	/**
-	 * Creates a new CPBEncryptParms object.
-	 *
-	 * @param aCipher		The cipher to use
-	 * @param aSalt			The salt
-	 * @param aIV			The Initialization Vector
-	 * @param aIterations	The number of iterations of the PBE algorithm
-	 * @return				A pointer to the new CPBEncryptParms object
-	 */
-	IMPORT_C static CPBEncryptParms* NewL(TPBECipher aCipher,
-		const TDesC8& aSalt, const TDesC8& aIV, TUint aIterations);
-
-	/**
-	 * Creates a new CPBEncryptParms object and puts a pointer to it onto the cleanup stack.
-	 *
-	 * @param aCipher		The cipher to use
-	 * @param aSalt			The salt
-	 * @param aIV			The Initialization Vector
-	 * @param aIterations	The number of iterations of the PBE algorithm
-	 * @return				A pointer to the new CPBEncryptParms object
-	 */
-	IMPORT_C static CPBEncryptParms* NewLC(TPBECipher aCipher,
-		const TDesC8& aSalt, const TDesC8& aIV, TUint aIterations);
-
-	/**
-	 * Creates a new CPBEncryptParms object from an existing object.
-	 *
-	 * @param aParms		The existing encryption parameters object
-	 * @return				A pointer to the new CPBEncryptParms object
-	 */
-	IMPORT_C static CPBEncryptParms* NewL(const CPBEncryptParms& aParms);
-
-	/**
-	 * Creates a new CPBEncryptParms object from an existing object
-	 * and puts a pointer to it onto the cleanup stack.
-	 *
-	 * @param aParms		The existing encryption parameters object
-	 * @return				A pointer to the new CPBEncryptParms object
-	 */
-	IMPORT_C static CPBEncryptParms* NewLC(const CPBEncryptParms& aParms);
-
-	/**
-	 * Internalizes encryption parameter data from a read stream.
-	 *
-	 * @param aStream	The read stream to be internalized
-	 * @return			A pointer to the new CPBEncryptParms object
-	 * 
-	 */
-	IMPORT_C static CPBEncryptParms* NewL(RReadStream& aStream);
-
-	/**
-	 * Internalizes encryption parameter data from a read stream, and 
-	 * puts a pointer to the new object onto the cleanup stack.
-	 *
-	 * @param aStream	The read stream to be internalized
-	 * @return			A pointer to the new CPBEncryptParms object
-	 */
-	IMPORT_C static CPBEncryptParms* NewLC(RReadStream& aStream);
-
-	/**
-	 * Gets the PBE cipher
-	 *
-	 * @return	The cipher to use
-	 */
-	IMPORT_C TPBECipher Cipher() const;
-	/**
-		Gets the key derivation function (KDF.)
-		
-		@return The key derivation function (KDF) which
-			transforms the password into an encryption key.
-	 */
-	IMPORT_C TKdf Kdf() const;
-
-	/**
-	 * Gets the PBE salt
-	 *
-	 * @return	The salt
-	 */
-	IMPORT_C TPtrC8 Salt() const;
-
-	/**
-	 * Gets the number of iterations for the PKCS#5 algorithm.
-	 *
-	 * @return	The number of iterations
-	 */
-	IMPORT_C TInt Iterations() const;
-
-	/**
-	 * Gets the PBE Initialization Vector
-	 *
-	 * @return	The IV
-	 */
-	IMPORT_C TPtrC8 IV() const;
-
-	IMPORT_C void SetIV(const TDesC8& aNewIv);
-
-	/**
-	 * Externalizes the encryption parameters into a write stream.
-	 *
-	 * @param aStream	The stream to write to
-	 */
-	IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
-	IMPORT_C static CPBEncryptParms* NewL();
-	IMPORT_C static CPBEncryptParms* NewLC();
-	
-	IMPORT_C void SetCipher(TPBECipher aCipher);
-
-    /**
-     * Replace the current cipher.  This function resizes the
-     * IV and replaces its existing contents.
-     *	
-     * @param aCipher	New cipher.
-     * @leave			System wide error code.
-     */
-  	inline void SetCipherL(TPBECipher aCipher)
-  		{
-  		SetCipher(aCipher);
-  		}
-
-	IMPORT_C void SetKdf(TKdf aKdf);
-	IMPORT_C void ResizeSaltL(TInt aNewLen);
-	IMPORT_C void SetIterations(TInt aIterCount);
-
-	/** Destructor */
-	virtual ~CPBEncryptParms(void);
-	/** @internalAll */
-	void DeriveKeyL(const TDesC8& aPassword, TDes8& aKeyBuf) const;
-
-	
-protected:	
-#ifdef PBEDATA_NO_EXPORTED_CONSTRUCTORS
-	/** @internalAll */
-	CPBEncryptParms(void);
-#else
-	/** Constructor */
-	IMPORT_C CPBEncryptParms(void);
-#endif
-
-	/** @internalAll */
-	void ConstructL();
-
-	/** @internalAll*/
-	void ConstructL(TPBECipher aCipher, const TDesC8& aSalt,
-		const TDesC8& aIV, TUint aIterations);
-	/** @internalAll*/
-	void ConstructL(const CPBEncryptParms& aParms);
-	/** @internalAll*/
-	void ConstructL(RReadStream& aStream);
-private:
-	CPBEncryptParms(const CPBEncryptParms&);
-	CPBEncryptParms& operator= (const CPBEncryptParms&);
-private:
-	class TParamsData
-	/**
-		This class contains multiple objects.  Its
-		pointer is stored in CPBEncryptParms to preserve
-		BC, because CPBEncryptParms has an exported,
-		protected constructor.
-	 */
-		{
-	public:
-		TPBECipher iCipher;
-		/**
-			The password is processed with this function
-			to generate the encryption key.
-		 */
-		TKdf iKdf;
-		};
-	TParamsData* iData;
-
-	HBufC8* iSalt;
-	HBufC8* iIV;
-	TUint iIterations;
-	};
-
-
-/**
- * Contains the password based authentication data.
- * Used to check the passphrase when decrypting.
- *
- * @since v7.0s
- */
-class CPBAuthData : public CBase
-	{
-public:
-	/**
-	 * Derives an authentication key.
-	 *
-	 * @param aPassword		The user's initial password
-	 * @param aSalt			The salt
-	 * @param aKeySize		The key size
-	 * @param aIterations	The number of iterations of the PBE algorithm
-	 * @return				A pointer to the new CPBAuthData object
-	 */
-	IMPORT_C static CPBAuthData* NewL(const TDesC8& aPassword, 
-		const TDesC8& aSalt, TUint aKeySize, TUint aIterations);
-
-	/**
-	 * Derives an authentication key.
-	 *
-	 * The returned pointer is put onto the cleanup stack.
-	 *
-	 * @param aPassword		The user's initial password
-	 * @param aSalt			The salt
-	 * @param aKeySize		The key size
-	 * @param aIterations	The number of iterations of the PBE algorithm
-	 * @return				A pointer to the new CPBAuthData object
-	 */
-	IMPORT_C static CPBAuthData* NewLC(const TDesC8& aPassword, 
-		const TDesC8& aSalt, TUint aKeySize, TUint aIterations);
-
-	/**
-	 * Creates a new CPBAuthData object from an existing authentication key.
-	 *
-	 * @param aData	The existing CPBAuthData object
-	 * @return		A pointer to the new CPBAuthData object
-	 */
-	IMPORT_C static CPBAuthData* NewL(const CPBAuthData& aData);
-
-	/**
-	 * Creates a new CPBAuthData object from an existing authentication key.
-	 *
-	 * The returned pointer is put onto the cleanup stack.
-	 *
-	 * @param aData	The existing CPBAuthData object
-	 * @return		A pointer to the new CPBAuthData object
-	 */
-	IMPORT_C static CPBAuthData* NewLC(const CPBAuthData& aData);
-
-	/**
-	 * Creates a new CPBAuthData object from an existing authentication key
-	 * by internalizing the authentication data from a read stream.
-	 *
-	 * @param aStream	The stream to read from
-	 * @return			A pointer to the new CPBAuthData object
-	 */
-	IMPORT_C static CPBAuthData* NewL(RReadStream& aStream);
-
-	/**
-	 * Creates a new CPBAuthData object from an existing authentication key
-	 * by internalizing the authentication data from a read stream.
-	 *
-	 * The returned pointer is put onto the cleanup stack.
-	 *
-	 * @param aStream	The stream to read from
-	 * @return			A pointer to the new CPBAuthData object
-	 */
-	IMPORT_C static CPBAuthData* NewLC(RReadStream& aStream);
-
-	/**
-	 * Gets the authentication key
-	 *
-	 * @return	The key
-	 */
-	IMPORT_C TPtrC8 Key() const;
-
-	/**
-	 * Gets the salt used for the authentication 
-	 *
-	 * @return	The salt
-	 */
-	IMPORT_C TPtrC8 Salt() const;
-
-	/**
-	 * Gets the number of iterations of the hashing algorithm.
-	 *
-	 * @return	The number of iterations
-	 */
-	IMPORT_C TInt Iterations() const;
-
-	/**
-	 * Tests whether two authentication keys are identical 
-	 *
-	 * @param aAuth	The authentication data object which holds the key to be tested
-	 * @return		ETrue, if they are identical; EFalse, otherwise
-	 */
-	IMPORT_C TBool operator==(const CPBAuthData& aAuth) const;
-
-	/**
-	 * Externalizes the encryption parameters into a write stream.
-	 *
-	 * @param aStream	The stream to write to
-	 */
-	IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
-
-	/** Destructor */
-	virtual ~CPBAuthData(void);
-protected:
-#ifdef PBEDATA_NO_EXPORTED_CONSTRUCTORS
-	/** @internalAll */
-	CPBAuthData(void);
-#else
-	/** Constructor */
-	IMPORT_C CPBAuthData(void);
-#endif
-	/** @internalAll */
-	void ConstructL(const TDesC8& aPassword, const TDesC8& aSalt,
-		TUint aKeySize, TUint aIterations);
-	/** @internalAll */
-	void ConstructL(const CPBAuthData& aData);
-	/** @internalAll */
-	void ConstructL(RReadStream& aStream);
-private:
-	CPBAuthData(const CPBAuthData&);
-	CPBAuthData& operator= (const CPBAuthData&);
-private:
-	HBufC8* iAuthKey;
-	HBufC8* iSalt;
-	TUint iIterations;
-	};
-
-/** 
- * Represents the information needed to decrypt encrypted data given the correct password.  
- * Contains the authentication key, and the parameters used to derive the encryption key.
- * A CPBEncryptionData object needs to be stored to recover any data for later use.
- *
- * @see CPBEncryptParms
- * @see CPBAuthData
- *
- * @since v7.0s
- */
-class CPBEncryptionData : public CBase
-	{
-public:
-	/**
-	 * Creates a new CPBEncryptionData object 
-	 *
-	 * @param aPassword		The user's initial password
-	 * @param aCipher		The cipher to use
-	 * @param aAuthSalt		The salt used for the authentication
-	 * @param aEncryptSalt	The salt used for the encryption
-	 * @param aIV			The Initialization Vector
-	 * @param aIterations	The number of iterations of the PBE algorithm
-	 * @return				A pointer to the new CPBEncryptionData object
-	 */
-	IMPORT_C static CPBEncryptionData* NewL(const TDesC8& aPassword,
-		TPBECipher aCipher, const TDesC8& aAuthSalt, 
-		const TDesC8& aEncryptSalt, const TDesC8& aIV, TUint aIterations);
-
-	/**
-	 * Creates a new CPBEncryptionData object 
-	 * and puts a pointer to it onto the cleanup stack.
-	 *
-	 * @param aPassword		The user's initial password
-	 * @param aCipher		The cipher to use
-	 * @param aAuthSalt		The salt used for the authentication
-	 * @param aEncryptSalt	The salt used for the encryption
-	 * @param aIV			The Initialization Vector
-	 * @param aIterations	The number of iterations of the PBE algorithm
-	 * @return				A pointer to the new CPBEncryptionData object
-	 */
-	IMPORT_C static CPBEncryptionData* NewLC(const TDesC8& aPassword,
-		TPBECipher aCipher, const TDesC8& aAuthSalt, 
-		const TDesC8& aEncryptSalt, const TDesC8& aIV, TUint aIterations);
-
-	/**
-	 * Creates a new CPBEncryptionData from an existing one.
-	 *
-	 * @param aData	The existing CPBEncryptionData object
-	 * @return		A pointer to the new CPBEncryptionData object
-	 */
-	IMPORT_C static CPBEncryptionData* NewL(const CPBEncryptionData& aData);
-
-	/**
-	 * Creates a new CPBEncryptionData from an existing one,
-	 * and puts a pointer to it onto the cleanup stack.
-	 *
-	 * @param aData	The existing CPBEncryptionData object
-	 * @return		A pointer to the new CPBEncryptionData object
-	 */
-	IMPORT_C static CPBEncryptionData* NewLC(const CPBEncryptionData& aData);
-
-	/**
-	 * Internalizes the encryption data from a read stream.
-	 *
-	 * @param aStream	The stream to read from
-	 * @return			A pointer to the new CPBEncryptionData object
-	 */
-	IMPORT_C static CPBEncryptionData* NewL(RReadStream& aStream);
-
-	/**
-	 * Internalizes the encryption data from a read stream,
-	 * and puts a pointer to it onto the cleanup stack.
-	 *
-	 * @param aStream	The stream to read from
-	 * @return			A pointer to the new CPBEncryptionData object
-	 */
-	IMPORT_C static CPBEncryptionData* NewLC(RReadStream& aStream);
-	IMPORT_C static CPBEncryptionData* NewL(
-		const TDesC8& aPassword, const TDesC8& aAuthSalt,
-		const CPBEncryptParms& aParms);
-
-
-	/**
-	 * Returns the encryption parameter object.
-	 *
-	 * @return	The CPBEncryptParms object
-	 */
-	IMPORT_C const CPBEncryptParms& EncryptParms() const;
-
-	/**
-	 * Returns the authentication data object.
-	 *
-	 * @return	The CPBAuthData object
-	 */
-	IMPORT_C const CPBAuthData& AuthData() const;
-
-	/**
-	 * Externalizes the encryption data into a write stream.
-	 *
-	 * @param aStream	The stream to write to
-	 */
-	IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
-
-	/** Destructor */
-	virtual ~CPBEncryptionData(void);
-protected:
-#ifdef PBEDATA_NO_EXPORTED_CONSTRUCTORS
-	/** @internalAll */
-	CPBEncryptionData(void);
-#else
-	/** Constructor */
-	IMPORT_C CPBEncryptionData(void);
-#endif
-	/** @internalAll */
-	void ConstructL(const TDesC8& aPassword, TPBECipher aCipher,
-		const TDesC8& aAuthSalt, const TDesC8& aEncryptSalt, const TDesC8& aIV,
-		TUint aIterations);
-	/** @internalAll */
-	void ConstructL(const CPBEncryptionData& aData);
-	/** @internalAll */
-	void ConstructL(
-		const TDesC8& aPassword, const TDesC8& aAuthSalt,
-		const CPBEncryptParms& aParms);
-	/** @internalAll */
-	void ConstructL(RReadStream& aStream);
-private:
-	CPBEncryptionData(const CPBEncryptionData&);
-	CPBEncryptionData& operator= (const CPBEncryptionData&);
-private:
-	CPBEncryptParms* iParms;
-	CPBAuthData* iAuth;
-	};
-
-#endif
+/*
+* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: 
+* ** IMPORTANT ** PublishedPartner API's in this file are published to 3rd party developers via the 
+* Symbian website. Changes to these API's should be treated as PublishedAll API changes and the Security TA should be consulted.
+*
+*/
+
+
+/**
+ @file
+ @publishedPartner
+ @released
+*/
+
+#ifndef __PBEDATA_H__
+#define __PBEDATA_H__
+
+#include <s32strm.h>
+#include <pbe.h>
+
+/**
+ * Contains the Password Based Encryption parameters.
+ * An object of this class can be input for CPBEncryptElement or CPBEncryptSet objects.
+ *
+ * @since v7.0s
+ */
+class CPBEncryptParms : public CBase
+	{
+public:
+	enum TKdf
+	/**
+		Key derivation function.
+		This does not affect the authentication key,
+		which always uses PKCS#5.
+	 */
+		{
+		EKdfPkcs5,
+		EKdfPkcs12
+		};
+	
+	/**
+	 * Creates a new CPBEncryptParms object.
+	 *
+	 * @param aCipher		The cipher to use
+	 * @param aSalt			The salt
+	 * @param aIV			The Initialization Vector
+	 * @param aIterations	The number of iterations of the PBE algorithm
+	 * @return				A pointer to the new CPBEncryptParms object
+	 */
+	IMPORT_C static CPBEncryptParms* NewL(TPBECipher aCipher,
+		const TDesC8& aSalt, const TDesC8& aIV, TUint aIterations);
+
+	/**
+	 * Creates a new CPBEncryptParms object and puts a pointer to it onto the cleanup stack.
+	 *
+	 * @param aCipher		The cipher to use
+	 * @param aSalt			The salt
+	 * @param aIV			The Initialization Vector
+	 * @param aIterations	The number of iterations of the PBE algorithm
+	 * @return				A pointer to the new CPBEncryptParms object
+	 */
+	IMPORT_C static CPBEncryptParms* NewLC(TPBECipher aCipher,
+		const TDesC8& aSalt, const TDesC8& aIV, TUint aIterations);
+
+	/**
+	 * Creates a new CPBEncryptParms object from an existing object.
+	 *
+	 * @param aParms		The existing encryption parameters object
+	 * @return				A pointer to the new CPBEncryptParms object
+	 */
+	IMPORT_C static CPBEncryptParms* NewL(const CPBEncryptParms& aParms);
+
+	/**
+	 * Creates a new CPBEncryptParms object from an existing object
+	 * and puts a pointer to it onto the cleanup stack.
+	 *
+	 * @param aParms		The existing encryption parameters object
+	 * @return				A pointer to the new CPBEncryptParms object
+	 */
+	IMPORT_C static CPBEncryptParms* NewLC(const CPBEncryptParms& aParms);
+
+	/**
+	 * Internalizes encryption parameter data from a read stream.
+	 *
+	 * @param aStream	The read stream to be internalized
+	 * @return			A pointer to the new CPBEncryptParms object
+	 * 
+	 */
+	IMPORT_C static CPBEncryptParms* NewL(RReadStream& aStream);
+
+	/**
+	 * Internalizes encryption parameter data from a read stream, and 
+	 * puts a pointer to the new object onto the cleanup stack.
+	 *
+	 * @param aStream	The read stream to be internalized
+	 * @return			A pointer to the new CPBEncryptParms object
+	 */
+	IMPORT_C static CPBEncryptParms* NewLC(RReadStream& aStream);
+
+	/**
+	 * Gets the PBE cipher
+	 *
+	 * @return	The cipher to use
+	 */
+	IMPORT_C TPBECipher Cipher() const;
+	/**
+		Gets the key derivation function (KDF.)
+		
+		@return The key derivation function (KDF) which
+			transforms the password into an encryption key.
+	 */
+	IMPORT_C TKdf Kdf() const;
+
+	/**
+	 * Gets the PBE salt
+	 *
+	 * @return	The salt
+	 */
+	IMPORT_C TPtrC8 Salt() const;
+
+	/**
+	 * Gets the number of iterations for the PKCS#5 algorithm.
+	 *
+	 * @return	The number of iterations
+	 */
+	IMPORT_C TInt Iterations() const;
+
+	/**
+	 * Gets the PBE Initialization Vector
+	 *
+	 * @return	The IV
+	 */
+	IMPORT_C TPtrC8 IV() const;
+
+	IMPORT_C void SetIV(const TDesC8& aNewIv);
+
+	/**
+	 * Externalizes the encryption parameters into a write stream.
+	 *
+	 * @param aStream	The stream to write to
+	 */
+	IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+	IMPORT_C static CPBEncryptParms* NewL();
+	IMPORT_C static CPBEncryptParms* NewLC();
+	
+	IMPORT_C void SetCipher(TPBECipher aCipher);
+	IMPORT_C void SetKdf(TKdf aKdf);
+	IMPORT_C void ResizeSaltL(TInt aNewLen);
+	IMPORT_C void SetIterations(TInt aIterCount);
+
+	/** Destructor */
+	virtual ~CPBEncryptParms(void);
+	/** @internalAll */
+	void DeriveKeyL(const TDesC8& aPassword, TDes8& aKeyBuf) const;
+
+	
+protected:	
+#ifdef PBEDATA_NO_EXPORTED_CONSTRUCTORS
+	/** @internalAll */
+	CPBEncryptParms(void);
+#else
+	/** Constructor */
+	IMPORT_C CPBEncryptParms(void);
+#endif
+
+	/** @internalAll */
+	void ConstructL();
+
+	/** @internalAll*/
+	void ConstructL(TPBECipher aCipher, const TDesC8& aSalt,
+		const TDesC8& aIV, TUint aIterations);
+	/** @internalAll*/
+	void ConstructL(const CPBEncryptParms& aParms);
+	/** @internalAll*/
+	void ConstructL(RReadStream& aStream);
+private:
+	CPBEncryptParms(const CPBEncryptParms&);
+	CPBEncryptParms& operator= (const CPBEncryptParms&);
+private:
+	class TParamsData
+	/**
+		This class contains multiple objects.  Its
+		pointer is stored in CPBEncryptParms to preserve
+		BC, because CPBEncryptParms has an exported,
+		protected constructor.
+	 */
+		{
+	public:
+		TPBECipher iCipher;
+		/**
+			The password is processed with this function
+			to generate the encryption key.
+		 */
+		TKdf iKdf;
+		};
+	TParamsData* iData;
+
+	HBufC8* iSalt;
+	HBufC8* iIV;
+	TUint iIterations;
+	};
+
+
+/**
+ * Contains the password based authentication data.
+ * Used to check the passphrase when decrypting.
+ *
+ * @since v7.0s
+ */
+class CPBAuthData : public CBase
+	{
+public:
+	/**
+	 * Derives an authentication key.
+	 *
+	 * @param aPassword		The user's initial password
+	 * @param aSalt			The salt
+	 * @param aKeySize		The key size
+	 * @param aIterations	The number of iterations of the PBE algorithm
+	 * @return				A pointer to the new CPBAuthData object
+	 */
+	IMPORT_C static CPBAuthData* NewL(const TDesC8& aPassword, 
+		const TDesC8& aSalt, TUint aKeySize, TUint aIterations);
+
+	/**
+	 * Derives an authentication key.
+	 *
+	 * The returned pointer is put onto the cleanup stack.
+	 *
+	 * @param aPassword		The user's initial password
+	 * @param aSalt			The salt
+	 * @param aKeySize		The key size
+	 * @param aIterations	The number of iterations of the PBE algorithm
+	 * @return				A pointer to the new CPBAuthData object
+	 */
+	IMPORT_C static CPBAuthData* NewLC(const TDesC8& aPassword, 
+		const TDesC8& aSalt, TUint aKeySize, TUint aIterations);
+
+	/**
+	 * Creates a new CPBAuthData object from an existing authentication key.
+	 *
+	 * @param aData	The existing CPBAuthData object
+	 * @return		A pointer to the new CPBAuthData object
+	 */
+	IMPORT_C static CPBAuthData* NewL(const CPBAuthData& aData);
+
+	/**
+	 * Creates a new CPBAuthData object from an existing authentication key.
+	 *
+	 * The returned pointer is put onto the cleanup stack.
+	 *
+	 * @param aData	The existing CPBAuthData object
+	 * @return		A pointer to the new CPBAuthData object
+	 */
+	IMPORT_C static CPBAuthData* NewLC(const CPBAuthData& aData);
+
+	/**
+	 * Creates a new CPBAuthData object from an existing authentication key
+	 * by internalizing the authentication data from a read stream.
+	 *
+	 * @param aStream	The stream to read from
+	 * @return			A pointer to the new CPBAuthData object
+	 */
+	IMPORT_C static CPBAuthData* NewL(RReadStream& aStream);
+
+	/**
+	 * Creates a new CPBAuthData object from an existing authentication key
+	 * by internalizing the authentication data from a read stream.
+	 *
+	 * The returned pointer is put onto the cleanup stack.
+	 *
+	 * @param aStream	The stream to read from
+	 * @return			A pointer to the new CPBAuthData object
+	 */
+	IMPORT_C static CPBAuthData* NewLC(RReadStream& aStream);
+
+	/**
+	 * Gets the authentication key
+	 *
+	 * @return	The key
+	 */
+	IMPORT_C TPtrC8 Key() const;
+
+	/**
+	 * Gets the salt used for the authentication 
+	 *
+	 * @return	The salt
+	 */
+	IMPORT_C TPtrC8 Salt() const;
+
+	/**
+	 * Gets the number of iterations of the hashing algorithm.
+	 *
+	 * @return	The number of iterations
+	 */
+	IMPORT_C TInt Iterations() const;
+
+	/**
+	 * Tests whether two authentication keys are identical 
+	 *
+	 * @param aAuth	The authentication data object which holds the key to be tested
+	 * @return		ETrue, if they are identical; EFalse, otherwise
+	 */
+	IMPORT_C TBool operator==(const CPBAuthData& aAuth) const;
+
+	/**
+	 * Externalizes the encryption parameters into a write stream.
+	 *
+	 * @param aStream	The stream to write to
+	 */
+	IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+
+	/** Destructor */
+	virtual ~CPBAuthData(void);
+protected:
+#ifdef PBEDATA_NO_EXPORTED_CONSTRUCTORS
+	/** @internalAll */
+	CPBAuthData(void);
+#else
+	/** Constructor */
+	IMPORT_C CPBAuthData(void);
+#endif
+	/** @internalAll */
+	void ConstructL(const TDesC8& aPassword, const TDesC8& aSalt,
+		TUint aKeySize, TUint aIterations);
+	/** @internalAll */
+	void ConstructL(const CPBAuthData& aData);
+	/** @internalAll */
+	void ConstructL(RReadStream& aStream);
+private:
+	CPBAuthData(const CPBAuthData&);
+	CPBAuthData& operator= (const CPBAuthData&);
+private:
+	HBufC8* iAuthKey;
+	HBufC8* iSalt;
+	TUint iIterations;
+	};
+
+/** 
+ * Represents the information needed to decrypt encrypted data given the correct password.  
+ * Contains the authentication key, and the parameters used to derive the encryption key.
+ * A CPBEncryptionData object needs to be stored to recover any data for later use.
+ *
+ * @see CPBEncryptParms
+ * @see CPBAuthData
+ *
+ * @since v7.0s
+ */
+class CPBEncryptionData : public CBase
+	{
+public:
+	/**
+	 * Creates a new CPBEncryptionData object 
+	 *
+	 * @param aPassword		The user's initial password
+	 * @param aCipher		The cipher to use
+	 * @param aAuthSalt		The salt used for the authentication
+	 * @param aEncryptSalt	The salt used for the encryption
+	 * @param aIV			The Initialization Vector
+	 * @param aIterations	The number of iterations of the PBE algorithm
+	 * @return				A pointer to the new CPBEncryptionData object
+	 */
+	IMPORT_C static CPBEncryptionData* NewL(const TDesC8& aPassword,
+		TPBECipher aCipher, const TDesC8& aAuthSalt, 
+		const TDesC8& aEncryptSalt, const TDesC8& aIV, TUint aIterations);
+
+	/**
+	 * Creates a new CPBEncryptionData object 
+	 * and puts a pointer to it onto the cleanup stack.
+	 *
+	 * @param aPassword		The user's initial password
+	 * @param aCipher		The cipher to use
+	 * @param aAuthSalt		The salt used for the authentication
+	 * @param aEncryptSalt	The salt used for the encryption
+	 * @param aIV			The Initialization Vector
+	 * @param aIterations	The number of iterations of the PBE algorithm
+	 * @return				A pointer to the new CPBEncryptionData object
+	 */
+	IMPORT_C static CPBEncryptionData* NewLC(const TDesC8& aPassword,
+		TPBECipher aCipher, const TDesC8& aAuthSalt, 
+		const TDesC8& aEncryptSalt, const TDesC8& aIV, TUint aIterations);
+
+	/**
+	 * Creates a new CPBEncryptionData from an existing one.
+	 *
+	 * @param aData	The existing CPBEncryptionData object
+	 * @return		A pointer to the new CPBEncryptionData object
+	 */
+	IMPORT_C static CPBEncryptionData* NewL(const CPBEncryptionData& aData);
+
+	/**
+	 * Creates a new CPBEncryptionData from an existing one,
+	 * and puts a pointer to it onto the cleanup stack.
+	 *
+	 * @param aData	The existing CPBEncryptionData object
+	 * @return		A pointer to the new CPBEncryptionData object
+	 */
+	IMPORT_C static CPBEncryptionData* NewLC(const CPBEncryptionData& aData);
+
+	/**
+	 * Internalizes the encryption data from a read stream.
+	 *
+	 * @param aStream	The stream to read from
+	 * @return			A pointer to the new CPBEncryptionData object
+	 */
+	IMPORT_C static CPBEncryptionData* NewL(RReadStream& aStream);
+
+	/**
+	 * Internalizes the encryption data from a read stream,
+	 * and puts a pointer to it onto the cleanup stack.
+	 *
+	 * @param aStream	The stream to read from
+	 * @return			A pointer to the new CPBEncryptionData object
+	 */
+	IMPORT_C static CPBEncryptionData* NewLC(RReadStream& aStream);
+	IMPORT_C static CPBEncryptionData* NewL(
+		const TDesC8& aPassword, const TDesC8& aAuthSalt,
+		const CPBEncryptParms& aParms);
+
+
+	/**
+	 * Returns the encryption parameter object.
+	 *
+	 * @return	The CPBEncryptParms object
+	 */
+	IMPORT_C const CPBEncryptParms& EncryptParms() const;
+
+	/**
+	 * Returns the authentication data object.
+	 *
+	 * @return	The CPBAuthData object
+	 */
+	IMPORT_C const CPBAuthData& AuthData() const;
+
+	/**
+	 * Externalizes the encryption data into a write stream.
+	 *
+	 * @param aStream	The stream to write to
+	 */
+	IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+
+	/** Destructor */
+	virtual ~CPBEncryptionData(void);
+protected:
+#ifdef PBEDATA_NO_EXPORTED_CONSTRUCTORS
+	/** @internalAll */
+	CPBEncryptionData(void);
+#else
+	/** Constructor */
+	IMPORT_C CPBEncryptionData(void);
+#endif
+	/** @internalAll */
+	void ConstructL(const TDesC8& aPassword, TPBECipher aCipher,
+		const TDesC8& aAuthSalt, const TDesC8& aEncryptSalt, const TDesC8& aIV,
+		TUint aIterations);
+	/** @internalAll */
+	void ConstructL(const CPBEncryptionData& aData);
+	/** @internalAll */
+	void ConstructL(
+		const TDesC8& aPassword, const TDesC8& aAuthSalt,
+		const CPBEncryptParms& aParms);
+	/** @internalAll */
+	void ConstructL(RReadStream& aStream);
+private:
+	CPBEncryptionData(const CPBEncryptionData&);
+	CPBEncryptionData& operator= (const CPBEncryptionData&);
+private:
+	CPBEncryptParms* iParms;
+	CPBAuthData* iAuth;
+	};
+
+#endif