diff -r 000000000000 -r ba25891c3a9e secureswitools/swisistools/source/signsislib/certificateinfo.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/secureswitools/swisistools/source/signsislib/certificateinfo.h Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,181 @@ +/* +* Copyright (c) 2008-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 __CERTIFICATEINFO_H__ +#define __CERTIFICATEINFO_H__ + +#include +#include "sisdatetime.h" + +// Forward declarations +struct TConfValue + { + std::string iName; + std::string iValue; + }; + +struct TExtension + { + std::string iExtensionName; + bool iIsCritical; + bool iIsMultiLine; + std::string iValue; + std::vector iValueList; + }; + +enum TPublicKeyType + { + EUnknownKey, + EPubKeyDSA, + EPubKeyRSA + }; + +/** + * This class extracts certificate details from a X509 certificate. + */ +class CCertificateInfo + { + friend class CCertificateChain; + +public: + /** + * Constructor will take X509 class pointer. Then it will + * extract certificate details from the class. + */ + explicit CCertificateInfo (X509* aCertificate); + /** + * Free up owned resources + */ + ~CCertificateInfo(); + +public: + /** + * Get the instance of X509 certificate class. + */ + inline const X509* Certificate() const; + /** + * Issuer Name - Issuer of the certificate. + * @param aGetFullName If true it will return detail name else only + * common name (CN) will be returned. + * @return Issuer name + */ + std::wstring IssuerName(bool aGetFullName = false) const; + /** + * Subject Name - Name of the entity to whom the certificate was issued. + * @param aGetFullName If true it will return detail name else only + * common name (CN) will be returned. + * @return Subject name + */ + std::wstring SubjectName(bool aGetFullName = false) const; + /** + * Get the time from which the certificate is valid. + */ + const CSISDateTime& ValidFrom() const; + /** + * Get the time till which the certificate is valid. + */ + const CSISDateTime& ValidTo() const; + /** + * Certificate version. Version number starts with 0. + * Therefore certifcate having version 1 will return (0), + * certificate with version 3 will return 2. + * @return Certificate version. + */ + int Version() const; + /** + * Serial number of the certificate + */ + std::string SerialNumber() const; + /** + * Algorithm used to sign the certificate. + */ + std::string SignatureAlgo() const; + /** + * Algorithm used for key generation + */ + std::string PublicKeyAlgo() const; + /** + * Function to retrieve extensions present in the certificate. + * @return vector of TExtension class. TExtension class provide detail information + * of extension. + */ + const std::vector& Extensions() const; + /** + * Return the public key type. + */ + inline TPublicKeyType PublicKeyType() const; + /** + * This function will write the public key into the stream provided. + * @param aStream where the public key information need to be written. + * @param aIndent Indentation size. + */ + void PrintPublicKey(std::ostream& aStream, int aIndent = 0) const; + /** + * This function will write the signature into the stream provided. + * @param aStream where the signature need to be written. + * @param aIndent Indentation size. + */ + void PrintSignature(std::ostream& aStream, int aIndent = 0) const; + /** + * Write the certificate into a file. + * @param aCertFileName Certificate file name + */ + void ExtractCertificate(std::string& aCertFileName) const; + /** + * Check if a particular NID is present in the certificate. + * @return true if the NID is present else false. + */ + bool IsNIDPresent(int aNID) const; + +private: // Private Member Functions + void ConstructL(); + int GetNameEntry(X509_NAME* aName, char *aKey, wchar_t** aNameEntry) const; + std::wstring GetDistinguishedName(X509_NAME *x509Name, bool aGetFullName) const; + void SetDateTime(CSISDateTime& dateTime, ASN1_TIME* aASNTime); + void ExtractExtensions(); + void ExtractConfValues(STACK_OF(CONF_VALUE) *confList, TExtension& aExtInfo); + std::string Get_ASN1_STRING_Data(ASN1_STRING *aASN1String); + +private: + X509* iCertificate; + CSISDateTime iValidFrom; + CSISDateTime iValidTo; + TPublicKeyType iPublicKeyType; + std::vector iExtensions; + }; + +inline const X509* CCertificateInfo::Certificate() const + { + return iCertificate; + } + +inline TPublicKeyType CCertificateInfo::PublicKeyType() const + { + return iPublicKeyType; + } + + + +#endif // __CERTIFICATEINFO_H__ +