/** Copyright (c) 2005-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_DIGEST_INFO_H__#define __PKCS7_DIGEST_INFO_H__#include <e32base.h>#include <x509cert.h>#include <signed.h>#include <asn1dec.h>/** Provides the means to decode PKCS#7 encoded DigestInfo Structure. */class CPKCS7DigestInfo : public CBase {public: /** Creates a new PKCS#7 DigestInfo object. @param aRawData contains a PKCS#7 DigestInfo Structure @return A pointer to the newly allocated object. @leave KErrArgument if digestAlgorithm and digest is not present. @leave KErrNotSupported if algorithm is other than MD2, MD5 and SHA1. */ IMPORT_C static CPKCS7DigestInfo* NewL(const TDesC8& aRawData); /** An Algorithm present DigestAlgorithmIdentifier. @return The enum which identifies the type of Algorithm used to obtain the hash. */ IMPORT_C TAlgorithmId Algorithm() const; /** Encoded Parameters present in the DigestAlgorithmIdentifier. The client has to check for data length. It is 0 in case there are no EncodedParams @return The Encoded Parameters which is in the DigestAlgorithmIdentifier. */ IMPORT_C const TPtrC8& EncodedParams() const; /** The Digest which is in the DigestInfo. @return The Digest which is in the DigestInfo and is an Octet String. */ IMPORT_C const TDesC8& Digest() const; /** Destructor. */ virtual ~CPKCS7DigestInfo();private: /** Constructor. */ CPKCS7DigestInfo(); /** Copy Constructor. @param aDigestInfo A CPKCS7DigestInfo object. */ CPKCS7DigestInfo(const CPKCS7DigestInfo& aDigestInfo); /** Assignment operator. @param aDigestInfo A CPKCS7DigestInfo object. @return A reference to CPKCS7DigestInfo class. */ CPKCS7DigestInfo& operator=(const CPKCS7DigestInfo& aDigestInfo); /** Decodes the given ASN1 DigestInfo. Below is the ASN1 syntax DigestInfo ::= SEQUENCE { digestAlgorithm DigestAlgorithmIdentifier, digest Digest } Digest ::= OCTET String DigestAlgorithmIdentifier ::= AlgorithmIdentifier AlgorithmIdentifier ::= SEQUENCE { algorithm ALGORITHM.&id({SupportedAlgorithms}), parameters ALGORITHM.&Type({SupportedAlgorithms}{@ algorithm}) OPTIONAL } @param aRawData A descriptor containing the PKCS7 DigestInfo Sequence. @leave KErrArgument if digestAlgorithm and digest is not present. @leave KErrNotSupported if algorithm is other than MD2, MD5 and SHA1. @see TASN1DecGeneric, CX509AlgorithmIdentifier. */ void ConstructL(const TDesC8& aRawData);private: /** The object identifier which identifies the message-digest algorithm. A message-digest algorithm maps an octet string (the message) to another octet string (the message digest) */ TAlgorithmId iAlgorithmId; /** Encoded Parameters which is in the DigestAlgorithmIdentifier */ TPtrC8 iEncodedParams; /** The Digest is present in the DigestInfo. It is the result of the message-digesting process */ TPtrC8 iDigest; };#endif //__PKCS7_DIGEST_INFO_H__