cryptoservices/certificateandkeymgmt/inc/pkcs12.h
changeset 0 2c201484c85f
child 8 35751d3474b7
--- /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 <s32strm.h>
+#include <asn1dec.h>
+#include <x509cert.h>
+#include <asnpkcs.h>
+#include <pkcs7contentinfo_v2.h>
+#include <pkcs7digestinfo.h>
+#include <pkcs7encrypteddataobject.h>
+#include <pkcs7signedobject.h>
+#include <pkcs12macdata.h>
+#include <pkcs12safebag.h>
+
+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<CPKCS7ContentInfo>& 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<CPKCS7ContentInfo> 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<CPKCS7ContentInfo> iContentInfos;
+  };
+} // namespace PKCS12 
+
+#endif // __PKCS12_H__