diff -r 000000000000 -r 2c201484c85f cryptoservices/certificateandkeymgmt/inc/cmscertchoice.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cryptoservices/certificateandkeymgmt/inc/cmscertchoice.h Wed Jul 08 11:25:26 2009 +0100 @@ -0,0 +1,194 @@ +/* +* Copyright (c) 2006-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 CMSCERTCHOICE_H +#define CMSCERTCHOICE_H + +#include + +class CX509Certificate; +class CASN1EncEncoding; + +/** +An instance of a member of the RFC2630 CertificateChoices. +At present, only X509 certificates and attribute certificate are supported. +(not PKCS#6 extended certificates). +*/ +class CCmsCertificateChoice : public CBase + { +public: + /** + Certificate Types + */ + enum TCertificateType + { + /** + X.509 Certificate. + */ + ECertificateX509, + /** + Extended Certificate. + */ + ECertificateExtendedCerificate, + /** + Attribute Certificate. + */ + ECertificateAttribute + }; + + /** + * @internalComponent + * + * Creates a CertificateChoices as defined in RFC2630. + * @param aCertificate The X509 certificate used to build the CertificateChoices object. + * The newly created object will create a copy of aCertificate. + * @return The fully constructed object. + **/ + static CCmsCertificateChoice* NewL(const CX509Certificate& aCertificate); + + /** + * @internalComponent + * + * Creates a CertificateChoices object as defined in RFC2630 + * and leaves the object on the cleanup stack. + * @param aCertificate The X509 certificate used to build the CertificateChoices object. + * The newly created object will create a copy of aCertificate. + * @return The fully constructed object. + **/ + static CCmsCertificateChoice* NewLC(const CX509Certificate& aCertificate); + + /** + * @internalComponent + * + * Creates a CertificateChoices object as defined in RFC2630. + * @param aCertType The encoded certificate type. ECertificateExtendedCerificate is not supported. + * @param aEncodedCertificate The encoded certificate used to build the CertificateChoices object. + * The newly created object will create a copy of aEncodedCertificate. + * @return The fully constructed object. + **/ + static CCmsCertificateChoice* NewL(TCertificateType aCertType, const TDesC8& aEncodedCertificate); + + /** + * @internalComponent + * + * Creates a CertificateChoices object as defined in RFC2630 and leaves the object on the cleanup stack. + * @param aCertType The encoded certificate type. ECertificateExtendedCerificate is not supported. + * @param aEncodedCertificate The encoded certificate used to build the CertificateChoices object. + * The newly created object will create a copy of aEncodedCertificate. + * @return The fully constructed object. + **/ + static CCmsCertificateChoice* NewLC(TCertificateType aCertType, const TDesC8& aEncodedCertificate); + + /** + * @internalComponent + * + * Creates a CertificateChoices object as defined in RFC2630. + * @param aRawData The encoded CertificateChoices object to be decoded. + * @return The fully constructed object. + **/ + static CCmsCertificateChoice* NewL(const TDesC8& aRawData); + + /** + Destructor + */ + virtual ~CCmsCertificateChoice(); + + /** + Returns the type of the CertificateChoices object + @return The type of the certificate. + */ + IMPORT_C TCertificateType CertificateType(); + + /** + Returns the x509 certificate reference if the certificate is a X509 certificate. + Callers need to check whether the certificate's type is X509 beforehand. + @return The x509 certificate reference. + */ + IMPORT_C const CX509Certificate& Certificate(void) const; + + /** + Returns the encoded certificate's buffer. If the certificate is not an + attribute certificate, NULL is returned. Callers can also check whether + the certificate's type is X509 beforehand. + @return A pointer to the encoded certificate buffer. + */ + IMPORT_C const HBufC8* AttributeCertificate() const; + + /** + * @internalComponent + * + * Creates the ASN1 DER sequence of the CertificateChoices object + * and leaves it on the cleanup stack. + * @return ASN1 DER sequence of this object. + **/ + CASN1EncEncoding* EncodeASN1DERLC() const; + +private: + /** + Default Constructor + */ + CCmsCertificateChoice(); + + + /** + Second phase constructor for decoding. + @param aRawData the raw data to be decoded. + */ + void ConstructL(const TDesC8& aRawData); + + /** + Second phase constructor for encoding. + @param aCertificate the X509 certificate used to create the object + */ + void ConstructL(const CX509Certificate& aCertificate); + + /** + Second phase constructor for encoding. + @param aCertType The encoded certificate type. ECertificateExtendedCerificate is not supported + @param aEncodedCertificate the encoded certificate used to create the object + */ + void ConstructL(TCertificateType aCertType, const TDesC8& aEncodedCertificate); + + +private: + /** + The type the embedded certificate type + */ + TCertificateType iCertificateType; + + /** + The X509 certificate pointer + */ + CX509Certificate* iCertificate; + + /** + The attribute certificate buffer + */ + HBufC8* iEncodedAttributeCertificate; + }; + +#endif