Merge Bug 1301 - missing SWI certificate store and Bug 1170 - Browser root certs
/** 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__