diff -r 000000000000 -r 164170e6151a secsrv_plat/cms_api/inc/CCMSX509Certificate.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/secsrv_plat/cms_api/inc/CCMSX509Certificate.h Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,363 @@ +/* +* 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: X.509 Certificate type +* +*/ + + + +#ifndef CCMSX509Certificate_H +#define CCMSX509Certificate_H + +#include "CCMSX509Signed.h" + +// FORWARD DECLARATIONS +class CCMSX509AlgorithmIdentifier; +class CCMSX509SubjectPublicKeyInfo; +class CX500DistinguishedName; +class CCMSX509Validity; +class CX509CertExtension; +class CX509Certificate; + +// Extensions +class MCMSX509CertificateExtension; + +// CLASS DECLARATION +/** +* X.509 CertificateInfo type module +* +* ASN.1 definition: +* -- basic certificate definition +* Certificate ::= +* SIGNED +* {SEQUENCE {version [0] Version DEFAULT v1, +* serialNumber CertificateSerialNumber, +* signature AlgorithmIdentifier, +* issuer Name, +* validity Validity, +* subject Name, +* subjectPublicKeyInfo SubjectPublicKeyInfo, +* issuerUniqueIdentifier [1] IMPLICIT UniqueIdentifier OPTIONAL, +* -- if present, version must be v2 or v3 +* subjectUniqueIdentifier [2] IMPLICIT UniqueIdentifier OPTIONAL, +* -- if present, version must be v2 or v3 +* extensions [3] Extensions OPTIONAL +* }} -- If present, version must be v3 +* +* @lib cms.lib +* @since 3.0 +*/ +class CCMSX509Certificate : public CCMSX509Signed + { + + private: + /** + * Container for certificate data + */ + NONSHARABLE_CLASS( CCertificateData ) : public CBase + { + public: // destructor + ~CCertificateData(); + + public: // data + // version + TInt iVersion; + + // serialNumber, owned + HBufC8* iSerialNumber; + + // signature AlgorithmIdentifier, owned + CCMSX509AlgorithmIdentifier* iSignature; + + // issuer Name, owned + CX500DistinguishedName* iIssuer; + + // validity, owned + CCMSX509Validity* iValidity; + + // subject Name, owned + CX500DistinguishedName* iSubject; + + // subjectPublicKeyInfo, owned + CCMSX509SubjectPublicKeyInfo* iSubjectPublicKeyInfo; + + // issuerUniqueIdentifier UniqueIdentifier ::= BIT STRING, owned + HBufC8* iIssuerUniqueIdentifier; + + // subjectUniqueIdentifier UniqueIdentifier, owned + HBufC8* iSubjectUniqueIdentifier; + }; + + public: // Constructors and destructor + /** + * Two-phased constructor. + */ + IMPORT_C static CCMSX509Certificate* NewL(); + + /** + * Two-phased constructor. Copies the data from the + * CX509Certificate parameter. + * + * @param aCertificate Certificate from which the data is + * copied. + */ + IMPORT_C static CCMSX509Certificate* NewL( + const CX509Certificate& aCertificate ); + + /** + * Two-phased constructor. Copies of the parameters are made. + * + * @param aSerialNumber CertificateSerialNumber value + * @param aSignature AlgorithmIdentifier value + * @param aIssuer Name value + * @param aValidity Validity value + * @param aSubject Name value + * @param aSubjectPublicKeyInfo SubjectPublicKeyInfo value + * @param aAlgorithmIdentifier identifies the algorithm used in + * the signature + * @param aEncrypted must be the result of applying a hashing + * procedure to the DER-encoded octets of a value of + * toBeSigned and then applying an encipherment + * procedure to those octets + */ + IMPORT_C static CCMSX509Certificate* NewL( + const TDesC8& aSerialNumber, + const CCMSX509AlgorithmIdentifier& aSignature, + const CX500DistinguishedName& aIssuer, + const CCMSX509Validity& aValidity, + const CX500DistinguishedName& aSubject, + const CCMSX509SubjectPublicKeyInfo& aSubjectPublicKeyInfo, + const CCMSX509AlgorithmIdentifier& aAlgorithmIdentifier, + const TDesC8& aEncrypted + ); + + /** + * Destructor. + */ + virtual ~CCMSX509Certificate(); + + public: // New functions + /** + * Getter for the version. + * @since 3.0 + * @return Version + */ + IMPORT_C TInt Version() const; + + /** + * Getter for the serialNumber. + * @since 3.0 + * @return CertificateSerialNumber + */ + IMPORT_C const TDesC8& SerialNumber() const; + + /** + * Getter for the signature. + * @since 3.0 + * @return AlgorithmIdentifier + */ + IMPORT_C const CCMSX509AlgorithmIdentifier& Signature() const; + + /** + * Getter for the issuer. + * @since 3.0 + * @return X.500 DistinguishedName of the issuer of the certificate. + */ + IMPORT_C const CX500DistinguishedName& Issuer() const; + + /** + * Getter for the validity. + * @since 3.0 + * @return Validity + */ + IMPORT_C const CCMSX509Validity& Validity() const; + + /** + * Getter for the subject. + * @since 3.0 + * @return X.500 DistinguishedName of the subject of the certificate. + */ + IMPORT_C const CX500DistinguishedName& Subject() const; + + /** + * Getter for the subjectPublicKeyInfo. + * @since 3.0 + * @return SubjectPublicKeyInfo + */ + IMPORT_C const CCMSX509SubjectPublicKeyInfo& + SubjectPublicKeyInfo() const; + + /** + * Getter for the issuerUniqueIdentifier. + * @since 3.0 + * @return UniqueIdentifier or NULL + */ + IMPORT_C const TDesC8* + IssuerUniqueIdentifier() const; + + /** + * Getter for the subjectUniqueIdentifier. + * @since 3.0 + * @return UniqueIdentifier or NULL + */ + IMPORT_C const TDesC8* + SubjectUniqueIdentifier() const; + + /** + * Setter for the version. + * @since 3.0 + * @param aVersion Version + */ + IMPORT_C void SetVersion( const TInt aVersion ); + + /** + * Setter for the serialNumber. + * @since 3.0 + * @param aSerialNumber CertificateSerialNumber + */ + IMPORT_C void SetSerialNumberL( const TDesC8& aSerialNumber ); + + /** + * Setter for the signature. + * @since 3.0 + * @param aSignature AlgorithmIdentifier + */ + IMPORT_C void + SetSignatureL( const CCMSX509AlgorithmIdentifier& aSignature ); + + /** + * Setter for the issuer. + * @since 3.0 + * @param aIssuer The X.500 DistinguishedName of the issuer of + * the certificate + */ + IMPORT_C void + SetIssuerL( const CX500DistinguishedName& aIssuer ); + + /** + * Setter for the validity. + * @since 3.0 + * @param aValidity Validity + */ + IMPORT_C void + SetValidityL( const CCMSX509Validity& aValidity ); + + /** + * Setter for the Subject. + * @since 3.0 + * @param aSubject X.500 DistinguishedName of the subject of + * the certificate + */ + IMPORT_C void + SetSubjectL( const CX500DistinguishedName& aSubject ); + + /** + * Setter for the SubjectPublicKeyInfo. + * @since 3.0 + * @param aSubjectPublicKeyInfo SubjectPublicKeyInfo + */ + IMPORT_C void SetSubjectPublicKeyInfoL( + const CCMSX509SubjectPublicKeyInfo& aSubjectPublicKeyInfo ); + + /** + * Setter for the issuerUniqueIdentifier. Also makes sure + * version is v2 or v3 (integer values 1 and 2). + * @since 3.0 + * @param aIssuerUniqueIdentifier UniqueIdentifier (BIT STRING) + */ + IMPORT_C void SetIssuerUniqueIdentifierL( + const TDesC8& aIssuerUniqueIdentifier ); + + /** + * Setter for the subjectUniqueIdentifier. Also makes sure + * version is v2 or v3 (integer values 1 and 2). + * @since 3.0 + * @param aSubjectUniqueIdentifier UniqueIdentifier (BIT STRING) + */ + IMPORT_C void SetSubjectUniqueIdentifierL( + const TDesC8& aSubjectUniqueIdentifier ); + + /** + * Returns ASN1 encoder for the ToBeSigned part. + * @since 3.0 + * @return ASN1 encoder for the ToBeSigned part. + */ + IMPORT_C CASN1EncBase* ToBeSignedEncoderLC() const; + + 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( + const TDesC8& aSerialNumber, + const CCMSX509AlgorithmIdentifier& aSignature, + const CX500DistinguishedName& aIssuer, + const CCMSX509Validity& aValidity, + const CX500DistinguishedName& aSubject, + const CCMSX509SubjectPublicKeyInfo& aSubjectPublicKeyInfo, + const CCMSX509AlgorithmIdentifier& aAlgorithmIdentifier, + const TDesC8& aEncrypted + ); + + /** + * Protected construction to allow derivation + */ + IMPORT_C void ConstructL( ); + + /** + * Protected construction to allow derivation. + */ + IMPORT_C void ConstructL( const CX509Certificate& aCertificate ); + + /** + * C++ default constructor. + */ + IMPORT_C CCMSX509Certificate( ); + + private: // New functions + + /** + * Copies the data from the CX509Certificate object. + */ + void SetDataL( const CX509Certificate& aCertificate ); + + private: // Data + // Contains the actual data, owned + CCertificateData* iData; + + // Reserved for extensions + MCMSX509CertificateExtension* iReserved; + + }; + +#endif // CCMSX509Certificate_H + +// End of File