diff -r 675a964f4eb5 -r 35751d3474b7 crypto/weakcrypto/inc/bufferedtransformation.h --- a/crypto/weakcrypto/inc/bufferedtransformation.h Tue Jul 21 01:04:32 2009 +0100 +++ b/crypto/weakcrypto/inc/bufferedtransformation.h Thu Sep 10 14:01:51 2009 +0300 @@ -1,205 +1,198 @@ -/* -* 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 - @internalAll -*/ - -#ifndef __BUFFEREDTRANSFORMATION_H__ -#define __BUFFEREDTRANSFORMATION_H__ - -#include -#include "msymmetriccipher.h" -#include "blocktransformation.h" - -class CPadding; - -/** - * Abstract class, deriving from CSymmetricCipher, encapsulating the buffering - * logic for block ciphers. - * - * It is responsible for feeding complete blocks of plaintext or ciphertext to - * the underlying encryptor or decryptor. Since the only difference between - * block cipher encryption and decryption is the ProcessFinalL() call, - * CBufferedTransformation implements all functions (by buffering and/or - * forwarding to the encryptor/decryptor) except ProcessFinalL() and - * MaxFinalOutputLength(). - * - * See the Cryptography api-guide documentation for the rules that this class - * and derived classes must follow. - * - * @publishedPartner - * @released - */ -class CBufferedTransformation : public CSymmetricCipher -{ -public: - /** The destructor frees all resources owned by the object, prior to its destruction. */ - IMPORT_C virtual ~CBufferedTransformation(); -public: - /** - * Encrypts or decrypts the input using the underlying block cipher, buffering - * the input as necessary. - * - * See the Cryptography api-guide documentation. - * - * @param aInput The input is appended to the internal buffer (initially empty), - * then all whole blocks are encrypted using the underlying block - * transformation and written into aOutput. Any leftover bytes will - * be buffered. - * @param aOutput The resulting processed data appended to aOutput. aOutput must - * have at least MaxOutputLength() empty bytes remaining in its length. - */ - virtual void Process(const TDesC8& aInput, TDes8& aOutput); - virtual TInt MaxOutputLength(TInt aInputLength) const; - virtual void Reset(); - virtual TInt BlockSize() const; - virtual TInt KeySize() const; -public: - /** - * Gets the underlying block transform. - * - * @return A pointer to the CBlockTransformation object - */ - IMPORT_C CBlockTransformation* BlockTransformer() const; -protected: - /** @internalAll */ - CBufferedTransformation(); - /** @internalAll */ - void ConstructL(CBlockTransformation* aBT, CPadding* aPadding); -protected: - /** A block transformation object */ - CBlockTransformation* iBT; - /** A descriptor which provides a buffer the length of the block size of iBT */ - HBufC8* iInputStoreBuf; - /** A pointer to iInputStoreBuf */ - TPtr8 iInputStore; - /** The padding */ - CPadding* iPadding; -}; - -/** - * Subclass of CBufferedTransformation for buffered encryption. - * - * Objects of this class are intialised with, and subsequently own, an encryptor - * derived from CBlockTransformation and a subclass of CPadding. - * - * @publishedPartner - * @released - */ -class CBufferedEncryptor : public CBufferedTransformation -{ -public: - /** - * Creates a CBufferedEncryptor object taking ownership of aBT and aPadding. - * - * @param aBT Block transformation object (encryptor) - * @param aPadding Padding object (deriving from CPadding) - * @return A pointer to the new CBufferedEncryptor object - */ - IMPORT_C static CBufferedEncryptor* NewL(CBlockTransformation* aBT, - CPadding* aPadding); - - /** - * Creates a CBufferedEncryptor object taking ownership of aBT and aPadding. - * - * The returned pointer is put onto the cleanup stack. - * - * @param aBT Block transformation object (encryptor) - * @param aPadding Padding object (deriving from CPadding) - * @return A pointer to the new CBufferedEncryptor object - */ - IMPORT_C static CBufferedEncryptor* NewLC(CBlockTransformation* aBT, - CPadding* aPadding); -public: - /** - * Completes an encryption operation using the underlying block transformation, but - * first ensuring that input data is block aligned using the previously supplied - * CPadding object. - * - * See the Cryptography api-guide documentation. - * - * @param aInput The final input data to be processed. - * @param aOutput The resulting processed data appended to aOutput. aOutput must - * have at least MaxFinalOutputLength() empty bytes remaining in its - * length. - */ - virtual void ProcessFinalL(const TDesC8& aInput, TDes8& aOutput); - virtual TInt MaxFinalOutputLength(TInt aInputLength) const; -protected: - /** @internalAll */ - CBufferedEncryptor(); -}; - -/** - * Subclass of CBufferedTransformation for buffered decryption. - * - * Objects of this class are intialised with, and subsequently own, a decryptor - * derived from CBlockTransformation and a subclass of CPadding. - * - * @publishedPartner - * @released - */ -class CBufferedDecryptor : public CBufferedTransformation -{ -public: - /** - * Creates a CBufferedDecryptor object taking ownership of aBT and aPadding. - * - * @param aBT Block transformation object (decryptor) - * @param aPadding Padding object (deriving from CPadding) - * @return A pointer to the CBufferedDecryptor object. - */ - IMPORT_C static CBufferedDecryptor* NewL(CBlockTransformation* aBT, - CPadding* aPadding); - - /** - * Creates a CBufferedDecryptor object taking ownership of aBT and aPadding. - * - * The returned pointer is put onto the cleanup stack. - * - * @param aBT Block transformation object (decryptor) - * @param aPadding Padding object (deriving from CPadding) - * @return A pointer to the new CBufferedDecryptor object - */ - IMPORT_C static CBufferedDecryptor* NewLC(CBlockTransformation* aBT, - CPadding* aPadding); -public: - /** - * Completes a decryption operation using the underlying block transformation and - * unpads the decrypted data. - * - * @param aInput The data to be processed and unpadded. - * aInput must be a whole number of blocks. - * @param aOutput The resulting processed and unpadded data appened to aOutput. - * aOutput must have at least MaxFinalOutputLength() empty bytes - * remaining in its length. - */ - virtual void ProcessFinalL(const TDesC8& aInput, TDes8& aOutput); - virtual TInt MaxFinalOutputLength(TInt aInputLength) const; -protected: - /** @internalAll */ - CBufferedDecryptor(); -}; - -#endif // __CBUFFEREDTRANSFORMATION_H__ +/* +* 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 __BUFFEREDTRANSFORMATION_H__ +#define __BUFFEREDTRANSFORMATION_H__ + +#include +#include "msymmetriccipher.h" +#include "blocktransformation.h" + +class CPadding; + +/** + * Abstract class, deriving from CSymmetricCipher, encapsulating the buffering + * logic for block ciphers. + * + * It is responsible for feeding complete blocks of plaintext or ciphertext to + * the underlying encryptor or decryptor. Since the only difference between + * block cipher encryption and decryption is the ProcessFinalL() call, + * CBufferedTransformation implements all functions (by buffering and/or + * forwarding to the encryptor/decryptor) except ProcessFinalL() and + * MaxFinalOutputLength(). + * + * See the Cryptography api-guide documentation for the rules that this class + * and derived classes must follow. + * + */ +class CBufferedTransformation : public CSymmetricCipher +{ +public: + /** The destructor frees all resources owned by the object, prior to its destruction. */ + IMPORT_C virtual ~CBufferedTransformation(); +public: + /** + * Encrypts or decrypts the input using the underlying block cipher, buffering + * the input as necessary. + * + * See the Cryptography api-guide documentation. + * + * @param aInput The input is appended to the internal buffer (initially empty), + * then all whole blocks are encrypted using the underlying block + * transformation and written into aOutput. Any leftover bytes will + * be buffered. + * @param aOutput The resulting processed data appended to aOutput. aOutput must + * have at least MaxOutputLength() empty bytes remaining in its length. + */ + virtual void Process(const TDesC8& aInput, TDes8& aOutput); + virtual TInt MaxOutputLength(TInt aInputLength) const; + virtual void Reset(); + virtual TInt BlockSize() const; + virtual TInt KeySize() const; +public: + /** + * Gets the underlying block transform. + * + * @return A pointer to the CBlockTransformation object + */ + IMPORT_C CBlockTransformation* BlockTransformer() const; +protected: + /** @internalAll */ + CBufferedTransformation(); + /** @internalAll */ + void ConstructL(CBlockTransformation* aBT, CPadding* aPadding); +protected: + /** A block transformation object */ + CBlockTransformation* iBT; + /** A descriptor which provides a buffer the length of the block size of iBT */ + HBufC8* iInputStoreBuf; + /** A pointer to iInputStoreBuf */ + TPtr8 iInputStore; + /** The padding */ + CPadding* iPadding; +}; + +/** + * Subclass of CBufferedTransformation for buffered encryption. + * + * Objects of this class are intialised with, and subsequently own, an encryptor + * derived from CBlockTransformation and a subclass of CPadding. + * + */ +class CBufferedEncryptor : public CBufferedTransformation +{ +public: + /** + * Creates a CBufferedEncryptor object taking ownership of aBT and aPadding. + * + * @param aBT Block transformation object (encryptor) + * @param aPadding Padding object (deriving from CPadding) + * @return A pointer to the new CBufferedEncryptor object + */ + IMPORT_C static CBufferedEncryptor* NewL(CBlockTransformation* aBT, + CPadding* aPadding); + + /** + * Creates a CBufferedEncryptor object taking ownership of aBT and aPadding. + * + * The returned pointer is put onto the cleanup stack. + * + * @param aBT Block transformation object (encryptor) + * @param aPadding Padding object (deriving from CPadding) + * @return A pointer to the new CBufferedEncryptor object + */ + IMPORT_C static CBufferedEncryptor* NewLC(CBlockTransformation* aBT, + CPadding* aPadding); +public: + /** + * Completes an encryption operation using the underlying block transformation, but + * first ensuring that input data is block aligned using the previously supplied + * CPadding object. + * + * See the Cryptography api-guide documentation. + * + * @param aInput The final input data to be processed. + * @param aOutput The resulting processed data appended to aOutput. aOutput must + * have at least MaxFinalOutputLength() empty bytes remaining in its + * length. + */ + virtual void ProcessFinalL(const TDesC8& aInput, TDes8& aOutput); + virtual TInt MaxFinalOutputLength(TInt aInputLength) const; +protected: + /** @internalAll */ + CBufferedEncryptor(); +}; + +/** + * Subclass of CBufferedTransformation for buffered decryption. + * + * Objects of this class are intialised with, and subsequently own, a decryptor + * derived from CBlockTransformation and a subclass of CPadding. + * + */ +class CBufferedDecryptor : public CBufferedTransformation +{ +public: + /** + * Creates a CBufferedDecryptor object taking ownership of aBT and aPadding. + * + * @param aBT Block transformation object (decryptor) + * @param aPadding Padding object (deriving from CPadding) + * @return A pointer to the CBufferedDecryptor object. + */ + IMPORT_C static CBufferedDecryptor* NewL(CBlockTransformation* aBT, + CPadding* aPadding); + + /** + * Creates a CBufferedDecryptor object taking ownership of aBT and aPadding. + * + * The returned pointer is put onto the cleanup stack. + * + * @param aBT Block transformation object (decryptor) + * @param aPadding Padding object (deriving from CPadding) + * @return A pointer to the new CBufferedDecryptor object + */ + IMPORT_C static CBufferedDecryptor* NewLC(CBlockTransformation* aBT, + CPadding* aPadding); +public: + /** + * Completes a decryption operation using the underlying block transformation and + * unpads the decrypted data. + * + * @param aInput The data to be processed and unpadded. + * aInput must be a whole number of blocks. + * @param aOutput The resulting processed and unpadded data appened to aOutput. + * aOutput must have at least MaxFinalOutputLength() empty bytes + * remaining in its length. + */ + virtual void ProcessFinalL(const TDesC8& aInput, TDes8& aOutput); + virtual TInt MaxFinalOutputLength(TInt aInputLength) const; +protected: + /** @internalAll */ + CBufferedDecryptor(); +}; + +#endif // __CBUFFEREDTRANSFORMATION_H__