--- /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 <e32base.h> // CBase.
+
+#include "cralginfo.h" // CCrAlgInfo
+#include <crdata.h>
+
+// 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<CCrAlgInfo>* iAlgorithmInfos;
+ };
+
+#endif // CR_CRYPTO_H
+
+// End of File
\ No newline at end of file