diff -r 000000000000 -r 164170e6151a secsrv_plat/x509certnameparser_api/inc/x509CertNameParser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/secsrv_plat/x509certnameparser_api/inc/x509CertNameParser.h Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,293 @@ +/* +* 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: Extracts relevant certificate information to be shown to user. +* +*/ + + + +#ifndef X509CERTNAMEPARSER_H +#define X509CERTNAMEPARSER_H + +// INCLUDES +#include +#include // TGNType +//------------------------------------------------------------------------------ +// CONSTANTS +_LIT(KX509CNPComma,", "); + +// FORWARD DECLARATIONS +class CX509Certificate; +class CX500DistinguishedName; +class CX509CertExtension; +class CX509AltNameExt; + + +//------------------------------------------------------------------------------ +// +// CLASS DECLARATION + +/** +* Static class CX509CertNameParser provides functions that extract relevant +* information for user from x.509 certificate. CX509CertNameParser +* extracts the most important name info and tries to guarantee uniqueness +* in a list of certificates. +* @lib X509CertNameParser.dll +* @since Series60_2.0 +*/ +class X509CertNameParser + { + public: // Constructors and destructor + + + public: // New functions + + /** + * PrimaryAndSecondaryNameL_description. PrimaryAndSecondaryNameL + * member function is used to collect Primary and Secondsry Name data of + * certificate information. The first found non-empty naming element and + * not equal with label is Primary Name. + * The second available information element not equal with label is + * Secondary Name. + * @since Series60_2.0 + * @param aCertificate Certificate where the information is extracted. + * @param aPrimaryName IN null pointer, OUT first found name element + * according to name element order or KNulDesC if Primary Name isn't + * found. + * @param aSecondaryName IN null pointer, OUT second found name element + * according to name element order or KNullDesC if Secondary Name isn't found. + * @param aLabel Label of the certificate. Found elements are compared to + * label to make sure that aPrimaryName and aSecondaryName differ from + * label. If label doesn't exist, this can be left away. + * @return status, at the moment always KErrNone + */ + IMPORT_C static TInt PrimaryAndSecondaryNameL( + const CX509Certificate& aCertificate, + HBufC*& aPrimaryName, + HBufC*& aSecondaryName, + const TDesC& aLabel =KNullDesC ); + + /** + * SubjectFullNameL_description. SubjectFullNameL member function is + * used to collect all relevant subject information from the subject + * and from the subject alternative name extension of the certificate. + * @since Series60_2.0 + * @param aCertificate Certificate where the information is extracted. + * @param aSubjectName IN null pointer, OUT Full subject name of the + * certificate or KNullDesC if nothing is found. + * @param aLabel Label of the certificate. Found elements are compared to + * label to make sure that aPrimaryName and aSecondaryName differ from + * label. If label doesn't exist, this can be left away. + * @return status, at the moment always KErrNone + */ + IMPORT_C static TInt SubjectFullNameL( + const CX509Certificate& aCertificate, + HBufC*& aSubjectName, + const TDesC& aLabel = KNullDesC ); + + /** + * IssuerFullNameL_description. IssuerFullNameL member function is + * used to collect all the relevant Issuer information from the Issuer + * and from the Issuer alternative name extension of the certificate. + * @since Series60_2.0 + * @param aCertificate Certificate where the information is extracted. + * @param aIssuerName IN null pointer, OUT Full issuer name of the + * certificate or KNullDesC if nothing is found.. + * @return status, at the moment always KErrNone + */ + IMPORT_C static TInt IssuerFullNameL( + const CX509Certificate& aCertificate, + HBufC*& aIssuerName ); + + public: // Functions from base classes + + protected: // New functions + + protected: // Functions from base classes + + private: //Private data types + + /** + * enum TX509CNPNameType declaration. + * + */ + enum TX509CNPNameType + { + EX509CNPPrimAndSecond, + EX509CNPFullName + }; + + /** + * enum TX509CNPNameElement declaration. + * This enum defines the naming element order that can be changed by + * chancing the order of enum's members. + */ + enum TX509CNPNameElement + { // DN = Distinguish name, Alt = Alternative name + EDNCommonName = 1, // common name of the subject + ECritAltRFC822Name, // rfc822Name of the critical subject alternative name + EDNOrganizationName, // OrganizationName of the subject + EDNOrganizationalUnitName, // OrganizationalUnitName of the subject + ECritAltDNSName, // dNSName of the critical subject alternative name + ECritAltURI, // URI of the critical subject alternative name + ECritAltDirectoryName, // directoryName of the critical subject alternative name + ECritAltIPAddress, // iPAddress of the critical subject alternative name + EAltRFC822Name, // rfc822Name of the subject alternative name + EAltDNSName, // dNSName of the subject alternative name + EAltURI, // URI of the subject alternative name + EDNCountryName, // countryName of the subject + EDNStateOrProvinceName, // stateOrProvinceName of the subject + EDNLocalityName, // localityName of the subject + EAltDirectoryName, // directoryName of the subject alternative name + EAltIPAddress // iPAddress of the subject alternative name + }; + + private: + + /** + * C++ default constructor. + */ + X509CertNameParser(); + + + private: //New functions + + /** + * GetFullNameL_description. + * Common function for FullName functions. + * @since Series60_2.0 + * @param aDN Distinguished name + * @param aExtension Pointer to Extension + * @param aSubjectName IN null pointer, OUT Full subject name of the + * certificate or KNullDesC if nothing is found. + * @return TInt type value. + */ + static TInt GetFullNameL( + const CX500DistinguishedName& aDN, + const CX509CertExtension* aExtension, + HBufC*& aName, + const TDesC& aLabel = KNullDesC ); + + + /** + * GetNamePartsL_description. + * Collects all the name parts of the certificate to array. One name element + * is placed to one element of array. + * @since Series60_2.0 + * @param aDN Distinguished name + * @param aExtension Pointer to Extension + * @param aNameArray Found name elements are appended to this array. + * @param aNameType EX509CNPPrimAndSecond or EX509CNPFullName + * @return TInt type value. + */ + static TInt GetNamePartsL( + const CX500DistinguishedName& aDN, + const CX509CertExtension* aExtension, + CDesCArray& aNameArray, + TX509CNPNameType aNameType ); + + /** + * GetDNPartL_description. + * Gets one name element of the DN identified by OID. + * @since Series60_2.0 + * @param aDN Distinguished name + * @param aSubPartOID OID of the distinguished name subpart + * @param aNameArray Found name element is appended to this array. + * @return void + */ + static void GetDNPartL( + const CX500DistinguishedName& aDN, + const TDesC& aSubPartOID, + CDesCArray& aNameArray ); + + /** + * GetDNPartAllL_description. + * Gets all name elements of the DN identified by one OID. + * @since Series60_2.0 + * @param aDN Distinguished name + * @param aSubPartOID OID of the distinguished name subpart + * @param aNameArray Found name elements are appended to this array. + * @return void + */ + static void GetDNPartAllL( + const CX500DistinguishedName& aDN, + const TDesC& aSubPartOID, + CDesCArray& aNameArray ); + + /** + * GetAltNamePartL_description. + * Gets all elements of alternative name identified by one OID. + * @since Series60_2.0 + * @param aAltName Alternative name extension + * @param aSubPartType Type of the alternative name subpart + * @param aNameArray Found name elements are appended to this array. + * @return void + */ + static void GetAltNamePartL( + const CX509AltNameExt& aAltName, + const TGNType& aSubPartType, + CDesCArray& aNameArray ); + + /** + * HandleAltNameL_description. + * Handles error. If error is KErrNone, KErrArgument or KErrNotSupported, it just + * returns aError, otherwise it leaves with aError. + * @since Series60_2.0 + * @param aError Error + * @return TInt aError + */ + static TInt AddAltNameToArrayL( + TInt aError, + CX509DomainName* aDomainName, + CDesCArray& aNameArray ); + + /** + * CompareAndAddNameL_description. + * Adds proposal to array if none of the elements of array isn't equal + * with proposal. + * @since Series60_2.0 + * @param aProposal + * @param aNameArray + * @return void. + */ + static void CompareAndAddNameL( + const TDesC& aProposal, + CDesCArray& aNameArray ); + + /** + * AddToBufLC_description. + * Appends aName to aBuf. If aBuf isn't NULL, first aBuf is deleted and + * memory is allocated for existing data and for aName. + * @since Series60_2.0 + * @param aName Desciptor that is appended to aBuf + * @param aBuf IN Null pointer or buffer + * @return void. + */ + static void AddToBufLD( const TDesC& aName, HBufC*& aBuf ); + + /** + * HandleErrorL_description. + * Handles error. If error is KErrNone, KErrArgument or KErrNotSupported, it just + * returns aError, otherwise it leaves with aError. + * @since Series60_2.0 + * @param aError Error + * @return TInt aError + */ + static TInt HandleErrorL( TInt aError ); + + }; + +#endif // X509CERTNAMEPARSER_H + +// End of File