diff -r 000000000000 -r 2c201484c85f cryptoservices/certificateandkeymgmt/inc/pkcs12.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cryptoservices/certificateandkeymgmt/inc/pkcs12.h Wed Jul 08 11:25:26 2009 +0100 @@ -0,0 +1,223 @@ +/* +* Copyright (c) 2005-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: +* +*/ + + + + +/** + @file + @publishedPartner + @released +*/ + +#ifndef __PKCS12_H__ +#define __PKCS12_H__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace PKCS12 +{ +class CDecPkcs12MacData; + +/** PKCS12 Version */ +const TInt KPkcs12Version = 3; + +/** + Contains methods to decode and return the PFX structure. + The structure contains the Version, MacData and AuthSafe. + MacData is OPTIONAL. + */ +class CDecPkcs12 : public CBase + { +public: + enum TIntegrityMode + /** + Identifies the type of Integrity Mode used in the PKCS12 PFX Structure + */ + { + /** Password Integrity Mode used in the PKCS12 PFX Structure */ + EPasswordIntegrityMode = 1, + + /** Public Key Integrity Mode used in the PKCS12 PFX Structure */ + EPublicKeyIntegrityMode + }; + /** + Creates a new PKCS#12 object. + + @param aRawData Contains a PKCS#12 PFX structure + @return A pointer to the newly allocated object. + @leave KErrArgument if the aRawData is not Pkcs12 PFX Structure. + */ + IMPORT_C static CDecPkcs12* NewL(const TDesC8& aRawData); + + /** + Creates a new PKCS#12 object. + + @param aRawData Contains a PKCS#12 PFX structure + @return A pointer to the newly allocated object. + @leave KErrArgument if the aRawData is not Pkcs12 PFX Structure. + */ + IMPORT_C static CDecPkcs12* NewLC(const TDesC8& aRawData); + + /** + Creates a new PKCS#12 object. + + @param aStream contains a PKCS#12 PFX structure + @return A pointer to the newly allocated object. + @leave KErrArgument if the aRawData is not Pkcs12 PFX Structure. + */ + IMPORT_C static CDecPkcs12* NewL(RReadStream& aStream); + + /** + Creates a new PKCS#12 object. + + @param aStream Contains a PKCS#12 PFX structure + @return A pointer to the newly allocated object. + @leave KErrArgument if the aRawData is not Pkcs12 PFX Structure. + */ + IMPORT_C static CDecPkcs12* NewLC(RReadStream& aStream); + + /** + Identifies the type of integrity mode used. + In the case of Password Integrity mode, OID is 1.2.840.113549.1.7.1. + In the case of Public Key Integrity mode, OID is 1.2.840.113549.1.7.2. + + @return An enum that identifies the type of integrity mode used. + */ + IMPORT_C TIntegrityMode IntegrityMode() const; + + /** + Returns the Version number contained in the PKCS12 PFX Structure. + @return Returns the Version number contained in the PKCS12 PFX Structure.. + */ + IMPORT_C TInt Version() const; + + /** + Returns the authenticated safe. + This authenticated safe is used to find the integrity mode used + and to verify the integrity of the packet. + + @return A reference to the CPKCS7ContentInfo object. + */ + IMPORT_C const CPKCS7ContentInfo& AuthenticatedSafe() const; + + /** + The MacData, which contains: + - The Mac, that is the PKCS#7 digest info structure. + - The MacSalt. + - The iteration count. + + @return Returns CDecPKCS12MacData object pointer if the MacData is present in the PFX Structure + Returns NULL pointer if the MacData is absent in the PFX Structure. + Returned pointer ownership retains with the object. + */ + IMPORT_C const CDecPkcs12MacData* MacData() const; + + /** + These objects represents the ContentInfo Sequences present in the + AuthenticatedSafe Sequence. + + @return An array of ContentInfo objects + @see CPKCS7ContentInfo + */ + IMPORT_C const RPointerArray& AuthenticatedSafeContents() const; + + /** + Destructor. + */ + virtual ~CDecPkcs12(); + +private: + /** + This decodes the entire PFX structure + + Main PKCS12 Structure. + PFX ::= SEQUENCE + { + version INTEGER {v3(3)}(v3,...), + authSafe ContentInfo, + macData MacData OPTIONAL + } + + @param aRawData Contains a PKCS#12 PFX Structure. + @leave KErrArgument if the aRawData is not a Valid Pkcs12 PFX Structure. + @see CPKCS7ContentInfo, CDecPkcs12MacData, CPKCS7SignedObject. + */ + void ConstructL(const TDesC8& aRawData); + + /** + This method is used to internalise that object and takes a reference + to an RReadStream as the interface to the read stream. + @param aStream Contains a PKCS#12 PFX Structure. + @leave KErrArgument if the aStream is not Pkcs12 PFX Structure. + */ + void InternalizeL(RReadStream& aStream); + + /** + Constructor. + */ + CDecPkcs12(); + + /** + Construtor. + */ + CDecPkcs12(RPointerArray aContentInfo); + + /** + Copy Constructor. + @param aDecPkcs12 A CDecPkcs12 object + */ + CDecPkcs12(const CDecPkcs12& aDecPkcs12); + + /** + Assignment operator. + @param aDecPkcs12 A CDecPkcs12 object. + @return A reference to CDecPkcs12 class. + */ + CDecPkcs12& operator=(const CDecPkcs12& aDecPkcs12); + +private: + /** PKCS12 PFX Structure Version number */ + TInt iVersion; + + /** Integrity Mode used in PKCS12 PFX Structure*/ + TIntegrityMode iMode; + + /** Contains the macData structure present + in the PKCS12 PFX Structure*/ + CDecPkcs12MacData* iMacData; + + /** This contains the entire AuthenticatedSafe Data + present in the PKCS12 PFX Structure*/ + CPKCS7ContentInfo* iAuthenticatedSafeData; + + /** This Contains an Array of ContentInfos present + within the AuthenticatedSafe of PKCS12 PFX Structure*/ + RPointerArray iContentInfos; + }; +} // namespace PKCS12 + +#endif // __PKCS12_H__