diff -r 675a964f4eb5 -r 35751d3474b7 crypto/weakcryptospi/inc/pbencryptor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/crypto/weakcryptospi/inc/pbencryptor.h Thu Sep 10 14:01:51 2009 +0300 @@ -0,0 +1,388 @@ +/* +* 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 __PBENCRYPTOR_H__ +#define __PBENCRYPTOR_H__ + +#include +#include +#include + +/** + * Implements the password based encryption of elements. + * + * @see CPBEncryptElement + * @since v7.0s + */ +class CPBEncryptorElement : public CPBEncryptor + { +public: + /** + * Creates a new CPBEncryptorElement object from the specified cipher, + * key, and Initialization Vector (IV). + * + * @param aCipher The encryption cipher + * @param aKey The encryption key + * @param aIV The Initialization Vector + * @return A pointer to the new CPBEncryptorElement object + */ + IMPORT_C static CPBEncryptorElement* NewL(TPBECipher aCipher, + const TDesC8& aKey, const TDesC8& aIV); + + /** + * Creates a new CPBEncryptorElement object from the specified cipher, + * key, and IV. + * + * Puts a pointer to the returned object onto the cleanup stack. + * + * @param aCipher The encryption cipher + * @param aKey The encryption key + * @param aIV The Initialization Vector + * @return A pointer to the new CPBEncryptorElement object + */ + IMPORT_C static CPBEncryptorElement* NewLC(TPBECipher aCipher, + const TDesC8& aKey, const TDesC8& aIV); + + /** + * Transforms aInput into its encrypted form, aOutput. + * + * aOutput must have CPBEncryptorElement::MaxOutputLength() empty bytes remaining in its length. + * + * See the Cryptography api-guide documentation for an explanation of + * how buffering of data supplied to this function is handled. + * + * @param aInput The plaintext. + * @param aOutput The ciphertext. + */ + void Process(const TDesC8& aInput, TDes8& aOutput); + + /** + * Transforms aInput into its encrypted form, aOutput, and applies a + * padding scheme to ensure a block aligned result. + * + * aOutput must have CPBEncryptorElement::MaxFinalOutputLength() + * empty bytes remaining in its length. + * + * See the Cryptography api-guide documentation for an explanation of + * how buffering of data supplied to this function is handled. + * + * @param aInput The plaintext. + * @param aOutput The ciphertext. + */ + void ProcessFinalL(const TDesC8& aInput, TDes8& aOutput); + + /** + * Gets the maximum size of the output resulting from calling Process() with a + * given input length. + * + * @param aMaxInputLength The maximum input length in bytes. + * @return The maximum output length in bytes. + */ + TInt MaxOutputLength(TUint aMaxInputLength) const; + + /** + * Gets the maximum size of the output resulting from calling ProcessFinalL() + * with a given input length. + * + * @param aMaxInputLength The maximum input length in bytes. + * @return TInt The maximum output length in bytes. + */ + TInt MaxFinalOutputLength(TUint aMaxInputLength) const; + + /** Destructor */ + virtual ~CPBEncryptorElement(); +protected: + CPBEncryptorElement(); + void ConstructL(TPBECipher aCipher, const TDesC8& aKey, const TDesC8& aIV); +private: + CSymmetricCipher* iCipher; + }; + +/** + * Implements the password based decryption of elements. + * + * @since v7.0s + */ +class CPBDecryptorElement : public CPBDecryptor + { +public: + /** + * Creates a new CPBDecryptorElement object from the specified cipher, + * key, and IV. + * + * @param aCipher The decryption cipher + * @param aKey The decryption key + * @param aIV The Initialization Vector + * @return A pointer to the new CPBDecryptorElement object + */ + IMPORT_C static CPBDecryptorElement* NewL(const TPBECipher aCipher, + const TDesC8& aKey, const TDesC8& aIV); + + /** + * Creates a new CPBDecryptorElement object from the specified cipher, + * key, and IV. + * + * Puts a pointer to the returned object onto the cleanup stack. + * + * @param aCipher The decryption cipher + * @param aKey The decryption key + * @param aIV The Initialization Vector + * @return A pointer to the new CPBDecryptorElement object + */ + IMPORT_C static CPBDecryptorElement* NewLC(const TPBECipher aCipher, + const TDesC8& aKey, const TDesC8& aIV); + + /** + * Transforms aInput into its decrypted form, aOutput. + * + * aOutput must have CPBDecryptorElement::MaxOutputLength() empty bytes + * remaining in its length. + * + * See the Cryptography api-guide documentation for an explanation of + * how buffering of data supplied to this function is handled. + * + * @param aInput The ciphertext. + * @param aOutput The plaintext. + */ + void Process(const TDesC8& aInput, TDes8& aOutput); + + /** + * Transforms aInput into its decrypted form, aOutput. + * + * aOutput must have CPBDecryptorElement::MaxFinalOutputLength() + * empty bytes remaining in its length. + * + * @param aInput The ciphertext. + * @param aOutput The plaintext. + */ + void ProcessFinalL(const TDesC8& aInput, TDes8& aOutput); + + /** + * Gets the maximum size of the output given a certain input length. + * + * @param aMaxInputLength The maximum input length in bytes. + * @return The maximum output length in bytes. + */ + TInt MaxOutputLength(TUint aMaxInputLength) const; + + /** + * Gets the maximum size of the output given a certain input length. + * + * @param aMaxInputLength The maximum input length in bytes. + * @return The maximum output length in bytes. + */ + TInt MaxFinalOutputLength(TUint aMaxInputLength) const; + + /** Destructor */ + virtual ~CPBDecryptorElement(); +protected: + CPBDecryptorElement(); + void ConstructL(const TPBECipher aCipher, const TDesC8& aKey, const TDesC8& aIV); +private: + CSymmetricCipher* iCipher; + }; + +/** + * Implements the password based encryption of multiple elements. + * + * @see CPBEncryptSet + * @since v7.0s + */ +class CPBEncryptorSet : public CPBEncryptor + { +public: + /** + * Creates a new CPBEncryptorSet object from the specified cipher and key, + * and a random Initialization Vector (IV). + * + * @param aCipher The encryption cipher + * @param aKey The encryption key + * @return A pointer to the new CPBEncryptorSet object + */ + IMPORT_C static CPBEncryptorSet* NewL(const TPBECipher aCipher, + const TDesC8& aKey); + + /** + * Creates a new CPBEncryptorSet object from the specified cipher and key, + * and a random IV. + * + * Puts a pointer to the returned object onto the cleanup stack. + * + * @param aCipher The encryption cipher + * @param aKey The encryption key + * @return A pointer to the new CPBEncryptorSet object + */ + IMPORT_C static CPBEncryptorSet* NewLC(const TPBECipher aCipher, + const TDesC8& aKey); + + /** + * Resets the CPBEncryptorSet object back to its original state + * and clears all its buffers. + */ + IMPORT_C void Reset(void); + + /** + * Transforms aInput into its encrypted form, aOutput. + * + * aOutput must have CPBEncryptorSet::MaxOutputLength() empty bytes + * remaining in its length. + * + * @param aInput The plaintext. + * @param aOutput The ciphertext. + */ + void Process(const TDesC8& aInput, TDes8& aOutput); + + /** + * Transforms aInput into its encrypted form, aOutput, and applies a + * padding scheme to ensure a block aligned result. + * + * aOutput must have CPBEncryptorSet::MaxFinalOutputLength() + * empty bytes remaining in its length. + * + * @param aInput The plaintext. + * @param aOutput The ciphertext. + */ + void ProcessFinalL(const TDesC8& aInput, TDes8& aOutput); + + /** + * Gets the maximum size of the output given a certain input length. + * + * @param aMaxInputLength The maximum input length in bytes. + * @return The maximum output length in bytes. + */ + TInt MaxOutputLength(TUint aMaxInputLength) const; + + /** + * Gets the maximum size of the output given a certain input length. + * + * @param aMaxInputLength The maximum input length in bytes. + * @return The maximum output length in bytes. + */ + TInt MaxFinalOutputLength(TUint aMaxInputLength) const; + + /** Destructor */ + virtual ~CPBEncryptorSet(); +protected: + CPBEncryptorSet(); + void ConstructL(TPBECipher aCipher, const TDesC8& aKey); +private: + CSymmetricCipher* iCipher; + HBufC8* iIV; + TBool iIVSent; + }; + + +/** + * Implements the password based decryption of multiple elements. + * + * @since v7.0s + */ +class CPBDecryptorSet : public CPBDecryptor + { +public: + /** + * Creates a new CPBDecryptorSet object from the specified cipher and key, + * and a random IV. + * + * @param aCipher The decryption cipher + * @param aKey The decryption key + * @return A pointer to the new CPBDecryptorSet object + */ + IMPORT_C static CPBDecryptorSet* NewL(const TPBECipher aCipher, + const TDesC8& aKey); + + /** + * Creates a new CPBDecryptorSet object from the specified cipher and key, + * and a random IV. + * + * Puts a pointer to the returned object onto the cleanup stack. + * + * @param aCipher The decryption cipher + * @param aKey The decryption key + * @return A pointer to the new CPBDecryptorSet object + */ + IMPORT_C static CPBDecryptorSet* NewLC(const TPBECipher aCipher, + const TDesC8& aKey); + + /** + * Resets the CPBDecryptorSet object back to its original state + * and clears all its buffers. + */ + IMPORT_C void Reset(void); + + /** + * Transforms aInput into its decrypted form, aOutput. + * + * aOutput must have CPBDecryptorSet::MaxOutputLength() empty bytes + * remaining in its length. + * + * @param aInput The ciphertext. + * @param aOutput The plaintext. + */ + void Process(const TDesC8& aInput, TDes8& aOutput); + + /** + * Transforms aInput into its decrypted form, aOutput, and applies a + * padding scheme to ensure a block aligned result. + * + * aOutput must have CPBDecryptorSet::MaxFinalOutputLength() + * empty bytes remaining in its length. + * + * @param aInput The ciphertext. + * @param aOutput The plaintext. + */ + void ProcessFinalL(const TDesC8& aInput, TDes8& aOutput); + + /** + * Gets the maximum size of the output given a certain input length. + * + * @param aMaxInputLength The maximum input length in bytes. + * @return The maximum output length in bytes. + */ + TInt MaxOutputLength(TUint aMaxInputLength) const; + + /** + * Gets the maximum size of the output given a certain input length. + * + * @param aMaxInputLength The maximum input length in bytes. + * @return The maximum output length in bytes. + */ + TInt MaxFinalOutputLength(TUint aMaxInputLength) const; + + /** Destructor */ + virtual ~CPBDecryptorSet(); +protected: + CPBDecryptorSet(); + void ConstructL(TPBECipher aCipher, const TDesC8& aKey, const TDesC8& aIV); +private: + TPtrC8 ProcessIV(const TDesC8& aInput); +private: + CSymmetricCipher* iCipher; + HBufC8* iIVBuf; + TBool iIVSent; + }; + +#endif