pkiutilities/PKCS12/CrPkcs12/Inc/cralginfo.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 26 Jan 2010 15:20:08 +0200
changeset 0 164170e6151a
permissions -rw-r--r--
Revision: 201004

/*
* Copyright (c) 2000, 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 CCrAlgInfo class.
*
*/



#ifndef CR_ALGINFO_H
#define CR_ALGINFO_H

//  INCLUDES
#include <e32base.h>    // CBase.

#include "crdefs.h"     // CrDefines.

//  CONSTANTS
const TUint8 KCrMediumDigestLength = 16;
const TUint8 KCrLongDigestLength = 20;

const TUint8 KDigestInputSize = 64;

const TUint8 KCrDESKeyLength= 8;
const TUint8 KCrDESIVLength = 8;

const TUint8 KCrRCLongKeyLength = 16;
const TUint8 KCrRCMediumKeyLength = 8;
const TUint8 KCrRCShortKeyLength = 5;
const TUint8 KCrRCIVLength = 8;

const TUint8 KCrPaddingLength = 8;

//  MACROS
//  DATA TYPES

// Algorithms.
enum TCrAlgorithm
    {
    // Message digest algorithms.
    ECrMD2,
    ECrMD5,
    ECrRIPEMD,
    ECrSHA,
    ECrSHA1,
    ECrHMAC,          // item is used only with Symbian library
    ECrHMAC_MD5,      // item is used only with NoCry library
    ECrHMAC_RIPEMD,   // item is used only with NoCry library
    ECrHMAC_SHA1,     // item is used only with NoCry library
    ECrLAST_DIGEST,         

    // Symmetric crypto algorithms.
    ECrDES,
    ECrDES2,
    ECrDES3,
    ECrDESX,
    ECrRC2,
    ECrRC4,
    ECrRC5,
    ECrLAST_SYMM_CRYPTO,    
    };                   

// Mode of the symmetric crypto algorithm.
enum TCrSymmMode
    {
    ECrCBC,
    ECrCFB,
    ECrECB,
    ECrOFB,
    };

// CLASS DECLARATION

/**
*  class CCrAlgInfo
*  CCrAlgInfo contains all information related to symmetric
*  crypto and digest algorithms.
*
*  @lib crpkcs12.lib
*  @since Series 60 3.0
*/
NONSHARABLE_CLASS( CCrAlgInfo ): public CBase
    {
    /////////////////////////////////////////////
    // Constructors and destructors.
    private:
        CCrAlgInfo();

        void ConstructL(
            const TCrAlgorithm aType,
            const TInt         aLen,
            const TInt         aIVLen = 0,
            const TDesC8*      aKey = NULL,
            const TDesC8*      aIV = NULL,
            const TBool        aEncrypt = ETrue,
            const TBool        aSingleBlock = ETrue,
            const TCrSymmMode  aMode = ECrCBC);
        
    public:
        ~CCrAlgInfo();

        /**
        * Constructors
        * @param aType Type of the algorithm of this object
        * @param aKey Key of this object. 
        * @param aIV Initialization vector of this object. 
        * @param aEncrypt Encrypt if true, otherwise decrypt. 
        * @param aSingleBlock Single block mode if true. 
        * @param aMode Algorithm mode.
        * @return Pointer to the created object.
        */
        static CCrAlgInfo* NewLC(
            const TCrAlgorithm aType,
            const TDesC8&      aKey,
            const TDesC8&      aIV,
            const TBool        aEncrypt = ETrue,
            const TBool        aSingleBlock = ETrue,
            const TCrSymmMode  aMode = ECrCBC);

        static CCrAlgInfo* NewLC(
            const TCrAlgorithm aType);

        static CCrAlgInfo* NewL(
            const TCrAlgorithm aType,
            const TDesC8&      aKey,
            const TDesC8&      aIV,
            const TBool        aEncrypt = ETrue,
            const TBool        aSingleBlock = ETrue,
            const TCrSymmMode  aMode = ECrCBC);

        static CCrAlgInfo* NewL(
            const TCrAlgorithm aType);

    private: 
        // Sets parity bits.
        TCrStatus SetParityBits(TPtr8 aPtrKey);
    
    public: // Data
        // Type of the algorithm.
        TCrAlgorithm iType;

        // Pointer to initialized algorithm object.
        TAny* iAlgorithmObject;

        // This buffer contains last portion of the
        // data to encrypt/decrypt which is encrypted/
        // decrypted in FinalCryptSymm function. 
        // Relevant only if symmetric crypto algorithm 
        // in question.
        HBufC8* iLastPortion;
    
        // This buffer contains digest if calculating
        // message digest. Relevant only if digest 
        // algorithm in question.
        HBufC8* iDigest;

        // This buffer contains key if en/decryption
        // in process. Relevant only if crypt 
        // algorithm in question.
        HBufC8* iKey;

        // This buffer contains initialization
        // vector if en/decryption in process.
        // Relevant only if crypt algorithm in question.
        HBufC8* iIV;

        // Is this object for encrypting or decrypting?
        // Relevant only if symmetric crypto algorithm
        // in question.
        TBool iEncrypt;

        // True if only one block.
        TBool iSingleBlock;
    
        // Block status, first/middle/last. Usage depends on algorithm used.
        TInt iBlockStatus;
    
        // Mode of a symmetric crypto algorithm. Relevant
        // only if symmetric crypto algorithm in question.
        TCrSymmMode iMode;

        // Padding. Relevant only if Symbian symmetric
        // crypto algorithm in question.
        TAny* iPadding;

    };

#endif // CR_ALGINFO_H

// End of File