cryptoservices/certificateandkeymgmt/inc/cmssigneridentifier.h
changeset 0 2c201484c85f
child 8 35751d3474b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptoservices/certificateandkeymgmt/inc/cmssigneridentifier.h	Wed Jul 08 11:25:26 2009 +0100
@@ -0,0 +1,211 @@
+/*
+* 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 CMSSIGNERIDENTIFIER_H
+#define CMSSIGNERIDENTIFIER_H
+
+#include <e32base.h>
+#include <pkcs7issuerserial.h>
+
+class CX500DistinguishedName;
+class CX509SubjectKeyIdExt;
+class CASN1EncSequence;
+class CASN1EncBase;
+
+
+/**
+ A representation of a RFC2630 (SignerIdentifier) entity.
+ */
+class CCmsSignerIdentifier : public CBase
+	{
+public:
+
+	/**
+	The SignerIdentifier type.
+	*/
+	enum TSignerIdentifierType
+		{
+		/** The SignerIdentifier type is issuerAndSerialNumber. */
+		EIssuerAndSerialNumber,
+		/** The SignerIdentifier type is subjectKeyIdentifier. */
+		ESubjectKeyIdentifier
+		};
+
+	/**
+	 * @internalComponent
+	 * 
+	 * Creates a CMS SignerIdentifier as defined in RFC2630.
+	 * @param aIssuerAndSerialNumber An IssuerAndSerialNumber instance used to construct
+	 *	this object. Ownership of aIssuerAndSerialNumber is transferred to the newly
+	 *	created CCmsSignerIdentifier object. If construction fails, ownership is 
+	 *	not transferred. The caller needs to push aIssuerAndSerialNumber onto the cleanup stack before calling 
+	 *	this method, and pop it off the cleanup stack after successful construction.
+	 *  @return The fully constructed object.
+	 **/
+	static CCmsSignerIdentifier* NewL(CPKCS7IssuerAndSerialNumber* aIssuerAndSerialNumber);
+	
+	/**
+	 * @internalComponent
+	 *
+	 * Creates a CMS SignerIdentifier as defined in RFC2630, and leaves it on the cleanup stack.
+	 * @param aIssuerAndSerialNumber An IssuerAndSerialNumber instance used to construct
+	 *	this object. Ownership of aIssuerAndSerialNumber is transferred to the newly
+	 *	created CCmsSignerIdentifier object. If construction fails, ownership is 
+	 *	not transferred. The caller needs to push aIssuerAndSerialNumber onto the cleanup stack before calling 
+	 *	this method, and pop it off the cleanup stack after successful construction.
+	 * @return The fully constructed object.
+	 **/	
+	static CCmsSignerIdentifier* NewLC(CPKCS7IssuerAndSerialNumber* aIssuerAndSerialNumber);
+	
+	/**
+	 * @internalComponent
+	 * 
+	 * Creates a CMS SignerIdentifier as defined in RFC2630.
+	 * @param aSubjectKeyIdExt A buffer that contains the subject key identifier.
+	 *	Ownership of aSubjectKeyIdExt is transferred to the newly
+	 *	created CCmsSignerIdentifier object. If construction fails, ownership is 
+	 *	not transferred. The caller needs to push aSubjectKeyIdExt onto the cleanup stack before calling 
+	 *	this method, and pop it off the cleanup stack after successful construction.
+	 * @return The fully constructed object.
+	 **/
+	static CCmsSignerIdentifier* NewL(HBufC8* aSubjectKeyIdExt);
+	
+	/**
+	 * @internalComponent
+	 * 
+	 * Creates a CMS SignerIdentifier as defined in RFC2630, and leaves it on the cleanup stack.
+	 * @param aSubjectKeyIdExt A buffer that contains the subject key identifier.
+	 *	Ownership of aSubjectKeyIdExt is transferred to the newly
+	 *	created CCmsSignerIdentifier object. If construction fails, ownership is 
+	 *	not transferred. The caller needs to push aSubjectKeyIdExt onto the cleanup stack before calling 
+	 *	this method, and pop it off the cleanup stack after successful construction.
+	 * @return The fully constructed object
+	 **/		
+	static CCmsSignerIdentifier* NewLC(HBufC8* aSubjectKeyIdExt);
+	
+	/**
+	 * @internalComponent
+	 *
+	 * Creates a CMS SignerIdentifier as defined in RFC2630.
+	 * @param aRawData A buffer that contains the encoded CMS signer identifier.
+	 * @return The fully constructed object.
+	 **/			
+	static CCmsSignerIdentifier* NewL(const TDesC8& aRawData);
+	
+	/**
+	 * @internalComponent
+	 *
+	 * Creates a CMS SignerIdentifier as defined in RFC2630, and leaves it on the cleanup stack.
+	 * @param aRawData A buffer that contains the encoded CMS signer identifier.
+	 * @return The fully constructed object.
+	 **/				
+	static CCmsSignerIdentifier* NewLC(const TDesC8& aRawData);
+	
+	/**
+	Destructor
+	*/
+	IMPORT_C ~CCmsSignerIdentifier();
+	
+	/**
+	 * @internalComponent
+	 *
+	 * Creates the ASN1 sequence of the signer identifier object and leaves it on the cleanup stack.
+	 * @return ASN1 sequence of this object.
+	 */	
+	CASN1EncBase* EncodeASN1DERLC() const;
+
+	/**
+	Returns the issuer and serial name.
+	@return The CPKCS7IssuerAndSerialNumber reference. NULL if the signer 
+	identifier type is subjectKeyIdentifier. The signer identifier type can be retrieved
+	using SignerIdentifierType().
+	*/		
+	IMPORT_C const CPKCS7IssuerAndSerialNumber* IssuerAndSerialNumber() const;
+	
+	/**
+	Returns the subject key identifier.
+	@return The subject key identifier reference. KNullDesC8 if the signer 
+	identifier type is issuerAndSerialNumber. The signer identifier type can 
+	be retrieved using SignerIdentifierType().
+	*/	
+	IMPORT_C const TDesC8& SubjectKeyIdentifier() const;
+	
+	/**
+	Returns the type of the signer identifier.
+	@return The type of the signer identifier. See the TSignerIdentifierType enum.
+	*/		
+	IMPORT_C TInt SignerIdentifierType() const;
+	
+protected:
+	/**
+	 * @internalComponent
+	 * 
+	 * Default constructor
+	 **/
+	CCmsSignerIdentifier();
+	
+	/**
+	 * @internalComponent
+	 *
+	 * Constructor for encoding.
+	 * @param aIssuerAndSerialNumber The issuer and serial number.
+	 **/
+	CCmsSignerIdentifier(CPKCS7IssuerAndSerialNumber* aIssuerAndSerialNumber);
+	
+	/**
+	 * @internalComponent
+	 *
+	 * Constructor for encoding
+	 * @param aSubjectKeyIdExt the subject key identifier extension
+	 **/	
+	CCmsSignerIdentifier(HBufC8* aSubjectKeyIdExt);
+	
+	/**
+	 * @internalComponent
+	 *
+	 * Second phase constructor for encoding
+	 * @param aRawData the raw data
+	 **/		
+	void ConstructL(const TDesC8& aRawData);
+
+private:
+	/**
+	The type of the signer identifier.
+	*/
+	TSignerIdentifierType iSignerIdentifierType;
+	
+	/**
+	The issuer and serial number
+	*/	
+	CPKCS7IssuerAndSerialNumber* iIssuerAndSerialNumber;
+	
+	/**
+	The subject key identifier.
+	*/
+	HBufC8* iSubjectKeyIdExt;
+	};	
+	
+#endif //CMSSIGNERIDENTIFIER_H