--- /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__
+