diff -r 000000000000 -r 164170e6151a pkiutilities/PKCS12/CrPkcs12/Inc/crcrypto.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkiutilities/PKCS12/CrPkcs12/Inc/crcrypto.h Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,192 @@ +/* +* Copyright (c) 2000, 2002, 2004 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: This file contains the header of CCrCrypto class. +* +*/ + + +#ifndef CR_CRYPTO_H +#define CR_CRYPTO_H + +// INCLUDES +#include // CBase. + +#include "cralginfo.h" // CCrAlgInfo +#include + +// CONSTANTS +const TInt NO_PROCESS = -1; +const TInt KLenFileBuffer = 1000; + +// DATA TYPES +// Padding rules. +enum TPaddingRule + { + ECrNone, + ECrPKCS1, + ECrSSLv3 + }; + +// Algorithms. +enum TCrAsymAlgorithm + { + ECrRSA, + ECrDSA, + ECrLAST_ASYMM_CRYPTO + }; + + +// CLASS DECLARATION + +/** +* class CCrCrypto +* CCrCrypto crypto API, which is used in CrPKCS12. +* +* @lib crpkcs12.lib +* @since Series 60 3.0 +*/ +NONSHARABLE_CLASS( CCrCrypto ): public CBase + { + // Constructors and destructors. + private: + CCrCrypto(); + + void ConstructL(); + + public: + ~CCrCrypto(); + static CCrCrypto* NewLC(); + static CCrCrypto* NewL(); + + public: // Functions. + + /** + * Initialize encryption or decryption with Triple DES algorithm + * using three different keys. + * @param aKey1 1. key. + * @param aKey2 2. key. + * @param aKey3 3. key. + * @param aIV Initialization vector. + * @param aEncrypt Encrypt if true. + * @param aMode Algorithm mode. + * @param aPadRule Padding rule. + * @return KCrCrypto | KCrUnknownMode + * KCrCrypto | KCrUnknownLibrary + * KCrOK + */ + TCrStatus InitCrypt3DESL( + const TDesC8& aKey1, + const TDesC8& aKey2, + const TDesC8& aKey3, + const TDesC8& aIV, + TBool aEncrypt = ETrue, + TCrSymmMode aMode = ECrCBC, + TPaddingRule aPadRule = ECrPKCS1); + + /** + * Initialize encryption or decryption with RC2 algorithm. + * @param aKey Key. + * @param aIV Initialization vector. + * @param aEncrypt Encrypt if true. + * @param aEffectiveKeyLen Effective key length in bits + * @param aMode Algorithm mode. + * @param aPadRule Padding rule. + * @return KCrCrypto | KCrUnknownMode + * KCrOK + */ + TCrStatus InitCryptRC2L( + const TDesC8& aKey, + const TDesC8& aIV, + TBool aEncrypt = ETrue, + + TInt aEffectiveKeyLen = 0, + + TCrSymmMode aMode = ECrCBC, + TPaddingRule aPadRule = ECrPKCS1); + + /** + * Initialize HMAC message digest algorithm. + * @param aKey Key. + * @param aDigestAlg Message digest algorithm that HMAC uses. + * @return KCrCrypto | KCrUnknownMode + * KCrOK + */ + TCrStatus InitDigestHMACL( + const TDesC8& aKey, + TCrAlgorithm aDigestAlg); + + + /** + * Initialize message digest with MD2 algorithm. + * @param aAlgorithm Digest algorithm + * @return KCrOK or + * KCrCrypto | KCrNotSupportedAlg + */ + TCrStatus InitDigestL(TCrAlgorithm aAlgorithm); + + + + /** + * Process given source data with initialized crypto operations. + * If symmetric crypto is initialized appends to aTrg encrypted + * or decrypted data without last portion. If only digest algorithm + * is initialized, aTrg is not used. + * @param aSrc Source buffer. + * @param aTrg Target buffer. + * @return KCrOK + * KCrNotSupportedAlg + * KCrUndefinedLibrary + * KCrUnknownLibrary + * KCrUnknownMode + */ + TCrStatus ProcessL(const TDesC8& aSrc, TDes8& aTrg); + + + // Finalize symmetric algorithms. Function appends to aTrg + // encrypted or decrypted last portion. + TCrStatus FinalCryptL(TDes8& aTrg); + + // Finalize message digest algorithms. + // aTrg contains message digest of the data. + TCrStatus FinalDigest(TDes8& aTrg); + + // Derive key(s) or IV vector from password, salt and iteration count. + TCrStatus DeriveKeyPKCS12L( + const TDesC8& aPassword, + const TDesC8& aSalt, + const TInt aIterationCount, + TCrAlgorithm aHashFunc, + const TUint8 aID, + const TInt aNumberOfBytes, + TDes8& aTrg); + + private: // Functions + // Removes the last portion of the data when encrypting or decrypting. + TInt RemoveLastBlock( + TDesC8& aSrc, + const TInt aBlockSize, + CCrAlgInfo* algInfo); + + TInt MesDigestInputSize(TCrAlgorithm aDigestAlg); + TInt MesDigestOutputSize(TCrAlgorithm aDigestAlg); + void Reset(); + + private: // Data. + // Infos about initialized algorithms are collected in this array. + CArrayPtrFlat* iAlgorithmInfos; + }; + +#endif // CR_CRYPTO_H + +// End of File \ No newline at end of file