diff -r 000000000000 -r 164170e6151a secsrv_plat/cms_api/inc/CCMSAuthenticatedData.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/secsrv_plat/cms_api/inc/CCMSAuthenticatedData.h Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,331 @@ +/* +* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: CMS AuthenticatedData type +* +*/ + + + +#ifndef CCMSAuthenticatedData_H +#define CCMSAuthenticatedData_H + +// INCLUDES +#include "CCMSSequence.h" +#include "CCMSEncapsulatedContentInfo.h" +#include "CCMSX509AlgorithmIdentifier.h" +#include + +// FORWARD DECLARATIONS +// Extension + +class MCMSAuthenticatedDataExtension; +class CCMSOriginatorInfo; +class CCMSRecipientInfo; +class CCMSAttribute; +class CCMSCertificateChoices; +class CCMSX509CertificateList; + +// CLASS DECLARATION +/** +* AuthenticatedData type module +* +* ASN.1 Definition: +* +* AuthenticatedData ::= SEQUENCE { +* version CMSVersion, +* originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL, +* recipientInfos RecipientInfos, +* macAlgorithm MessageAuthenticationCodeAlgorithm, +* digestAlgorithm [1] DigestAlgorithmIdentifier OPTIONAL, +* encapContentInfo EncapsulatedContentInfo, +* authenticatedAttributes [2] IMPLICIT AuthAttributes OPTIONAL, +* mac MessageAuthenticationCode, +* unauthenticatedAttributes [3] IMPLICIT UnauthAttributes OPTIONAL } +* +* AuthAttributes ::= SET SIZE (1..MAX) OF Attribute +* UnauthAttributes ::= SET SIZE (1..MAX) OF Attribute +* +* RecipientInfos ::= SET OF RecipientInfo +* +* MessageAuthenticationCode ::= OCTET STRING +* +* MessageAuthenticationCodeAlgorithm ::= AlgorithmIdentifier +* DigestAlgorithmIdentifier ::= AlgorithmIdentifier +* +* @lib cms.lib +* @since 3.0 +*/ +class CCMSAuthenticatedData : public CCMSSequence + { + private: + /** + * Container for the actual data + */ + NONSHARABLE_CLASS( CAuthenticatedDataData ) : public CBase + { + public: // destructor + ~CAuthenticatedDataData(); + + public: // data + // version + TInt iVersion; + + // originatorInfo, owned + CCMSOriginatorInfo* iOriginatorInfo; + + // recipientInfos, owned + CArrayPtr< CCMSRecipientInfo >* iRecipientInfos; + + // macAlgorithm, owned + CCMSX509AlgorithmIdentifier* iMacAlgorithm; + + // digestAlgorithm, owned + CCMSX509AlgorithmIdentifier* iDigestAlgorithm; + + // encapContentInfo, owned + CCMSEncapsulatedContentInfo* iEncapContentInfo; + + // authenticatedAttributes, owned + CArrayPtr< CCMSAttribute >* iAuthenticatedAttributes; + + // mac, owned + HBufC8* iMac; + + // unauthenticatedAttributes, owned + CArrayPtr< CCMSAttribute >* iUnauthenticatedAttributes; + + }; + + public: // Constructors and destructor + /** + * Two-phased constructor. + * NOTE: Encrypt will leave with KErrArgument if + * valid parameters are not set. + */ + IMPORT_C static CCMSAuthenticatedData* NewLC(); + + /** + * Two-phased constructor. + * Takes ownership of all parameters, except aMac which is copied. + * Leaves newly created instance in CleanupStack + */ + IMPORT_C static CCMSAuthenticatedData* NewLC( + CArrayPtr< CCMSRecipientInfo >* aRecipientInfos, + CCMSX509AlgorithmIdentifier* aMacAlgorithm, + CCMSEncapsulatedContentInfo* aEncapContentInfo, + const TDesC8& aMac ); + + /** + * Destructor. + */ + virtual ~CCMSAuthenticatedData(); + + public: // New functions + /** + * Getter for version + * @since 3.0 + * @return CMSVersion + */ + IMPORT_C TInt Version() const; + + /** + * Getter for originatorInfo + * @since 3.0 + * @return OriginatorInfo or NULL + */ + IMPORT_C const CCMSOriginatorInfo* OriginatorInfo() const; + + /** + * Getter for recipientInfos. + * @since 3.0 + * @return array of RecipientInfos + */ + IMPORT_C const CArrayPtr< CCMSRecipientInfo >& RecipientInfos() const; + + /** + * Getter for macAlgorithm. + * @since 3.0 + * @return MessageAuthenticationCodeAlgorithm + */ + IMPORT_C const CCMSX509AlgorithmIdentifier& MacAlgorithm() const; + + /** + * Getter for digestAlgorithm + * @since 3.0 + * @return DigestAlgorithmIdentifier or NULL + */ + IMPORT_C const CCMSX509AlgorithmIdentifier* DigestAlgorithm() const; + + /** + * Getter for encapContentInfo + * @since 3.0 + * @return EncapsulatedContentInfo + */ + IMPORT_C const CCMSEncapsulatedContentInfo& EncapContentInfo() const; + + /** + * Getter for authenticatedAttributes + * @since 3.0 + * @return array of Attributes or NULL + */ + IMPORT_C const CArrayPtr< CCMSAttribute >* + AuthenticatedAttributes() const; + + /** + * Getter for mac + * @since 3.0 + * @return MessageAuthenticationCode + */ + IMPORT_C const TDesC8& Mac() const; + + /** + * Getter for unauthenticatedAttributes + * @since 3.0 + * @return array of Attributes or NULL + */ + IMPORT_C const CArrayPtr< CCMSAttribute >* + UnauthenticatedAttributes() const; + + /** + * Setter for version. Default value is 0. + * @since 3.0 + * @param aVersion CMSVersion value + */ + IMPORT_C void SetVersion( TInt aVersion ); + + /** + * Setter for originatorInfo. Takes ownership. + * @since 3.0 + * @param aOriginatorInfo OriginatorInfo + */ + IMPORT_C void SetOriginatorInfoL( + CCMSOriginatorInfo* aOriginatorInfo ); + + /** + * Setter for recipientInfos. Takes ownership. + * @since 3.0 + * @param aRecipientInfos array of RecipientInfos. There must + * be at least one element in the array, otherwise thois + * method will leave with KErrArgument + */ + IMPORT_C void SetRecipientInfosL( + CArrayPtr< CCMSRecipientInfo >* aRecipientInfos ); + + /** + * Setter for macAlgorithm. Takes ownership. + * @since 3.0 + * @param aMacAlgorithm MessageAuthenticationCodeAlgorithm. If + * this parameter is null, this method leaves with KErrArgument. + */ + IMPORT_C void SetMacAlgorithmL( + CCMSX509AlgorithmIdentifier* aMacAlgorithm ); + + /** + * Setter for digestAlgorithm. Takes ownership. + * @since 3.0 + * @param aDigestAlgorithm DigestAlgorithmIdentifier + */ + IMPORT_C void SetDigestAlgorithmL( + CCMSX509AlgorithmIdentifier* aDigestAlgorithm ); + + + /** + * Setter for encapContentInfo. Takes ownership. + * @since 3.0 + * @param aEncapContentInfo EncapsulatedContentInfo. If this + * parameter is NULL, this method will leave with KErrArgument. + */ + IMPORT_C void SetEncapContentInfoL( + CCMSEncapsulatedContentInfo* aEncapContentInfo ); + + /** + * Setter for authenticatedAttributes. Takes ownership. + * @since 3.0 + * @param aAuthenticatedAttributes array of attributes. + */ + IMPORT_C void SetAuthenticatedAttributesL( + CArrayPtr< CCMSAttribute >* aAuthenticatedAttributes ); + + /** + * Setter for mac. Creates a copy. + * @since 3.0 + * @param aMac MessageAuthenticationCode + */ + IMPORT_C void SetMacL( const TDesC8& aMac ); + + /** + * Setter for unauthenticatedAttributes. Takes ownership. + * @since 3.0 + * @param aUnuthenticatedAttributes array of attributes. + */ + IMPORT_C void SetUnauthenticatedAttributesL( + CArrayPtr< CCMSAttribute >* aUnauthenticatedAttributes ); + + public: // Functions from base classes + + /** + * From MCMSModule + * @since 3.0 + * @param aRawData raw-data to be parsed in this instance + */ + void DecodeL( const TDesC8& aRawData ); + + /** + * From MCMSModule + * @since 3.0 + * @return Returns ASN1 encoder and leaves it in CleanupStack + */ + CASN1EncBase* EncoderLC() const; + + protected: // New functions + + /** + * Protected construction to allow derivation + */ + IMPORT_C void ConstructL(); + + /** + * Protected construction to allow derivation + */ + IMPORT_C void ConstructL( + CArrayPtr< CCMSRecipientInfo >* aRecipientInfos, + CCMSX509AlgorithmIdentifier* aMacAlgorithm, + CCMSEncapsulatedContentInfo* aEncapContentInfo, + const TDesC8& aMac ); + + /** + * C++ default constructor. + */ + IMPORT_C CCMSAuthenticatedData(); + + private: // New functions + + /** + * Decodes an attribute sequence. + */ + CArrayPtrFlat< CCMSAttribute >* DecodeAttributesL( + TASN1DecGeneric* aAttributesDec ); + + private: // Data + // Contains the actual data, ownedw + CAuthenticatedDataData* iData; + + // Reserved for extensions + MCMSAuthenticatedDataExtension* iReserved; + + }; + +#endif // CCMSAuthenticatedData_H + +// End of File