cryptoservices/certificateandkeymgmt/inc/pkcs7encrypteddataobject.h
changeset 0 2c201484c85f
child 8 35751d3474b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptoservices/certificateandkeymgmt/inc/pkcs7encrypteddataobject.h	Wed Jul 08 11:25:26 2009 +0100
@@ -0,0 +1,195 @@
+/*
+* 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 __PKCS7_ENCRYPTED_DATA_OBJECT_H__
+#define __PKCS7_ENCRYPTED_DATA_OBJECT_H__
+
+#include <asn1dec.h>
+#include <signed.h>
+#include <pbedata.h>
+#include <asnpkcs.h>
+#include <pkcs7contentinfo_v2.h>
+#include <pkcs12kdf.h>
+
+/**
+ A representation of a PKCS7 (Encrypted data) entity
+ This class decodes the PKCS7 Encrypted Data content. 
+ It provides various exported methods which will 
+ return the values present in the EncryptedData ::= SEQUENCE.
+ */
+class CPKCS7EncryptedDataObject : public CBase
+	{
+public:
+	enum TContentType
+	/**
+	 Identifies the type of ContentType present in the EncryptedContentInfo ::= SEQUENCE
+	 */
+		{
+	    EPkcs7Data = 1
+		};  
+		
+   	/**
+	 Creates a new PKCS#7 EncryptedData object. 
+	 @param     aContentInfo contains a reference to CPKCS7ContentInfo.
+	 @return    A pointer to the newly allocated object.
+	 */
+	IMPORT_C static CPKCS7EncryptedDataObject* NewL(const CPKCS7ContentInfo& aContentInfo);
+	
+	/**
+	 Destructor.
+	 */
+	virtual ~CPKCS7EncryptedDataObject();
+    /**
+     Provides access to the version number within the EncryptedData SEQUENCE.
+     Version is the syntax version number.It shall be 0 for this version of the standard
+	 @return    The version number
+	 */ 
+    IMPORT_C TInt Version() const;
+    
+	/**
+	 Provides access to the ContentType present within the EncryptedContentInfo. 
+	 ContentType indicates the type of content.This is represented using the OID.
+     @return    ContentType present in the EncryptedContentInfo structure.
+     */ 
+    IMPORT_C CPKCS7EncryptedDataObject::TContentType ContentType() const;
+    
+    /**
+     Provides access to the encryptedContent within the EncryptedContentInfo SEQUENCE.
+     encryptedContent is OPTIONAL in EncryptedContentInfo SEQUENCE
+     This will return a NULL pointer in case there is no encryptedContent
+	 @return    The encryptedContent
+     */
+	IMPORT_C const TDesC8& EncryptedContentInfoData() const;
+	
+    /**
+     Provides access to the contentEncryptionAlgorithm within the 
+     EncryptedContentInfo SEQUENCE.
+	 @return    A CPBEncryptParms object which has the Encrypt Parameters 
+     			EncryptedContent present in EncryptedContentInfo Sequence
+     */
+    IMPORT_C const CPBEncryptParms& EncryptParams() const;
+    
+    /**
+	 This method decrypts the encrypted information. The caller assumes 
+	 ownership of the returned object.
+	 @param     aPassword is the password used for decryption.
+	 @return    The plaintext data obtained after decryption.
+	 @leave     KErrNotSupported if otherthan pkcs12 pbeIds used.
+	 @leave     KErrGeneral if decrypt descriptor length is less than 0.
+	 @see		PKCS12KDF, TPBPassword, CPBEncryptElement, CPBDecryptor.
+	 */
+	IMPORT_C HBufC8* DecryptDataL(const TDesC& aPassword) const;
+	
+private:
+	/**
+	 Constructor.
+	 */
+    CPKCS7EncryptedDataObject(void);
+    
+    /**
+     Copy Constructor.
+     @param aEncryptedDataObject A CPKCS7EncryptedDataObject object.
+     */
+    CPKCS7EncryptedDataObject(const CPKCS7EncryptedDataObject& aEncryptedDataObject);
+    
+    /**
+	 Assignment operator.
+	 @param aEncryptedDataObject A CPKCS7EncryptedDataObject object.
+	 @return A reference to CPKCS7EncryptedDataObject class.
+	 */
+	CPKCS7EncryptedDataObject& operator=(const CPKCS7EncryptedDataObject& aEncryptedDataObject);
+    
+    /**    	
+     This decrypt the encrypted data. Below is the ASN1 syntax.
+	 
+	 EncryptedData ::= SEQUENCE
+	  	 {
+	     version                Version,
+	     encryptedContentInfo   EncryptedContentInfo
+	  	 } 
+	 EncryptedContentInfo ::= SEQUENCE 
+	  	 {
+	     contentType                 PKCS7-CONTENT-TYPE.&id({PKCS7ContentTable}),
+	     contentEncryptionAlgorithm  ContentEncryptionAlgorithmIdentifier,
+	     encryptedContent            [0]  ENCRYPTED{PKCS7-CONTENT-TYPE.&Type({PKCS7ContentTable}{@.contentType})} OPTIONAL
+	  	 }
+	 EncryptedContent ::= OCTET STRING
+	 
+	 ContentInfo ::= SEQUENCE 
+	  	{
+	    contentType ContentType,
+	    content[0] EXPLICIT ANY DEFINED BY contentType OPTIONAL 
+	  	}
+	 ContentType ::= OBJECT IDENTIFIER
+	 
+	 @param 	aContentInfo Contains a reference to  CPKCS7ContentInfo
+	 @leave		KErrArgument if the data is not valid PKCS#7 EncryptedData Structure.
+	 @see       CPKCS7ContentInfo
+     */
+	void ConstructL(const CPKCS7ContentInfo& aContentInfo);
+	
+	/**
+     Provides access to the Encrypt Parameters present within the 
+     ContentEncryptionAlgorithm Sequence. Below is the ASN1 Syntax.
+     
+     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
+               }
+
+	 @param     aBinaryData  which is the ContentEncryptionAlgorithmIdentifier
+	            and is AlgorithIdentifier Type.
+	            AlgorithmIdentifier: A type that identifies an 
+	            algorithm (by object identifier) and associated parameters.
+     @return    Encrypt Parameters. This Identifies the 
+	            content-encryption algorithm (and any associated parameters) 
+	            under which the content is encrypted.
+	 @leave     KErrArgument if the data is not valid PKCS#7 ContentEncryptionAlgorithm 
+	 			sequence.
+	 @see 	    CPBEncryptParms, TASN1DecPKCS5.
+     */ 
+    CPBEncryptParms* DecodeContentEncryptionAlgorithmL(const TDesC8& aBinaryData) const;
+    
+	
+private:
+     /** version is the syntax version number in PKCS#7 EncryptedData ::= SEQUENCE*/
+     TInt iVersion;
+     
+	 /** Indicates the type of content in PKCS7 EncryptedContentInfo Sequence */
+	 TContentType iContentType;
+	 
+	 /** Identifies the content-encryption algorithm (and any associated parameters) 
+	     under which the content is encrypted */
+     CPBEncryptParms* iEncryptParams;
+          
+	 /** Contains the encrypted content */
+	 TPtrC8 iEncryptedContent;
+};
+ 
+#endif //__PKCS7_ENCRYPTED_DATA_OBJECT_H__