diff -r 000000000000 -r ba25891c3a9e secureswitools/swisistools/source/signsislib/sissignaturecertificatechain.h --- /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 + +#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& CertChain() const; + +private: + CSisSignatureCertificateChain (const CSisSignatureCertificateChain& aInitialiser):iSisSignatureCertChain(aInitialiser.iSisSignatureCertChain) + {} + +protected: + std::vector iSignatures; + CSignatureCertChainData& iSisSignatureCertChain; + CSisCertificateChain* iCertificateChain; + }; + + +inline void CSisSignatureCertificateChain::ExtractCertificateChain (std::string& aCertFileName) + { + iCertificateChain->ExtractCertificateChain (aCertFileName); + } + +inline const std::vector& CSisSignatureCertificateChain::CertChain() const + { + return iCertificateChain->CertChain(); + } + +#endif // __SIGNATURECERTIFICATECHAIN_H__ +