diff -r 675a964f4eb5 -r 35751d3474b7 cryptoservices/certificateandkeymgmt/inc/pkcs7encrypteddataobject.h --- a/cryptoservices/certificateandkeymgmt/inc/pkcs7encrypteddataobject.h Tue Jul 21 01:04:32 2009 +0100 +++ b/cryptoservices/certificateandkeymgmt/inc/pkcs7encrypteddataobject.h Thu Sep 10 14:01:51 2009 +0300 @@ -1,195 +1,193 @@ -/* -* 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__ +/* +* 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__