cryptoservices/certificateandkeymgmt/inc/pkcs12bags.h
changeset 8 35751d3474b7
parent 0 2c201484c85f
--- a/cryptoservices/certificateandkeymgmt/inc/pkcs12bags.h	Tue Jul 21 01:04:32 2009 +0100
+++ b/cryptoservices/certificateandkeymgmt/inc/pkcs12bags.h	Thu Sep 10 14:01:51 2009 +0300
@@ -1,456 +1,454 @@
-/*
-* 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_BAGS_H__
-#define __PKCS12_BAGS_H__
-
-#include <asn1dec.h>
-#include <signed.h>
-#include <asnpkcs.h>
-#include <pkcs12kdf.h>
-#include <pkcs12safebag.h>
-#include <pkcs12attribute.h>
-#include <pkcs7contentinfo_v2.h>
-#include <pkcs7encrypteddataobject.h>
-
-namespace PKCS12
-{
-/** Object identifier for KeyBag */
-_LIT(KPkcs12KeyBagOID, "1.2.840.113549.1.12.10.1.1"); 	
-
-/** Object identifier for ShroudedKeyBag */
-_LIT(KPkcs12ShroudedKeyBagOID, "1.2.840.113549.1.12.10.1.2"); 
-
-/** Object identifier for CertBag */
-_LIT(KPkcs12CertBagOID, "1.2.840.113549.1.12.10.1.3"); 
-
-/** Object identifier for CrlBag */
-_LIT(KPkcs12CrlBagOID, "1.2.840.113549.1.12.10.1.4"); 
-
-/** Object identifier for SecretBag */
-_LIT(KPkcs12SecretBagOID, "1.2.840.113549.1.12.10.1.5"); 
-
-/** Object identifier for SafeContentsBag */
-_LIT(KPkcs12SafeContentsBagOID, "1.2.840.113549.1.12.10.1.6");
-
-/** Object identifier for x509 certificate */
-_LIT(KX509CertificateOID,"1.2.840.113549.1.9.22.1"); 
-
-/**
- This class decodes the KeyBag present in the SafeBag.
- It has a method to get the PrivatKeyInfo
- */
-class CDecPkcs12KeyBag : public CDecPkcs12SafeBag
-	{
-public:
-    /**
-	 Creates a new PKCS#12KeyBag object.
-	  
-	 @param  aSafeBagData Contains a PKCS#12 SafeBag Structure.
-	 @return A pointer to the newly allocated object.
-	 @leave  KErrAgrument if the data is not a sequence or class tag name 
-	  		 is not Universal and if iPrivateKeyInfo is NULL.
-	 */
-	IMPORT_C static CDecPkcs12KeyBag* NewL(const TDesC8& aSafeBagData);
-	
-    /**
-     The PrivateKey information present in the KeyBag.
-     The returned ASN1 sequence respects the following grammar:
-      
- 	 	PrivateKeyInfo ::= SEQUENCE {
- 	 	version Version,
- 	 	privateKeyAlgorithm PrivateKeyAlgorithmIdentifier,
- 	 	privateKey PrivateKey,
- 	 	attributes [0] IMPLICIT Attributes OPTIONAL }
- 	 	
- 	 	Version ::= INTEGER
- 	 	PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier
- 	 	PrivateKey ::= OCTET STRING
- 	 	Attributes ::= SET OF Attribute
-     
-  	 @return A pointer to a CDecPKCS8Data object. Ownership of memory is transferred 
-  	 to the caller.
-  	 @see    CDecPKCS8Data
-	 */
-	IMPORT_C CDecPKCS8Data* PrivateKeyInfoL() const;
-	
-	/**
-	 Destructor.
-	 */
-	virtual ~CDecPkcs12KeyBag();
-	
-private:
-	/**
-     Decodes the entire KeyBag structure.
-     @param aSafeBagData Contains a PKCS#12 SafeBag Structure.
-     @leave  KErrAgrument if the data is not a sequence or class tag name 
-	  		 is not Universal and if iPrivateKeyInfo is NULL.
-	 @see	 TASN1DecPKCS8		 
-     */
-	void ConstructL(const TDesC8& aSafeBagData);
-    
-    /**
-	 Constructor.
-	 */
-	CDecPkcs12KeyBag();
-	
-	/**
-	 Copy Constructor.
-	 @param aDecPkcs12keyBag A CDecPkcs12KeyBag object.
-	 */
-	CDecPkcs12KeyBag(const CDecPkcs12KeyBag& aDecPkcs12keyBag);
-	
-	/**
-	 Assignment operator.
-	 @param aDecPkcs12keyBag A CDecPkcs12KeyBag object.
-	 @return A CDecPkcs12KeyBag class.
-	 */
-	CDecPkcs12KeyBag& operator=(const CDecPkcs12KeyBag& aDecPkcs12keyBag);
-};
-
-
-/**
- This class decodes the ShroudedKeyBag present in the SafeBag.
- It has a method to get the PrivatKeyInfo
- */
-class CDecPkcs12ShroudedKeyBag : public CDecPkcs12SafeBag
-	{
-public:
-   /**
-	Creates a new PKCS#12KeyBag object.
-	 
-	@param aSafeBagData Contains a PKCS#12 shroudedKeyBag structure.
-	@return A pointer to the newly allocated object.
-	@leave  KErrAgrument if the data is not safeBag structure.
-	*/
-	IMPORT_C static CDecPkcs12ShroudedKeyBag* NewL(const TDesC8& aSafeBagData);
-	
-   /**
-    The PrivateKey Information present in the ShroudKeyBag. 
-    Below is the ASN.1 sequence.
-    
-    ContentEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
- 
- 	AlgorithmIdentifier: A type that identifies an algorithm (by object identifier) and associated parameters
- 	AlgorithmIdentifier ::= SEQUENCE 
-                        {
-                        algorithm   ALGORITHM.&id({SupportedAlgorithms}),
-                        parameters  ALGORITHM.&Type({SupportedAlgorithms}{@ algorithm}) OPTIONAL
-                        }    
-                        
-	@return A pointer to a CDecPKCS8Data object. Ownership is transferred to the caller.
-	@leave  KErrAgrument if the data is not a sequence or class tag name 
-	  		 is not Universal.
-	@leave  KErrNotSupported if otherthan PKCS12 pbeIds. 
-	@leave  KErrGeneral	   if the decryption of the final part length is less than 0.
-	@see    TASN1DecPKCS5, CPBEncryptElement, PKCS12KDF, CPBDecryptor, CDecPKCS8Data.
-	*/
-	IMPORT_C CDecPKCS8Data* PrivateKeyInfoL(TDesC& aPassword) const;
-		
-	/**
-	 Destructor.
-	 */
-	virtual ~CDecPkcs12ShroudedKeyBag();
-	
-private:
-	/**
-     This decodes the entire KeyBag structure.
-     @param  aSafeBagData Contains a PKCS#12 shroudedKeyBag Structure.
-     @leave  KErrAgrument if the data is not a sequence or class tag name 
-	  		 is not Universal.
-	 @see	 TASN1DecPKCS8
-     */
-	void ConstructL(const TDesC8& aSafeBagData);
-    
-    /**
-	 Constructor.
-	 */
-	CDecPkcs12ShroudedKeyBag();
-	
-	/**
-	 Copy Constructor.
-	 @param aDecPkcs12ShroudedKeyBag A CDecPkcs12ShroudedKeyBag object.
-	 @return A CDecPkcs12ShroudedKeyBag class.
-	 */
-	CDecPkcs12ShroudedKeyBag(const CDecPkcs12ShroudedKeyBag& aDecPkcs12ShroudedKeyBag);
-	
-	/**
-	 Assignment operator.
-	 @param aDecPkcs12ShroudedKeyBag A CDecPkcs12ShroudedKeyBag object.
-	 */
-	CDecPkcs12ShroudedKeyBag& operator=(const CDecPkcs12ShroudedKeyBag& aDecPkcs12ShroudedKeyBag);
-	};
-
-
-/**
- This class decodes the CertBag 
- It has methods to get the CertId and the CertValue present in the CertBag
- The X509Certificate() method returns the x509 certificate 
- in case the CertId is x509
- */
-class CDecPkcs12CertBag : public CDecPkcs12SafeBag
-	{
-public:
-	/**
-	 Creates a new PKCS#12CertBag object.
-	  
-	 @param aCertBagData contains a PKCS#12 CertBag Structure.
-	 @leave KErrArgument if the data is not a sequence or class tag name 
-	  		 is not Universal.
-     @leave	KErrNotSupported if otherthan X509 certificate is present.
-	 @return A pointer to the newly allocated object.
-	 */
-	 IMPORT_C static CDecPkcs12CertBag* NewL(const TDesC8& aCertBagData);
-	 
-	/**
-	 This method returns the OID present in the certId field of CertBag sequence.	 	 	 	 
-	 @return Returns OID present in the certId feild of CertBag sequence
-	 */
-	 IMPORT_C const TDesC& CertId() const;
-	 
-	/**
-	 This method returns the DER encoded certValue present in the CertBag sequence.	 	 
-	 @return The DER encoded certValue present in the CertBag sequence.
-	 @see  X509Certificate
-	 */
-	 IMPORT_C const TDesC8& CertValue() const;
-	 
-	/**
-	 This method returns the decoded x509 certificate.	 
-	 @return Returns a pointer to a CX509Certificate object if the certificate of type 
-	 X509; otherwise, null is returned. Ownership of memory is transferred to the caller.			 
-	 @see CertValue
-	 */
-	 IMPORT_C CX509Certificate* X509CertificateL() const;
-	 
-	 /**
-	 Destructor.
-	 */
-	virtual ~CDecPkcs12CertBag();
-private:
-	/**
-     This decodes the entire CertBag structure.
-     @param aCertBagData contains a PKCS#12 CertBag Structure.
-     @leave KErrArgument if the data is not a sequence or class tag name 
-	  		 is not Universal.      
-     @see	CDecPkcs12SafeBag, CX509Certificate.
-     */
-	 void ConstructL(const TDesC8& aCertBagData);
-	        
-    /**
-	 Constructor.
-	 */
-	 CDecPkcs12CertBag();
-	
-	/**
-	 Copy Constructor.
-	 @param aDecPkcs12CertBag A CDecPkcs12CertBag object.
-	 */
-	CDecPkcs12CertBag(const CDecPkcs12CertBag& aDecPkcs12CertBag);
-	
-	/**
-	 Assignment operator.
-	 @param aDecPkcs12CertBag A CDecPkcs12CertBag object.
-	 @return A CDecPkcs12CertBag class.
-	 */
-	CDecPkcs12CertBag& operator=(const CDecPkcs12CertBag& aDecPkcs12CertBag);
-     
-private:
-    /** Contains Object identifier indicating the certificate type*/
-	HBufC* iCertId;
-	
-	/** Contains the certificate which is encoded and is an OCTET String */
-	TPtrC8 iCertValue;	
-	};
-
-/**
- Decodes the SafeContents bag present within a SafeBag and 
- returns an array of Safebags present within this SafeContents bag.
- */
-class CDecPkcs12SafeContentsBag : public CDecPkcs12SafeBag
-	{
-public:
-    /**
-	 Creates a new PKCS#12SafeContentsBag object.
-	  
-	 @param aSafeContentsBagData Contains a PKCS#12 SafeBag structure.
-	 @return A pointer to the newly allocated object.
-	 @leave KErrArgument if the data is not a sequence or class tag name 
-	  		 is not Universal.
-	 */
-	IMPORT_C static CDecPkcs12SafeContentsBag* NewL(const TDesC8& aSafeContentsBagData);
-	/**
-	 The SafeContents Bag contains one or more Safe Bags in it.This 
-	 method returns the reference to all these SafeBags.
-	 
-	 @return An array of SafeBags present within the SafeContentsBag
-	 */
-	IMPORT_C const RPointerArray<CDecPkcs12SafeBag>& SafeBags() const; 
-	
-	/**
-	 Destructor.
-	 */
-	virtual ~CDecPkcs12SafeContentsBag();
-	
-private:
-    /**
-     This decodes the entire SafeContentsBag structure.
-     @param aSafeContentsBagData Contains a PKCS#12 SafeBag structure.
-     @leave KErrArgument if the data is not a sequence or class tag name 
-	  		 is not Universal.
-	 @see   CDecPkcs12SafeBag
-     */
-	void ConstructL(const TDesC8& aSafeContentsBagData);     
-	
-	/**
-	 Constructor.
-	 */
-	 CDecPkcs12SafeContentsBag();
-		
-	/**
-	 Copy Constructor.
-	 @param aDecPkcs12SafeContentsBag A CDecPkcs12SafeContentsBag object.
-	 */
-	CDecPkcs12SafeContentsBag(const CDecPkcs12SafeContentsBag& aDecPkcs12SafeContentsBag);
-	
-	/**
-	 Assignment operator.
-	 @param aDecPkcs12SafeContentsBag A CDecPkcs12SafeContentsBag object.
-	 @return A reference to CDecPkcs12SafeContentsBag class.
-	 */
-	CDecPkcs12SafeContentsBag& operator=(const CDecPkcs12SafeContentsBag& aDecPkcs12SafeContentsBag);
-    
-private:   
-     /** Contains an array of SafeBags present within the SafeContents Bag */
-	 RPointerArray<CDecPkcs12SafeBag> iSafeBags;
-	 };	
-	 
-class CDecPkcs12SafeContents : public CBase
-	{
-public:
-	/**
-	 Creates a new CDecPkcs12SafeContents object for plain Data.
-	  
-	 @param  aSafeContentsBagData Contains a PKCS#7 ContentInfo Structure.
-	 @return A pointer to the newly allocated object.
-	 @leave  KErrArgument if the data is not a sequence or class tag name 
-	  		 is not Universal.
-	 */
-	IMPORT_C static CDecPkcs12SafeContents* NewL(const CPKCS7ContentInfo& aSafeContentsBagData);
-	
-	/**
-	 Creates a new CDecPkcs12SafeContents object for Encrypted Data.
-	  
-	 @param  aSafeContentsBagData Contains a PKCS#7 ContentInfo Structure.
-	 @param	 aPassword			  aPassword is the password used for decryption. 
-	 @return A pointer to the newly allocated object.
-	 @leave  KErrArgument if the data is not a sequence or class tag name 
-	  		 is not Universal.
-	 */
-	IMPORT_C static CDecPkcs12SafeContents* NewL(const CPKCS7ContentInfo& aSafeContentsBagData, const TDesC& aPassword);
-
-	/**
-	 Creates a new CDecPkcs12SafeContents object for Enveloped Data.
-	 The class doesn't support the public key privacy mode  if the 
-	 ContentInfo contains an EnvelopedData object.Client should decrypt 
-	 the Envelope Data. A recipient opens the envelope by decrypting the 
-	 one of the encrypted content-encryption keys with the recipient's 
-	 private key and decrypts the encrypted content with the recovered 
-	 content-encryption key and pass the plain data. 
-	 @param  aSafeContentsBagData Contains a PKCS#7 ContentInfo Structure ContentData.
-	 @return A pointer to the newly allocated object.
-	 @leave  KErrArgument if the data is not a sequence or class tag name 
-	  		 is not Universal.
-	 */
-	IMPORT_C static CDecPkcs12SafeContents* NewL(const TDesC8& aSafeContentsBagData);
-	
-	/**
-	 The method returns the plain data.
-	 @return A pointer to descriptor containing decrypted data.
-	 		 Returns NULL pointer if the decrypted data is not present.		 
-	 */
-	IMPORT_C const TDesC8* DecryptedData() const;
-	
-	/**
-	 The method returns array of safebags objects.
-	 @return A pointer to array of safeBag objects.
-	 */
-	IMPORT_C const RPointerArray<CDecPkcs12SafeBag>& SafeContentsBags() const;
-	
-	/**
-	 Destructor.
-	 */
-	virtual ~CDecPkcs12SafeContents();
-	
-private:
-	/**
-	 These objects represents the SafeBag Sequences present in the 
-	 SafeContents Bag Sequence.
-	 
-	 @param aSafeContent Contains data to decode the bags. 
-	 @leave KErrArgument if the aSafeContent is not a Sequence and class tag is not Universal.
-	 @leave	KErrNotSupported if any bag otherthan keyBag, shroudedKeyBag,CertBag,CRLBag,SecretBag
-	 						 and SafeContentBag.
-	 @see   CDecPkcs12SafeBag
-	 */
-	void ConstructL(const TDesC8& aSafeContent);
-	
-	/**
-	 This method decrypts the encrypted information. 
-	 @param		aContentInfo Contains a PKCS#7 ContentInfo Structure.
-	 @param     aPassword is the password used for decryption.
-	 */
-	void DecodeEncryptedDataL(const CPKCS7ContentInfo& aContentInfo, const TDesC& aPassword);
-	
-	/**
-	 Constructor.
-	 */
-	CDecPkcs12SafeContents();
-	
-	/**
-	 Copy Constructor.
-	 @param aDecPkcs12SafeContents A CDecPkcs12SafeContents object.
-	 */
-	CDecPkcs12SafeContents(const CDecPkcs12SafeContents& aDecPkcs12SafeContents);
-	
-	/**
-	 Assignment operator.
-	 @param aDecPkcs12SafeContents A CDecPkcs12SafeContents object.
-	 @return A reference to CDecPkcs12SafeContents class.
-	 */
-	CDecPkcs12SafeContents& operator=(const CDecPkcs12SafeContents& aDecPkcs12SafeContents);
-	
-
-private:
-	/** Contains an array of SafeBags objects */
-	RPointerArray<CDecPkcs12SafeBag> iSafeBags;
-	
-	/** Contains plain data */
-	HBufC8* iDecryptedData;
-	
-	};
-} // namespace PKCS12
-#endif // __PKCS12BAGS_H__
+/*
+* 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_BAGS_H__
+#define __PKCS12_BAGS_H__
+
+#include <asn1dec.h>
+#include <signed.h>
+#include <asnpkcs.h>
+#include <pkcs12kdf.h>
+#include <pkcs12safebag.h>
+#include <pkcs12attribute.h>
+#include <pkcs7contentinfo_v2.h>
+#include <pkcs7encrypteddataobject.h>
+
+namespace PKCS12
+{
+/** Object identifier for KeyBag */
+_LIT(KPkcs12KeyBagOID, "1.2.840.113549.1.12.10.1.1"); 	
+
+/** Object identifier for ShroudedKeyBag */
+_LIT(KPkcs12ShroudedKeyBagOID, "1.2.840.113549.1.12.10.1.2"); 
+
+/** Object identifier for CertBag */
+_LIT(KPkcs12CertBagOID, "1.2.840.113549.1.12.10.1.3"); 
+
+/** Object identifier for CrlBag */
+_LIT(KPkcs12CrlBagOID, "1.2.840.113549.1.12.10.1.4"); 
+
+/** Object identifier for SecretBag */
+_LIT(KPkcs12SecretBagOID, "1.2.840.113549.1.12.10.1.5"); 
+
+/** Object identifier for SafeContentsBag */
+_LIT(KPkcs12SafeContentsBagOID, "1.2.840.113549.1.12.10.1.6");
+
+/** Object identifier for x509 certificate */
+_LIT(KX509CertificateOID,"1.2.840.113549.1.9.22.1"); 
+
+/**
+ This class decodes the KeyBag present in the SafeBag.
+ It has a method to get the PrivatKeyInfo
+ */
+class CDecPkcs12KeyBag : public CDecPkcs12SafeBag
+	{
+public:
+    /**
+	 Creates a new PKCS#12KeyBag object.
+	  
+	 @param  aSafeBagData Contains a PKCS#12 SafeBag Structure.
+	 @return A pointer to the newly allocated object.
+	 @leave  KErrAgrument if the data is not a sequence or class tag name 
+	  		 is not Universal and if iPrivateKeyInfo is NULL.
+	 */
+	IMPORT_C static CDecPkcs12KeyBag* NewL(const TDesC8& aSafeBagData);
+	
+    /**
+     The PrivateKey information present in the KeyBag.
+     The returned ASN1 sequence respects the following grammar:
+      
+ 	 	PrivateKeyInfo ::= SEQUENCE {
+ 	 	version Version,
+ 	 	privateKeyAlgorithm PrivateKeyAlgorithmIdentifier,
+ 	 	privateKey PrivateKey,
+ 	 	attributes [0] IMPLICIT Attributes OPTIONAL }
+ 	 	
+ 	 	Version ::= INTEGER
+ 	 	PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier
+ 	 	PrivateKey ::= OCTET STRING
+ 	 	Attributes ::= SET OF Attribute
+     
+  	 @return A pointer to a CDecPKCS8Data object. Ownership of memory is transferred 
+  	 to the caller.
+  	 @see    CDecPKCS8Data
+	 */
+	IMPORT_C CDecPKCS8Data* PrivateKeyInfoL() const;
+	
+	/**
+	 Destructor.
+	 */
+	virtual ~CDecPkcs12KeyBag();
+	
+private:
+	/**
+     Decodes the entire KeyBag structure.
+     @param aSafeBagData Contains a PKCS#12 SafeBag Structure.
+     @leave  KErrAgrument if the data is not a sequence or class tag name 
+	  		 is not Universal and if iPrivateKeyInfo is NULL.
+	 @see	 TASN1DecPKCS8		 
+     */
+	void ConstructL(const TDesC8& aSafeBagData);
+    
+    /**
+	 Constructor.
+	 */
+	CDecPkcs12KeyBag();
+	
+	/**
+	 Copy Constructor.
+	 @param aDecPkcs12keyBag A CDecPkcs12KeyBag object.
+	 */
+	CDecPkcs12KeyBag(const CDecPkcs12KeyBag& aDecPkcs12keyBag);
+	
+	/**
+	 Assignment operator.
+	 @param aDecPkcs12keyBag A CDecPkcs12KeyBag object.
+	 @return A CDecPkcs12KeyBag class.
+	 */
+	CDecPkcs12KeyBag& operator=(const CDecPkcs12KeyBag& aDecPkcs12keyBag);
+};
+
+
+/**
+ This class decodes the ShroudedKeyBag present in the SafeBag.
+ It has a method to get the PrivatKeyInfo
+ */
+class CDecPkcs12ShroudedKeyBag : public CDecPkcs12SafeBag
+	{
+public:
+   /**
+	Creates a new PKCS#12KeyBag object.
+	 
+	@param aSafeBagData Contains a PKCS#12 shroudedKeyBag structure.
+	@return A pointer to the newly allocated object.
+	@leave  KErrAgrument if the data is not safeBag structure.
+	*/
+	IMPORT_C static CDecPkcs12ShroudedKeyBag* NewL(const TDesC8& aSafeBagData);
+	
+   /**
+    The PrivateKey Information present in the ShroudKeyBag. 
+    Below is the ASN.1 sequence.
+    
+    ContentEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
+ 
+ 	AlgorithmIdentifier: A type that identifies an algorithm (by object identifier) and associated parameters
+ 	AlgorithmIdentifier ::= SEQUENCE 
+                        {
+                        algorithm   ALGORITHM.&id({SupportedAlgorithms}),
+                        parameters  ALGORITHM.&Type({SupportedAlgorithms}{@ algorithm}) OPTIONAL
+                        }    
+                        
+	@return A pointer to a CDecPKCS8Data object. Ownership is transferred to the caller.
+	@leave  KErrAgrument if the data is not a sequence or class tag name 
+	  		 is not Universal.
+	@leave  KErrNotSupported if otherthan PKCS12 pbeIds. 
+	@leave  KErrGeneral	   if the decryption of the final part length is less than 0.
+	@see    TASN1DecPKCS5, CPBEncryptElement, PKCS12KDF, CPBDecryptor, CDecPKCS8Data.
+	*/
+	IMPORT_C CDecPKCS8Data* PrivateKeyInfoL(TDesC& aPassword) const;
+		
+	/**
+	 Destructor.
+	 */
+	virtual ~CDecPkcs12ShroudedKeyBag();
+	
+private:
+	/**
+     This decodes the entire KeyBag structure.
+     @param  aSafeBagData Contains a PKCS#12 shroudedKeyBag Structure.
+     @leave  KErrAgrument if the data is not a sequence or class tag name 
+	  		 is not Universal.
+	 @see	 TASN1DecPKCS8
+     */
+	void ConstructL(const TDesC8& aSafeBagData);
+    
+    /**
+	 Constructor.
+	 */
+	CDecPkcs12ShroudedKeyBag();
+	
+	/**
+	 Copy Constructor.
+	 @param aDecPkcs12ShroudedKeyBag A CDecPkcs12ShroudedKeyBag object.
+	 @return A CDecPkcs12ShroudedKeyBag class.
+	 */
+	CDecPkcs12ShroudedKeyBag(const CDecPkcs12ShroudedKeyBag& aDecPkcs12ShroudedKeyBag);
+	
+	/**
+	 Assignment operator.
+	 @param aDecPkcs12ShroudedKeyBag A CDecPkcs12ShroudedKeyBag object.
+	 */
+	CDecPkcs12ShroudedKeyBag& operator=(const CDecPkcs12ShroudedKeyBag& aDecPkcs12ShroudedKeyBag);
+	};
+
+
+/**
+ This class decodes the CertBag 
+ It has methods to get the CertId and the CertValue present in the CertBag
+ The X509Certificate() method returns the x509 certificate 
+ in case the CertId is x509
+ */
+class CDecPkcs12CertBag : public CDecPkcs12SafeBag
+	{
+public:
+	/**
+	 Creates a new PKCS#12CertBag object.
+	  
+	 @param aCertBagData contains a PKCS#12 CertBag Structure.
+	 @leave KErrArgument if the data is not a sequence or class tag name 
+	  		 is not Universal.
+     @leave	KErrNotSupported if otherthan X509 certificate is present.
+	 @return A pointer to the newly allocated object.
+	 */
+	 IMPORT_C static CDecPkcs12CertBag* NewL(const TDesC8& aCertBagData);
+	 
+	/**
+	 This method returns the OID present in the certId field of CertBag sequence.	 	 	 	 
+	 @return Returns OID present in the certId feild of CertBag sequence
+	 */
+	 IMPORT_C const TDesC& CertId() const;
+	 
+	/**
+	 This method returns the DER encoded certValue present in the CertBag sequence.	 	 
+	 @return The DER encoded certValue present in the CertBag sequence.
+	 @see  X509Certificate
+	 */
+	 IMPORT_C const TDesC8& CertValue() const;
+	 
+	/**
+	 This method returns the decoded x509 certificate.	 
+	 @return Returns a pointer to a CX509Certificate object if the certificate of type 
+	 X509; otherwise, null is returned. Ownership of memory is transferred to the caller.			 
+	 @see CertValue
+	 */
+	 IMPORT_C CX509Certificate* X509CertificateL() const;
+	 
+	 /**
+	 Destructor.
+	 */
+	virtual ~CDecPkcs12CertBag();
+private:
+	/**
+     This decodes the entire CertBag structure.
+     @param aCertBagData contains a PKCS#12 CertBag Structure.
+     @leave KErrArgument if the data is not a sequence or class tag name 
+	  		 is not Universal.      
+     @see	CDecPkcs12SafeBag, CX509Certificate.
+     */
+	 void ConstructL(const TDesC8& aCertBagData);
+	        
+    /**
+	 Constructor.
+	 */
+	 CDecPkcs12CertBag();
+	
+	/**
+	 Copy Constructor.
+	 @param aDecPkcs12CertBag A CDecPkcs12CertBag object.
+	 */
+	CDecPkcs12CertBag(const CDecPkcs12CertBag& aDecPkcs12CertBag);
+	
+	/**
+	 Assignment operator.
+	 @param aDecPkcs12CertBag A CDecPkcs12CertBag object.
+	 @return A CDecPkcs12CertBag class.
+	 */
+	CDecPkcs12CertBag& operator=(const CDecPkcs12CertBag& aDecPkcs12CertBag);
+     
+private:
+    /** Contains Object identifier indicating the certificate type*/
+	HBufC* iCertId;
+	
+	/** Contains the certificate which is encoded and is an OCTET String */
+	TPtrC8 iCertValue;	
+	};
+
+/**
+ Decodes the SafeContents bag present within a SafeBag and 
+ returns an array of Safebags present within this SafeContents bag.
+ */
+class CDecPkcs12SafeContentsBag : public CDecPkcs12SafeBag
+	{
+public:
+    /**
+	 Creates a new PKCS#12SafeContentsBag object.
+	  
+	 @param aSafeContentsBagData Contains a PKCS#12 SafeBag structure.
+	 @return A pointer to the newly allocated object.
+	 @leave KErrArgument if the data is not a sequence or class tag name 
+	  		 is not Universal.
+	 */
+	IMPORT_C static CDecPkcs12SafeContentsBag* NewL(const TDesC8& aSafeContentsBagData);
+	/**
+	 The SafeContents Bag contains one or more Safe Bags in it.This 
+	 method returns the reference to all these SafeBags.
+	 
+	 @return An array of SafeBags present within the SafeContentsBag
+	 */
+	IMPORT_C const RPointerArray<CDecPkcs12SafeBag>& SafeBags() const; 
+	
+	/**
+	 Destructor.
+	 */
+	virtual ~CDecPkcs12SafeContentsBag();
+	
+private:
+    /**
+     This decodes the entire SafeContentsBag structure.
+     @param aSafeContentsBagData Contains a PKCS#12 SafeBag structure.
+     @leave KErrArgument if the data is not a sequence or class tag name 
+	  		 is not Universal.
+	 @see   CDecPkcs12SafeBag
+     */
+	void ConstructL(const TDesC8& aSafeContentsBagData);     
+	
+	/**
+	 Constructor.
+	 */
+	 CDecPkcs12SafeContentsBag();
+		
+	/**
+	 Copy Constructor.
+	 @param aDecPkcs12SafeContentsBag A CDecPkcs12SafeContentsBag object.
+	 */
+	CDecPkcs12SafeContentsBag(const CDecPkcs12SafeContentsBag& aDecPkcs12SafeContentsBag);
+	
+	/**
+	 Assignment operator.
+	 @param aDecPkcs12SafeContentsBag A CDecPkcs12SafeContentsBag object.
+	 @return A reference to CDecPkcs12SafeContentsBag class.
+	 */
+	CDecPkcs12SafeContentsBag& operator=(const CDecPkcs12SafeContentsBag& aDecPkcs12SafeContentsBag);
+    
+private:   
+     /** Contains an array of SafeBags present within the SafeContents Bag */
+	 RPointerArray<CDecPkcs12SafeBag> iSafeBags;
+	 };	
+	 
+class CDecPkcs12SafeContents : public CBase
+	{
+public:
+	/**
+	 Creates a new CDecPkcs12SafeContents object for plain Data.
+	  
+	 @param  aSafeContentsBagData Contains a PKCS#7 ContentInfo Structure.
+	 @return A pointer to the newly allocated object.
+	 @leave  KErrArgument if the data is not a sequence or class tag name 
+	  		 is not Universal.
+	 */
+	IMPORT_C static CDecPkcs12SafeContents* NewL(const CPKCS7ContentInfo& aSafeContentsBagData);
+	
+	/**
+	 Creates a new CDecPkcs12SafeContents object for Encrypted Data.
+	  
+	 @param  aSafeContentsBagData Contains a PKCS#7 ContentInfo Structure.
+	 @param	 aPassword			  aPassword is the password used for decryption. 
+	 @return A pointer to the newly allocated object.
+	 @leave  KErrArgument if the data is not a sequence or class tag name 
+	  		 is not Universal.
+	 */
+	IMPORT_C static CDecPkcs12SafeContents* NewL(const CPKCS7ContentInfo& aSafeContentsBagData, const TDesC& aPassword);
+
+	/**
+	 Creates a new CDecPkcs12SafeContents object for Enveloped Data.
+	 The class doesn't support the public key privacy mode  if the 
+	 ContentInfo contains an EnvelopedData object.Client should decrypt 
+	 the Envelope Data. A recipient opens the envelope by decrypting the 
+	 one of the encrypted content-encryption keys with the recipient's 
+	 private key and decrypts the encrypted content with the recovered 
+	 content-encryption key and pass the plain data. 
+	 @param  aSafeContentsBagData Contains a PKCS#7 ContentInfo Structure ContentData.
+	 @return A pointer to the newly allocated object.
+	 @leave  KErrArgument if the data is not a sequence or class tag name 
+	  		 is not Universal.
+	 */
+	IMPORT_C static CDecPkcs12SafeContents* NewL(const TDesC8& aSafeContentsBagData);
+	
+	/**
+	 The method returns the plain data.
+	 @return A pointer to descriptor containing decrypted data.
+	 		 Returns NULL pointer if the decrypted data is not present.		 
+	 */
+	IMPORT_C const TDesC8* DecryptedData() const;
+	
+	/**
+	 The method returns array of safebags objects.
+	 @return A pointer to array of safeBag objects.
+	 */
+	IMPORT_C const RPointerArray<CDecPkcs12SafeBag>& SafeContentsBags() const;
+	
+	/**
+	 Destructor.
+	 */
+	virtual ~CDecPkcs12SafeContents();
+	
+private:
+	/**
+	 These objects represents the SafeBag Sequences present in the 
+	 SafeContents Bag Sequence.
+	 
+	 @param aSafeContent Contains data to decode the bags. 
+	 @leave KErrArgument if the aSafeContent is not a Sequence and class tag is not Universal.
+	 @leave	KErrNotSupported if any bag otherthan keyBag, shroudedKeyBag,CertBag,CRLBag,SecretBag
+	 						 and SafeContentBag.
+	 @see   CDecPkcs12SafeBag
+	 */
+	void ConstructL(const TDesC8& aSafeContent);
+	
+	/**
+	 This method decrypts the encrypted information. 
+	 @param		aContentInfo Contains a PKCS#7 ContentInfo Structure.
+	 @param     aPassword is the password used for decryption.
+	 */
+	void DecodeEncryptedDataL(const CPKCS7ContentInfo& aContentInfo, const TDesC& aPassword);
+	
+	/**
+	 Constructor.
+	 */
+	CDecPkcs12SafeContents();
+	
+	/**
+	 Copy Constructor.
+	 @param aDecPkcs12SafeContents A CDecPkcs12SafeContents object.
+	 */
+	CDecPkcs12SafeContents(const CDecPkcs12SafeContents& aDecPkcs12SafeContents);
+	
+	/**
+	 Assignment operator.
+	 @param aDecPkcs12SafeContents A CDecPkcs12SafeContents object.
+	 @return A reference to CDecPkcs12SafeContents class.
+	 */
+	CDecPkcs12SafeContents& operator=(const CDecPkcs12SafeContents& aDecPkcs12SafeContents);
+	
+
+private:
+	/** Contains an array of SafeBags objects */
+	RPointerArray<CDecPkcs12SafeBag> iSafeBags;
+	
+	/** Contains plain data */
+	HBufC8* iDecryptedData;
+	
+	};
+} // namespace PKCS12
+#endif // __PKCS12BAGS_H__