diff -r 000000000000 -r 2c201484c85f cryptoservices/certificateandkeymgmt/inc/pkcs7encrypteddataobject.h --- /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 +#include +#include +#include +#include +#include + +/** + 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__