backupandrestore/backupengine/inc/sbecompressionandencryption.h
changeset 0 d0791faffa3f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/backupandrestore/backupengine/inc/sbecompressionandencryption.h	Tue Feb 02 01:11:40 2010 +0200
@@ -0,0 +1,160 @@
+/**
+* Copyright (c) 2004-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:
+* Declaration of CSBECompressionAndEncryption class.
+* 
+*
+*/
+
+
+
+/**
+ @file
+*/
+#ifndef __SBECOMPRESSIONANDENCRYPTION_H__
+#define __SBECOMPRESSIONANDENCRYPTION_H__
+
+#include <e32base.h>
+
+#include "sbtypes.h"
+
+// Forwards
+class CARC4;
+
+namespace conn
+	{
+	// Forwards
+	class CSecureBUREncryptKeySource;
+	
+	/** Constants used in the class below
+	@internalTechnology
+	*/	
+	const TInt KKeySize = 32;
+	/** Constants used in the class below
+	@internalTechnology
+	*/	
+	const TInt KEncryptionBufferSize = 256;
+	
+	// Template classes for handling byte alignment issues
+	template<class T> void ReadL(T& aT, TPtr8& aBuffer);
+	template<class T> void WriteL(T& aT, TPtr8& aBuffer);
+	
+	/** Type: Compression Header
+	@internalTechnology
+	*/
+	class TCompressionHeader
+		{
+	public:
+		TInt	iCompressedSize;
+		TInt	iUncompressedSize;
+		};
+		
+	/** Type: Encryption Header
+	@internalTechnology
+	*/
+	class TEncryptionHeader 
+		{
+	public:
+		TBool	iEncrypted;
+		TInt	iBufferSize;
+		TInt	iTotalSize;
+		};
+	
+	/** Handles compression and encryption
+	@internalTechnology
+	*/
+	class CSBECompressAndEncrypt : public CBase
+		{
+		public:
+			// Construtors
+			static CSBECompressAndEncrypt* NewLC(CSBGenericTransferType*& apTransferType, TPtr8& aInputBlock);
+			~CSBECompressAndEncrypt();
+			
+			// Methods
+			void PackL(TPtr8& aOutputData);
+			void FreeReservedSpace(TPtr8& aOutputData);
+		private:
+			// Constructors
+			CSBECompressAndEncrypt();
+			void ConstructL(CSBGenericTransferType*& apTransferType, TPtr8& aInputBlock);
+		private:
+			// Compression statics
+			const static TInt iCompressionGrowthSize;
+			
+			// Members
+			TBool							iDoEncrypt; /*<! To encryption */
+			TBool							iGotBuffer; /*<! Do we have an encryption buffer */
+			TBuf8<KKeySize>					iKey; /*<! Encryption key */
+			TBuf<KEncryptionBufferSize>		iBuffer; /*<! Encryption buffer */
+			TPtr8							iActualStart; /*<! Real start of data block */
+			TPtr8*							iOffsetStart; /*<! Star of data */
+		
+			// Encryption
+			CARC4*							iCipher; /*<! Used for encryption */
+			TBool							iIsFreed;	/*Is freed reserved memory*/
+		};
+		
+	/** Handles decompression and decryption
+	@internalTechnology
+	*/
+	class CSBEDecompressAndEncrypt : public CBase
+		{
+		public:
+			// Constructors
+			static CSBEDecompressAndEncrypt* NewL();
+			static CSBEDecompressAndEncrypt* NewLC();
+			~CSBEDecompressAndEncrypt();
+			
+			// Methods
+			void SetGenericTransferTypeL(CSBGenericTransferType*& apTransferType);
+			void SetBuffer(TDesC8& aOutputData);
+			TBool NextLC(HBufC8*& apOutput, TBool& aFinished);
+		private:
+			// Constructors
+			CSBEDecompressAndEncrypt();
+
+			// Methods
+			void Reset();
+			TBool CreateCipherL();
+			void MoveAlongL(TPtr8& aPtr, TInt aAmount);
+		private:
+			// Enum
+			enum TTransferType {ENotSet, ESid, EJava, EPackage};
+			
+			
+			// Members
+			TBool 							iDoDecrypt; /*<! Do decryption */
+			TTransferType					iType;
+			TPtr8							iCurrentPtr; /*<! Pointer to the current work position */
+			TEncryptionHeader				iEncryptionHeader; /*<! An encryption headear */
+			TDriveNumber					iDriveNumber; /*<! Drive number */
+			TSecureId						iSecureId; /*<! Secure Id */
+			TInt							iCount; /*<! Count of data unpacked */
+			TCompressionHeader				iCompressionHeader; /*<! A compression header */
+			TUid							iPackageId; /*<! A package header */
+			HBufC*							iJavaHash; /*<! For storing the java hash */
+			
+			// Buffering
+			TBool							iGotCompressionHeader; /*<! Have we got the compression header */
+			TBool							iDoneDecompression;
+			TBool							iGotCipher;
+			TInt							iCompressionSizeRead; /*<! Used for buffering */
+			TInt							iEncryptionSizeRead; 
+			HBufC8*							iBuffer;
+		
+			// Encryption
+			CARC4*							iCipher; /*<! Used for encryption */
+		};
+	}
+#endif // __SBECOMPRESSIONANDENCRYPTION_H__