diff -r 000000000000 -r 164170e6151a secsrv_plat/cms_api/inc/CCMSSignedData.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/secsrv_plat/cms_api/inc/CCMSSignedData.h Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,317 @@ +/* +* Copyright (c) 2002 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: ?Description +* +*/ + + + +#ifndef CCMSSignedData_H +#define CCMSSignedData_H + +// INCLUDES +#include "CCMSSequence.h" +#include "CCMSEncapsulatedContentInfo.h" +#include "CCMSX509AlgorithmIdentifier.h" +#include "CCMSSignerInfo.h" +#include "CCMSX509CertificateList.h" +#include "CCMSCertificateChoices.h" +#include + +// FORWARD DECLARATIONS + +// Extension +class MCMSSignedDataExtension; + + +// CLASS DECLARATION +/** +* Attribute type module +* +* ASN.1 Definition: +* SignedData ::= SEQUENCE { +* version CMSVersion, +* digestAlgorithms DigestAlgorithmIdentifiers, +* encapContentInfo EncapsulatedContentInfo, +* certificates [0] IMPLICIT CertificateSet OPTIONAL, +* crls [1] IMPLICIT CertificateRevocationLists OPTIONAL, +* signerInfos SignerInfos } +* +* DigestAlgorithmIdentifiers ::= SET OF DigestAlgorithmIdentifier +* +* SignerInfos ::= SET OF SignerInfo +* +* @lib cms.lib +* @since 2.8 +*/ +class CCMSSignedData : public CCMSSequence + { + public: // Constructors and destructor + /** + * Two-phased constructor. + * NOTE: Encrypt will leave with KErrArgument if + * valid parameters are not set. + */ + IMPORT_C static CCMSSignedData* NewLC(); + + /** + * Two-phased constructor. + * Takes copy of all parameters. + * Leaves newly created instance in CleanupStack + * + * @param aDigestAlgorithmIdentifiers Array of digest algorithm + * identifiers, mandatory + * @param aContentInfo Encapsulated content info, mandatory + * @param aSignerInfos, Array of signer infos, mandatory + */ + IMPORT_C static CCMSSignedData* NewLC( + const CArrayPtr< CCMSX509AlgorithmIdentifier >& aDigestAlgorithmIdentifiers, + const CCMSEncapsulatedContentInfo& aContentInfo, + const CArrayPtr< CCMSSignerInfo >& aSignerInfos ); + + /** + * Two-phased constructor. + * Same as above although takes only one value + * Leaves newly created instance in CleanupStack + * @param aDigestAlgorithmIdentifiers Array of digest algorithm + * identifiers, mandatory + * @param aContentInfo Encapsulated content info, mandatory + * @param aSignerInfos, Array of signer infos, mandatory + * @param aCertificates Array of certificates choices, optional + * @param aRevokedCertificates Array of revoked certificates, optional + */ + IMPORT_C static CCMSSignedData* NewLC( + const CArrayPtr< CCMSX509AlgorithmIdentifier >& aDigestAlgorithmIdentifiers, + const CCMSEncapsulatedContentInfo& aContentInfo, + const CArrayPtr< CCMSSignerInfo >& aSignerInfos, + const CArrayPtr< CCMSCertificateChoices >* aCertificates, + const CArrayPtr< CCMSX509CertificateList >* aRevokedCertificates ); + + /** + * Destructor. + */ + virtual ~CCMSSignedData(); + + public: // New functions + + /** + * Getter for Version + * + * Version is the syntax version number. If no attribute + * certificates are present in the certificates field, the + * encapsulated content type is id-data, and all of the elements of + * SignerInfos are version 1, then the value of version shall be 1. + * Alternatively, if attribute certificates are present, the + * encapsulated content type is other than id-data, or any of the + * elements of SignerInfos are version 3, then the value of version + * shall be 3. + * + * @since 2.8 + * @return version number, 1 or 3 + */ + IMPORT_C TInt Version() const; + + /** + * Getter for DigestAlgorithmIdentifiers + * + * DigestAlgorithms is a collection of message digest algorithm + * identifiers. There may be any number of elements in the + * collection, including zero. Each element identifies the message + * digest algorithm, along with any associated parameters, used by + * one or more signer. The collection is intended to list the + * message digest algorithms employed by all of the signers, in any + * order, to facilitate one-pass signature verification. + * + * @since 2.8 + * @return Array of digest algorithm identifiers. + */ + IMPORT_C const CArrayPtr< CCMSX509AlgorithmIdentifier >& DigestAlgorithmIdentifiers() const; + + /** + * Getter for EncapsulatedContentInfo + * + * EncapsulatedContentInfo is the signed content, consisting of a content + * type identifier and the content itself. + * + * @since 2.8 + * @return Encapsulated content info. + */ + IMPORT_C const CCMSEncapsulatedContentInfo& EncapsulatedContentInfo() const; + + /** + * Getter for SignerInfos + * + * SignerInfos is a collection of per-signer information. There may + * be any number of elements in the collection, including zero. + * + * @since 2.8 + * @return Array of signer infos, array might be also empty + */ + IMPORT_C const CArrayPtr< CCMSSignerInfo >& SignerInfos() const; + + /** + * Getter for Certificate + * + * Certificates is a collection of certificates. It is intended that + * the set of certificates be sufficient to contain chains from a + * recognized "root" or "top-level certification authority" to all of + * the signers in the signerInfos field. There may be more + * certificates than necessary, and there may be certificates + * sufficient to contain chains from two or more independent top- + * level certification authorities. There may also be fewer + * certificates than necessary, if it is expected that recipients + * have an alternate means of obtaining necessary certificates (e.g., + * from a previous set of certificates). + * + * @since 2.8 + * @return Array of certificates or NULL if certificates are absent + */ + IMPORT_C const CArrayPtr< CCMSCertificateChoices >* Certificates() const; + + /** + * Getter for RevokedCertificates + * + * RevokedCertificates is a collection of certificate revocation lists (CRLs). + * It is intended that the set contain information sufficient to + * determine whether or not the certificates in the certificates + * field are valid, but such correspondence is not necessary. There + * may be more CRLs than necessary, and there may also be fewer CRLs + * than necessary. + * + * @since 2.8 + * @return Array of revoked certificates or NULL if there is no revoked + * certificates + */ + IMPORT_C + const CArrayPtr< CCMSX509CertificateList >* RevokedCertificates() const; + + /** + * Setter for DigestAlgorithmIdentifiers, takes copy + * + * @since 2.8 + * @param aDigestAlgorithmIdentifiers Array of digest algorithm identifiers + */ + IMPORT_C void SetDigestAlgorithmIdentifiersL( + const CArrayPtr< CCMSX509AlgorithmIdentifier >& + aDigestAlgorithmIdentifiers ); + + /** + * Setter for EncapsulatedContentInfo, takes copy + * @since 2.8 + * @param aContentInfo Encapsulated content info + */ + IMPORT_C void SetEncapsulatedContentInfoL( + const CCMSEncapsulatedContentInfo& aContentInfo ); + + /** + * Setter for SignerInfos, takes copy + * @since 2.8 + * @param aSignerInfos Array of signer info, array can be also empty + */ + IMPORT_C void SetSignerInfosL( + const CArrayPtr< CCMSSignerInfo >& aSignerInfos ); + + /** + * Setter for Certificates, takes copy + * @since 2.8 + * @param aCertificates Array of certificates or NULL if certificates + * are intented to remove from this instance + */ + IMPORT_C void SetCertificatesL( + const CArrayPtr< CCMSCertificateChoices >* aCertificates ); + + /** + * Setter for RevokedCertificates, takes copy + * @since 2.8 + * @param aRevokedCertificates Array of revoked certificates or NULL if + * removing revoked certificates from this instance + */ + IMPORT_C void SetRevokedCertificatesL( + const CArrayPtr< CCMSX509CertificateList >* aRevokedCertificates ); + + public: // Functions from base classes + + /** + * From MCMSModule + * @since 2.8 + * @param aRawData raw-data to be parsed in this instance + */ + void DecodeL( const TDesC8& aRawData ); + + /** + * From MCMSModule + * @since 2.8 + * @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( + const CArrayPtr< CCMSX509AlgorithmIdentifier >& aDigestAlgorithmIdentifiers, + const CCMSEncapsulatedContentInfo& aContentInfo, + const CArrayPtr< CCMSSignerInfo >& aSignerInfos, + const CArrayPtr< CCMSCertificateChoices >* aCertificates, + const CArrayPtr< CCMSX509CertificateList >* aRevokedCertificates ); + + /** + * C++ default constructor. + */ + IMPORT_C CCMSSignedData(); + + private: + + /** + * Finds out right version with following rules: + * + * If no attribute certificates are present in the certificates field, the + * encapsulated content type is id-data, and all of the elements of + * SignerInfos are version 1, then the value of version shall be 1. + * + * Alternatively, if attribute certificates are present, the + * encapsulated content type is other than id-data, or any of the + * elements of SignerInfos are version 3, then the value of version + * shall be 3. + */ + void ValidateVersion(); + + private: // Data + TInt iVersion; + + // DigestAlgorithmIdentifiers, owned + CArrayPtr< CCMSX509AlgorithmIdentifier >* iDigestAlgorithmIdentifiers; + // Encapsulate Content Info, owned + CCMSEncapsulatedContentInfo* iContentInfo; + // Signer Infos, owned + CArrayPtr< CCMSSignerInfo >* iSignerInfos; + // Certificates, owned, null if absent + CArrayPtr< CCMSCertificateChoices >* iCertificates; + // Revoked certificates, owned, null if absent + CArrayPtr< CCMSX509CertificateList >* iRevokedCertificates; + + // Reserved for extensions + MCMSSignedDataExtension* iReserved; + }; + +#endif // CCMSSignedData_H + +// End of File