cryptoservices/certificateandkeymgmt/inc/x520ava.h
changeset 8 35751d3474b7
parent 0 2c201484c85f
child 29 ece3df019add
--- a/cryptoservices/certificateandkeymgmt/inc/x520ava.h	Tue Jul 21 01:04:32 2009 +0100
+++ b/cryptoservices/certificateandkeymgmt/inc/x520ava.h	Thu Sep 10 14:01:51 2009 +0300
@@ -1,327 +1,330 @@
-/*
-* Copyright (c) 1998-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: 
-* Implementation of an attribute type and a value, as defined by the X.520 standard
-*
-*/
-
-
-
-
-/**
- @file 
- @internalTechnology 
-*/
- 
-#if !defined(__X520AVA_H__)
-#define __X520AVA_H__
-
-#include <e32base.h>
-#include <e32std.h>
-#include <s32std.h>
-
-/** The attribute type. 
-* 
-* @publishedAll
-* @released
-* @since v6.0 */
-enum TAttributeType
-	{
-	/** A common name */
-	ECommonName,
-	/** A locality name */
-	ELocalityName,
-	/** A state or province name */
-	EStateOrProvinceName,
-	/** An organization name */
-	EOrganizationName,
-	/** An organizational unit name */
-	EOrganizationalUnitName,
-	/** A title */
-	ETitle,
-	/** A qualifier */
-	EDNQualifier,
-	/** The name of a country */
-	ECountryName,
-	/** A given name */
-	EGivenName,
-	/** A surname */
-	ESurname,
-	/** Initials */
-	EInitials,
-	/** A generation qualifier */
-	EGenerationQualifier,
-	/** An email address. This is deprecated. */
-	EPKCS9EmailAddress,
-	/** A postal code */
-	EPostalCode,
-	/** A serial number */
-	ESerialNumber,
-	/** An RFC 2247 domain component.
-	* 
-	* A domain name is made up of an ordered set of components.*/
-	ERFC2247DomainComponent,
-	/** RFC 2256 street component.
-	* 
-	* A street */
-	ERFC2256Street,
-	/** A name of the subject of a certificate as an unstructured ASCII string */
-	EPKCS9UnstructuredName
-	};
-
-//these are the only attribute types we handle at present
-_LIT(KX520CountryName,"2.5.4.6");
-_LIT(KX520OrganizationName,"2.5.4.10");
-_LIT(KX520OrganizationalUnitName,"2.5.4.11");
-_LIT(KX520LocalityName,"2.5.4.7");
-_LIT(KX520StateOrProvinceName,"2.5.4.8");
-_LIT(KX520Title,"2.5.4.12");
-_LIT(KX520CommonName,"2.5.4.3");
-_LIT(KX520GivenName,"2.5.4.42");
-_LIT(KX520Surname,"2.5.4.4");
-_LIT(KX520Initials,"2.5.4.43");
-_LIT(KX520GenerationQualifier,"2.5.4.44");
-_LIT(KX520DNQualifier,"2.5.4.46");
-_LIT(KX520SerialNumber,"2.5.4.5");
-_LIT(KX520PostalCode,"2.5.4.17");
-_LIT(KRFC2247DomainComponent, "0.9.2342.19200300.100.1.25");
-_LIT(KRFC2256Street,"2.5.4.9");
-_LIT(KPKCS9UnstructuredName, "1.2.840.113549.1.9.2");
-
-//email address is deprecated but we support it anyway...
-_LIT(KPKCS9EmailAddress, "1.2.840.113549.1.9.1");
-
-/** The maximum length allowed for a country name. */
-const TInt KX520MaxCLength = 2;
-/** The maximum length allowed for an organization name. */
-const TInt KX520MaxOLength = 64;
-/** The maximum length allowed for an organizational unit name. */
-const TInt KX520MaxOULength = 64;
-/** The maximum length allowed for a locality name. */
-const TInt KX520MaxLLength = 128;
-/** The maximum length allowed for a state or province name. */
-const TInt KX520MaxSOPLength = 128;
-/** The maximum length allowed for an title. */
-const TInt KX520MaxTLength = 64;
-/** The maximum length allowed for a common name. */
-const TInt KX520MaxCNLength = 256;
-/** The maximum length allowed for a given name. */
-const TInt KX520MaxGNLength = 16;
-/** The maximum length allowed for a surname. */
-const TInt KX520MaxSLength = 40;
-/** The maximum length allowed for initials. */
-const TInt KX520MaxILength = 5;
-/** The maximum length allowed for a generation qualifier. */
-const TInt KX520MaxGQLength = 3;
-/** The maximum length allowed for a serial number. */
-const TInt KX520MaxSNLength = 64;
-/** The maximum length allowed for a postal code. */
-const TInt KX520MaxPostalCodeLength = 40;
-/** The maximum length allowed for an email address. */
-const TInt KPKCS9MaxEmailAddressLength = 256;
-/** The maximum length allowed for an unstructured name. */
-const TInt KPKCS9MaxUnstructuredNameLength = 256;
-// No maximum was specified in the standard - 128 should be sufficient
-/** The maximum length allowed for an RFC 2247 domain component. 
-* 
-* Each component of the domain name is a short string. */
-const TInt KRFC2247MaxDomainComponentLength = 128;
-/** The maximum length allowed a for street. */
-const TInt KRFC2256StreetLength = 128;
-
-class CASN1EncSequence;
-
-class CX520AttributeTypeAndValue : public CBase
-/** Contains an attribute type and a value, as defined by the X.520 standard.
-* 
-* A Distinguished Name object, as defined by the X.500 standard, consists of 
-* a sequence of these objects. 
-* 
-* @publishedAll
-* @released
-* @since v6.0 
-*/
-// Attribute and value pair class. Attribute and value pairs 
-//	are used in distinguished names and certificate attributes. 
-//	Stores data in ASN.1 format internally.
-	{
-public:
-	// Constructs a new object from ASN.1-encoded DER binary data
-	/** Creates a new CX520AttributeTypeAndValue object from the specified buffer containing 
-	* the encoded binary representation.
-	* 
-	* Initialises the object from its encoded binary form into an internal representation.	
-	* 
-	* @param aBinaryData	The encoded binary representation.
-	* @return				The new CX520AttributeTypeAndValue object. */
-	IMPORT_C static CX520AttributeTypeAndValue* NewL(const TDesC8& aBinaryData);
-
-	// Constructs a new object from ASN.1-encoded DER binary data
-	/** Creates a new CX520AttributeTypeAndValue object from the specified buffer containing 
-	* the encoded binary representation, and puts a pointer to the new object onto 
-	* the cleanup stack.
-	* 
-	* Initialises the object from its encoded binary form into an internal representation.	
-	* 
-	* @param aBinaryData	The encoded binary representation.
-	* @return				The new CX520AttributeTypeAndValue object. */
-	IMPORT_C static CX520AttributeTypeAndValue* NewLC(const TDesC8& aBinaryData);
-
-	// Constructs a new object from ASN.1-encoded DER binary data
-	/** Creates a new CX520AttributeTypeAndValue object from the specified buffer containing 
-	* the encoded binary representation, starting at the specified offset.
-	* 
-	* Initialises the object from its encoded binary form into an internal representation.
-	* 
-	* @param aBinaryData	The encoded binary representation.
-	* @param aPos			The offset position from which to start decoding.
-	* @return				The new CX520AttributeTypeAndValue object. */
-	IMPORT_C static CX520AttributeTypeAndValue* NewL(const TDesC8& aBinaryData, TInt& aPos);
-
-	// Constructs a new object from ASN.1-encoded DER binary data
-	/** Creates a new CX520AttributeTypeAndValue object from the specified buffer containing 
-	* the encoded binary representation, starting at the specified offset, and puts 
-	* a pointer to the new object onto the cleanup stack.
-	* 
-	* Initialises the object from its encoded binary form into an internal representation.
-	* 
-	* @param aBinaryData	The encoded binary representation.
-	* @param aPos			The offset position from which to start decoding.
-	* @return				The new CX520AttributeTypeAndValue object. */
-	IMPORT_C static CX520AttributeTypeAndValue* NewLC(const TDesC8& aBinaryData, TInt& aPos);
-	
-	/** Creates a new CX520AttributeTypeAndValue object from an existing object.
-	* 
-	* This is equivalent to a copy constructor.
-	* 
-	* @param aPair	The CX520AttributeTypeAndValue object.
-	* @return		The new CX520AttributeTypeAndValue object. */
-	IMPORT_C static CX520AttributeTypeAndValue* NewL(const CX520AttributeTypeAndValue& aPair);
-	
-	/** Creates a new CX520AttributeTypeAndValue object from an existing object, and 
-	* puts a pointer to the new object onto the cleanup stack.
-	* 
-	* This is equivalent to a copy constructor.
-	* 
-	* @param aPair	The CX520AttributeTypeAndValue object.
-	* @return		The new CX520AttributeTypeAndValue object. */
-	IMPORT_C static CX520AttributeTypeAndValue* NewLC(const CX520AttributeTypeAndValue& aPair);
-	
-	/** Creates a new CX520AttributeTypeAndValue object from the specified read stream.
-	* 
-	* @param aStream	Stream from which the object is to be internalised.
-	* @return			The new CX520AttributeTypeAndValue object. */
-	IMPORT_C static CX520AttributeTypeAndValue* NewL(RReadStream& aStream);
-	
-	/** Creates a new CX520AttributeTypeAndValue object from the specified read stream, 
-	* and puts a pointer to the new object onto the cleanup stack.
-	* 
-	* @param aStream	Stream from which the object is to be internalised.
-	* @return			The new CX520AttributeTypeAndValue object. */
-	IMPORT_C static CX520AttributeTypeAndValue* NewLC(RReadStream& aStream);
-
-	/** Creates a new CX520AttributeTypeAndValue object from an attribute type and value.
-	* 
-	* @param aType	Attribute type
-	* @param aValue	Attribute value
-	* @return		New CX520AttributeTypeAndValue object */
-	IMPORT_C static CX520AttributeTypeAndValue* NewL(TAttributeType aType, const TDesC8& aValue);
-
-	/** Creates a new CX520AttributeTypeAndValue object from an attribute type and value.
-	* 
-	* @param aType	Attribute type
-	* @param aValue Attribute value
-	* @return		New CX520AttributeTypeAndValue object on the cleanup stack */
-	IMPORT_C static CX520AttributeTypeAndValue* NewLC(TAttributeType aType, const TDesC8& aValue);
-
-	/** Destructor.
-	* 
-	* Frees all resources owned by the object, prior to its destruction. */
-	IMPORT_C ~CX520AttributeTypeAndValue();
-
-	/** Gets the encoded attribute type of the object.
-	* 
-	* @return	A pointer descriptor representing the encoded attribute type. */
-	IMPORT_C const TPtrC Type() const;
-
-	/** Gets the encoded attribute value of the object.
-	* 
-	* @return	The pointer descriptor representing the encoded attribute value. */
-	IMPORT_C const TPtrC8 EncodedValue() const;
-
-	// Creates a copy of object's ASN.1 DER encoding.
-	// @return	New buffer containing object's ASN.1 DER encoding.
-	/** Gets the decoded value.
-	* 
-	* @return	A heap descriptor containing the decoded value. */
-	IMPORT_C virtual HBufC* ValueL() const;
-
-	/** Encodes the contents into an ASN.1 sequence object.
-	* 
-	* This is useful to insert attribute type/value pairs into other ASN.1 
-	* encoding trees.
-	* 
-	* @return	New ASN.1 sequence object containing attribute 
-	* 			type/value pair in for of an OID and an octet string; 
-	*			leaves the returned object on the cleanup stack. */
-	IMPORT_C CASN1EncSequence* EncodeASN1LC() const;
-
-	/** Encodes the contents into an ASN.1 sequence object.
-	* 
-	* Useful to insert attribute type/value pairs into other ASN.1 
-	* encoding trees.
-	* 
-	* @return 	New ASN.1 sequence object containing attribute 
-	* 			type/value pair in for of an OID and an octet string. */
-	IMPORT_C CASN1EncSequence* EncodeASN1L() const;
-
-	// This function compares the current element with aElement.
-	/** Compares the attribute type and decoded value of the specified object.
-	* 
-	* @param aElement	The CX520AttributeTypeAndValue object to be compared.
-	* @return 			ETrue, if the attribute types and the decoded values match; 
-	* 					EFalse, otherwise. */
-	IMPORT_C virtual TBool ExactMatchL(const CX520AttributeTypeAndValue& 
-		aElement) const;
-		
-	/** Externalises an object of this class to a write stream.
-	* 
-	* The presence of this function means that the standard templated operator<<() 
-	* can be used to externalise objects of this class.
-	* 
-	* @param aStream	Stream to which the object should be externalised. */
-	virtual void ExternalizeL(RWriteStream& aStream) const;
-private:
-	virtual void InternalizeL(RReadStream& aStream);
-	CX520AttributeTypeAndValue(const TAttributeType aType);
-	CX520AttributeTypeAndValue(); ///< Protected default constructor
-	void ConstructL(const CX520AttributeTypeAndValue& aPair);
-	void ConstructL(const TDesC8& aBinaryData, TInt& aPos);
-	void ConstructL(TAttributeType aType, const TDesC8& aValue);
-	/**
-	 * This method finds out if case-insensitive comparisons must be done or not.
-	 * Email Address is the exceptional case of 'IA5String' value type for which comparisons must be
-	 * done case-insensitivly.
-	 * 
-	 * @param aSource	contains the encoded value of the attribute type.
-	 * @return			ETrue, if case-insensitive comparisons are to be done. 
-	 * 						   This is only when value type is a Printable String OR if attribute type is an Email Address. 
-	 * 					EFalse, otherwise.
-	 */ 
-	TBool IsCaseInSensitive(const TDesC8& aSource) const;
-	HBufC* iType; ///< The encoded type
-	HBufC8* iValue; ///< The encoded value
-	};
-
-#endif
+/*
+* Copyright (c) 1998-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: 
+* Implementation of an attribute type and a value, as defined by the X.520 standard
+*
+*/
+
+
+/**
+ @file 
+ @publishedAll
+ @released
+*/
+ 
+#if !defined(__X520AVA_H__)
+#define __X520AVA_H__
+
+#include <e32base.h>
+#include <e32std.h>
+#include <s32std.h>
+
+//these are for internal use only
+//these are the only attribute types we handle at present
+_LIT(KX520CountryName,"2.5.4.6");
+_LIT(KX520OrganizationName,"2.5.4.10");
+_LIT(KX520OrganizationalUnitName,"2.5.4.11");
+_LIT(KX520LocalityName,"2.5.4.7");
+_LIT(KX520StateOrProvinceName,"2.5.4.8");
+_LIT(KX520Title,"2.5.4.12");
+_LIT(KX520CommonName,"2.5.4.3");
+_LIT(KX520GivenName,"2.5.4.42");
+_LIT(KX520Surname,"2.5.4.4");
+_LIT(KX520Initials,"2.5.4.43");
+_LIT(KX520GenerationQualifier,"2.5.4.44");
+_LIT(KX520DNQualifier,"2.5.4.46");
+_LIT(KX520SerialNumber,"2.5.4.5");
+
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
+//more attribute types we handle at present
+_LIT(KX520PostalCode,"2.5.4.17");
+_LIT(KRFC2247DomainComponent, "0.9.2342.19200300.100.1.25");
+_LIT(KRFC2256Street,"2.5.4.9");
+_LIT(KPKCS9UnstructuredName, "1.2.840.113549.1.9.2");
+
+//email address is deprecated but we support it anyway...
+_LIT(KPKCS9EmailAddress, "1.2.840.113549.1.9.1");
+
+/** The maximum length allowed for a country name. */
+const TInt KX520MaxCLength = 2;
+/** The maximum length allowed for an organization name. */
+const TInt KX520MaxOLength = 64;
+/** The maximum length allowed for an organizational unit name. */
+const TInt KX520MaxOULength = 64;
+/** The maximum length allowed for a locality name. */
+const TInt KX520MaxLLength = 128;
+/** The maximum length allowed for a state or province name. */
+const TInt KX520MaxSOPLength = 128;
+/** The maximum length allowed for an title. */
+const TInt KX520MaxTLength = 64;
+/** The maximum length allowed for a common name. */
+const TInt KX520MaxCNLength = 256;
+/** The maximum length allowed for a given name. */
+const TInt KX520MaxGNLength = 16;
+/** The maximum length allowed for a surname. */
+const TInt KX520MaxSLength = 40;
+/** The maximum length allowed for initials. */
+const TInt KX520MaxILength = 5;
+/** The maximum length allowed for a generation qualifier. */
+const TInt KX520MaxGQLength = 3;
+/** The maximum length allowed for a serial number. */
+const TInt KX520MaxSNLength = 64;
+/** The maximum length allowed for a postal code. */
+const TInt KX520MaxPostalCodeLength = 40;
+/** The maximum length allowed for an email address. */
+const TInt KPKCS9MaxEmailAddressLength = 256;
+/** The maximum length allowed for an unstructured name. */
+const TInt KPKCS9MaxUnstructuredNameLength = 256;
+// No maximum was specified in the standard - 128 should be sufficient
+/** The maximum length allowed for an RFC 2247 domain component. 
+* 
+* Each component of the domain name is a short string. */
+const TInt KRFC2247MaxDomainComponentLength = 128;
+/** The maximum length allowed a for street. */
+const TInt KRFC2256StreetLength = 128;
+
+#endif
+
+
+/** The attribute type. 
+* 
+* @since v6.0 */
+enum TAttributeType
+	{
+	/** A common name */
+	ECommonName,
+	/** A locality name */
+	ELocalityName,
+	/** A state or province name */
+	EStateOrProvinceName,
+	/** An organization name */
+	EOrganizationName,
+	/** An organizational unit name */
+	EOrganizationalUnitName,
+	/** A title */
+	ETitle,
+	/** A qualifier */
+	EDNQualifier,
+	/** The name of a country */
+	ECountryName,
+	/** A given name */
+	EGivenName,
+	/** A surname */
+	ESurname,
+	/** Initials */
+	EInitials,
+	/** A generation qualifier */
+	EGenerationQualifier,
+	/** An email address. This is deprecated. */
+	EPKCS9EmailAddress,
+	/** A postal code */
+	EPostalCode,
+	/** A serial number */
+	ESerialNumber,
+	/** An RFC 2247 domain component.
+	* 
+	* A domain name is made up of an ordered set of components.*/
+	ERFC2247DomainComponent,
+	/** RFC 2256 street component.
+	* 
+	* A street */
+	ERFC2256Street,
+	/** A name of the subject of a certificate as an unstructured ASCII string */
+	EPKCS9UnstructuredName
+	};
+
+
+class CASN1EncSequence;
+
+class CX520AttributeTypeAndValue : public CBase
+/** Contains an attribute type and a value, as defined by the X.520 standard.
+* 
+* A Distinguished Name object, as defined by the X.500 standard, consists of 
+* a sequence of these objects. 
+* 
+* @since v6.0 
+*/
+// Attribute and value pair class. Attribute and value pairs 
+//	are used in distinguished names and certificate attributes. 
+//	Stores data in ASN.1 format internally.
+	{
+public:
+	// Constructs a new object from ASN.1-encoded DER binary data
+	/** Creates a new CX520AttributeTypeAndValue object from the specified buffer containing 
+	* the encoded binary representation.
+	* 
+	* Initialises the object from its encoded binary form into an internal representation.	
+	* 
+	* @param aBinaryData	The encoded binary representation.
+	* @return				The new CX520AttributeTypeAndValue object. */
+	IMPORT_C static CX520AttributeTypeAndValue* NewL(const TDesC8& aBinaryData);
+
+	// Constructs a new object from ASN.1-encoded DER binary data
+	/** Creates a new CX520AttributeTypeAndValue object from the specified buffer containing 
+	* the encoded binary representation, and puts a pointer to the new object onto 
+	* the cleanup stack.
+	* 
+	* Initialises the object from its encoded binary form into an internal representation.	
+	* 
+	* @param aBinaryData	The encoded binary representation.
+	* @return				The new CX520AttributeTypeAndValue object. */
+	IMPORT_C static CX520AttributeTypeAndValue* NewLC(const TDesC8& aBinaryData);
+
+	// Constructs a new object from ASN.1-encoded DER binary data
+	/** Creates a new CX520AttributeTypeAndValue object from the specified buffer containing 
+	* the encoded binary representation, starting at the specified offset.
+	* 
+	* Initialises the object from its encoded binary form into an internal representation.
+	* 
+	* @param aBinaryData	The encoded binary representation.
+	* @param aPos			The offset position from which to start decoding.
+	* @return				The new CX520AttributeTypeAndValue object. */
+	IMPORT_C static CX520AttributeTypeAndValue* NewL(const TDesC8& aBinaryData, TInt& aPos);
+
+	// Constructs a new object from ASN.1-encoded DER binary data
+	/** Creates a new CX520AttributeTypeAndValue object from the specified buffer containing 
+	* the encoded binary representation, starting at the specified offset, and puts 
+	* a pointer to the new object onto the cleanup stack.
+	* 
+	* Initialises the object from its encoded binary form into an internal representation.
+	* 
+	* @param aBinaryData	The encoded binary representation.
+	* @param aPos			The offset position from which to start decoding.
+	* @return				The new CX520AttributeTypeAndValue object. */
+	IMPORT_C static CX520AttributeTypeAndValue* NewLC(const TDesC8& aBinaryData, TInt& aPos);
+	
+	/** Creates a new CX520AttributeTypeAndValue object from an existing object.
+	* 
+	* This is equivalent to a copy constructor.
+	* 
+	* @param aPair	The CX520AttributeTypeAndValue object.
+	* @return		The new CX520AttributeTypeAndValue object. */
+	IMPORT_C static CX520AttributeTypeAndValue* NewL(const CX520AttributeTypeAndValue& aPair);
+	
+	/** Creates a new CX520AttributeTypeAndValue object from an existing object, and 
+	* puts a pointer to the new object onto the cleanup stack.
+	* 
+	* This is equivalent to a copy constructor.
+	* 
+	* @param aPair	The CX520AttributeTypeAndValue object.
+	* @return		The new CX520AttributeTypeAndValue object. */
+	IMPORT_C static CX520AttributeTypeAndValue* NewLC(const CX520AttributeTypeAndValue& aPair);
+	
+	/** Creates a new CX520AttributeTypeAndValue object from the specified read stream.
+	* 
+	* @param aStream	Stream from which the object is to be internalised.
+	* @return			The new CX520AttributeTypeAndValue object. */
+	IMPORT_C static CX520AttributeTypeAndValue* NewL(RReadStream& aStream);
+	
+	/** Creates a new CX520AttributeTypeAndValue object from the specified read stream, 
+	* and puts a pointer to the new object onto the cleanup stack.
+	* 
+	* @param aStream	Stream from which the object is to be internalised.
+	* @return			The new CX520AttributeTypeAndValue object. */
+	IMPORT_C static CX520AttributeTypeAndValue* NewLC(RReadStream& aStream);
+
+	/** Creates a new CX520AttributeTypeAndValue object from an attribute type and value.
+	* 
+	* @param aType	Attribute type
+	* @param aValue	Attribute value
+	* @return		New CX520AttributeTypeAndValue object */
+	IMPORT_C static CX520AttributeTypeAndValue* NewL(TAttributeType aType, const TDesC8& aValue);
+
+	/** Creates a new CX520AttributeTypeAndValue object from an attribute type and value.
+	* 
+	* @param aType	Attribute type
+	* @param aValue Attribute value
+	* @return		New CX520AttributeTypeAndValue object on the cleanup stack */
+	IMPORT_C static CX520AttributeTypeAndValue* NewLC(TAttributeType aType, const TDesC8& aValue);
+
+	/** Destructor.
+	* 
+	* Frees all resources owned by the object, prior to its destruction. */
+	IMPORT_C ~CX520AttributeTypeAndValue();
+
+	/** Gets the encoded attribute type of the object.
+	* 
+	* @return	A pointer descriptor representing the encoded attribute type. */
+	IMPORT_C const TPtrC Type() const;
+
+	/** Gets the encoded attribute value of the object.
+	* 
+	* @return	The pointer descriptor representing the encoded attribute value. */
+	IMPORT_C const TPtrC8 EncodedValue() const;
+
+	// Creates a copy of object's ASN.1 DER encoding.
+	// @return	New buffer containing object's ASN.1 DER encoding.
+	/** Gets the decoded value.
+	* 
+	* @return	A heap descriptor containing the decoded value. */
+	IMPORT_C virtual HBufC* ValueL() const;
+
+	/** Encodes the contents into an ASN.1 sequence object.
+	* 
+	* This is useful to insert attribute type/value pairs into other ASN.1 
+	* encoding trees.
+	* 
+	* @return	New ASN.1 sequence object containing attribute 
+	* 			type/value pair in for of an OID and an octet string; 
+	*			leaves the returned object on the cleanup stack. */
+	IMPORT_C CASN1EncSequence* EncodeASN1LC() const;
+
+	/** Encodes the contents into an ASN.1 sequence object.
+	* 
+	* Useful to insert attribute type/value pairs into other ASN.1 
+	* encoding trees.
+	* 
+	* @return 	New ASN.1 sequence object containing attribute 
+	* 			type/value pair in for of an OID and an octet string. */
+	IMPORT_C CASN1EncSequence* EncodeASN1L() const;
+
+	// This function compares the current element with aElement.
+	/** Compares the attribute type and decoded value of the specified object.
+	* 
+	* @param aElement	The CX520AttributeTypeAndValue object to be compared.
+	* @return 			ETrue, if the attribute types and the decoded values match; 
+	* 					EFalse, otherwise. */
+	IMPORT_C virtual TBool ExactMatchL(const CX520AttributeTypeAndValue& 
+		aElement) const;
+		
+	/** Externalises an object of this class to a write stream.
+	* 
+	* The presence of this function means that the standard templated operator<<() 
+	* can be used to externalise objects of this class.
+	* 
+	* @param aStream	Stream to which the object should be externalised. */
+	virtual void ExternalizeL(RWriteStream& aStream) const;
+private:
+	virtual void InternalizeL(RReadStream& aStream);
+	CX520AttributeTypeAndValue(const TAttributeType aType);
+	CX520AttributeTypeAndValue(); ///< Protected default constructor
+	void ConstructL(const CX520AttributeTypeAndValue& aPair);
+	void ConstructL(const TDesC8& aBinaryData, TInt& aPos);
+	void ConstructL(TAttributeType aType, const TDesC8& aValue);
+	/**
+     * This method finds out if case-insensitive comparisons must be done or not.
+	 * Email Address is the exceptional case of 'IA5String' value type for which comparisons must be
+	 * done case-insensitivly.
+	 * 
+	 * @param aSource	contains the encoded value of the attribute type.
+ 	 * @return	    	ETrue, if case-insensitive comparisons are to be done. 
+	 * 		        	This is only when value type is a Printable String OR if attribute type is an Email Address. 
+	 * 		        	EFalse, otherwise.
+ 	 */ 
+ 	TBool IsCaseInSensitiveL(const TDesC8& aSource) const;
+	HBufC* iType; ///< The encoded type
+	HBufC8* iValue; ///< The encoded value
+	};
+
+#endif