secureswitools/swisistools/source/signsislib/sissignaturecertificatechain.h
changeset 0 ba25891c3a9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/signsislib/sissignaturecertificatechain.h	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2004-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: 
+* SIGNATURECERTIFICATECHAIN.H
+*
+*/
+
+
+/**
+ @file 
+ @publishedPartner
+ @released
+*/
+
+#ifndef __SIGNATURECERTIFICATECHAIN_H__
+#define __SIGNATURECERTIFICATECHAIN_H__
+
+#include <vector>
+
+#include "signaturedata.h"
+#include "certchaindata.h"
+#include "sisarray.h"
+#include "certificateinfo.h"
+#include "siscertificatechain.h"
+
+
+class CSISController;
+class CSignature;
+class CSignatureCertChainData;
+
+/**
+ * This class represents SISSignatureCertificateChain field in 
+ * SISX file format. Refer software install file format document 
+ * for more details.
+ * 
+ * SISSignatureCertificateChain contains the signatures used to 
+ * sign the SIS file and the certificate chain needed to
+ * validate the signatures
+ */
+class CSisSignatureCertificateChain
+	{
+public:
+	/**
+	 * Constructor.
+	 */
+	explicit CSisSignatureCertificateChain (CSignatureCertChainData& aSisSignatureCertChain);
+	/**
+	 * Cleanup owned resources.
+	 */
+	~CSisSignatureCertificateChain();
+
+public:
+	/**
+	 * Function creates an instance of CSignature class (which represents a signature)
+	 * and then call its Sign method to actually sign the content. Then the instance 
+	 * of CSignature is added in the already existing list of signatures.
+	 *  
+	 * @param aAlgorithm Algorithm by which the content needs to be signed.
+	 * @param aCertificate public Key
+	 * @param aPrivateKey private key to sign the content.
+	 * @param aPassPhrase pass phrase by which the private key is encrypted.
+	 * @param aBuffer content to be signed.
+	 * @param aBufferSize content length.
+	 */
+	void Sign (	const CSISSignatureAlgorithm::TAlgorithm aAlgorithm, const std::wstring& aCertificate,
+				const std::wstring& aPrivateKey, const std::wstring& aPassPhrase,  const TUint8* aBuffer, const TUint32 aBufferSize);
+	/**
+	 * Function to veriify the signature of the controller. 
+	 * @param aController Controller whose signature needs to be verified.
+	 * @param aParentHeaderSize controller's header position.
+	 */
+	void VerifySignature (const CSISController* aController, const TSISStream::pos_type aParentHeaderSize) const;
+
+	/**
+	 * Function to extract certificate chain. All the certificates present
+	 * in the chain will be extracted into a single certificate file (.pem)
+	 * @param aCertFileName Certificate chain file name
+	 */
+
+	void ExtractCertificateChain (std::string& aCertFileName);
+	
+	/**
+	 * Retrieve the certificate chain. Where each certificate of the
+	 * chain is represented by CCertificateInfo class.
+	 */
+	inline const std::vector<CCertificateInfo*>& CertChain() const;
+
+private:
+	CSisSignatureCertificateChain (const CSisSignatureCertificateChain& aInitialiser):iSisSignatureCertChain(aInitialiser.iSisSignatureCertChain)
+	{}
+
+protected:
+	std::vector<CSignature*>	iSignatures;
+	CSignatureCertChainData&	iSisSignatureCertChain;
+	CSisCertificateChain*		iCertificateChain;
+	};
+
+
+inline void CSisSignatureCertificateChain::ExtractCertificateChain (std::string& aCertFileName)
+	{
+	iCertificateChain->ExtractCertificateChain (aCertFileName);
+	}
+
+inline const std::vector<CCertificateInfo*>& CSisSignatureCertificateChain::CertChain() const
+	{
+	return iCertificateChain->CertChain();
+	}
+
+#endif // __SIGNATURECERTIFICATECHAIN_H__
+