--- /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 <openssl/x509.h>
+#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<TConfValue> 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<TExtension>& 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<TExtension> iExtensions;
+ };
+
+inline const X509* CCertificateInfo::Certificate() const
+ {
+ return iCertificate;
+ }
+
+inline TPublicKeyType CCertificateInfo::PublicKeyType() const
+ {
+ return iPublicKeyType;
+ }
+
+
+
+#endif // __CERTIFICATEINFO_H__
+