diff -r 000000000000 -r 2c201484c85f cryptoservices/certificateandkeymgmt/inc/pkcs7signedobject.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cryptoservices/certificateandkeymgmt/inc/pkcs7signedobject.h Wed Jul 08 11:25:26 2009 +0100 @@ -0,0 +1,155 @@ +/* +* Copyright (c) 2003-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 __PKCS7_SIGNED_OBJECT_H__ +#define __PKCS7_SIGNED_OBJECT_H__ + +#include +#include + +class CPKCS7ContentInfo; +class CPKCS7ExtendedCertificateOrCertificate; +class CPKCS7SignerInfo; +class TASN1DecGeneric; +class CX509AlgorithmIdentifier; +class CX509Certificate; + +const TInt KPKCS7MaxDataElements = 6; + +/** + A representation of a PKCS7 (signed data) entity + This class is only used for update notifications and so does not provide + full functionality. In particular, there is no means for creating a new + PKCS7 object (other than from binary data),there is no means to modify it + and revokation lists are not supported. The optional fields in signerinfo + are not supported and are ignored. + @internalTechnology + */ +class CPKCS7SignedObject : public CSignedObject + { +public: + /** + Values for encoded data element positions in tbsCert data structure. + These values are passed as the index to the DataElementEncoding() function + Objects containing revokation lists are not supported + */ + enum + { + EVersionNumber = 0, + EDigestAlgorithms = 1, + EContentInfo = 2, + ECertificates = 3, + ERevocationLists = 4, + ESignedInfo = 5 + }; + /** + Creates a PKCS7 object from the RFC2315 representation + @param aRawData The binary ASN1 encoded entity + @return The fully constructed object + */ + IMPORT_C static CPKCS7SignedObject* NewL(const CPKCS7ContentInfo& aContentInfo); + + /** + Creates a PKCS7-2 object from the RFC2315 representation + @param aRawData The binary ASN1 encoded entity + @return The fully constructed object + */ + IMPORT_C static CPKCS7SignedObject* NewLC(const CPKCS7ContentInfo& aContentInfo); + + /** (From CSignedObject) + Accesses one of the encoded fields + @param aIndex One of the data element positions listed in the preceding enum + @return The encoded field + */ + IMPORT_C virtual const TPtrC8* DataElementEncoding(const TUint aIndex) const; + /** (From CSignedObject) + Not supported + */ + IMPORT_C virtual void InternalizeL(RReadStream& aStream) ; + /** (From CSignedObject) + Provides access to the signed data (PKCS7-2) part of the PKCS7 object + @return The signed data + */ + IMPORT_C virtual const TPtrC8 SignedDataL() const; + /** + Provides access to the digest algorithms + @return The digest algorithms + */ + IMPORT_C const RPointerArray& DigestAlgorithms() const; + /** + Provides access to the PKCS7 version number + @return The version number + */ + IMPORT_C TInt Version() const; + /** + Provides access to the PKCS7 version number + @return The version number + */ + IMPORT_C const CPKCS7ContentInfo& ContentInfo() const; + /** + Provides access to the certificates + @return The certificates + */ + IMPORT_C const RPointerArray& Certificates() const; + /** + Provides access to the signer information + @return The signer information + */ + IMPORT_C const RPointerArray& SignerInfo() const; + /** + Validates the signer and creates the certificate chain for that signer + @param aSignerInfo The signer to be validated + @param aCertChainEncoding The certificate chain. This is created and pushed onto the + cleanup stack by the function. + */ + IMPORT_C TBool ValidateSignerL(const CPKCS7SignerInfo& aSignerInfo, HBufC8*& aCertChainEncoding); + /** The destructor */ + IMPORT_C ~CPKCS7SignedObject(); +protected: + IMPORT_C CPKCS7SignedObject(void); + IMPORT_C void ConstructL(const CPKCS7ContentInfo& aContentInfo); + + +private: + CPKCS7SignedObject(const CPKCS7SignedObject&); + void InitSignedObjectL(const TDesC8& aRawData); + void DecodeSignedDataL(const TDesC8& aRawData); + void DecodeDigestAlgorithmsL(const TDesC8& aRawData); + void DecodeCertificatesL(const TDesC8& aRawData); + void DecodeRevocationListsL(const TDesC8& aRawData); + void DecodeSignerInfoL(const TDesC8& aRawData); + + TBool ValidateSignatureL(const CPKCS7SignerInfo& aSignerInfo, const CX509Certificate& aEndEntityCert); +protected: + RPointerArray iDigestAlgorithms; + TInt iVersion; + CPKCS7ContentInfo* iContentInfo; + RPointerArray iCertificates; + RPointerArray iSignerInfo; + TFixedArray iDataElements; + }; + +#endif //__PKCS7_SIGNED_OBJECT_H__