diff -r 000000000000 -r 2c201484c85f cryptoservices/certificateandkeymgmt/inc/cmsutils.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cryptoservices/certificateandkeymgmt/inc/cmsutils.h Wed Jul 08 11:25:26 2009 +0100 @@ -0,0 +1,173 @@ +/* +* Copyright (c) 2006-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 + @internalComponent + @released +*/ + +#ifndef CMSUTILS_H +#define CMSUTILS_H + +#include +#include +#include + +class CCmsCertificateChoice; +class CX509AlgorithmIdentifier; +class CX509Certificate; +class CMessageDigest; +class CRSAPrivateKey; +class CDSAPrivateKey; +class TASN1DecGeneric; +class CASN1EncObjectIdentifier; +class CASN1EncBase; + +/** +A utility class contains a set of static functions for encoding and decoding the +CMS signed data relevant CMS structures. +*/ +class CmsUtils + { +public: + /** + Decode the content type in CMS content info and encapsulated info. + @param aASN1DecGeneric the ASN decoded structure of the content info + @return the type of the content info. + */ + static TInt DecodeContentTypeL(const TASN1DecGeneric* aASN1DecGeneric); + + /** + Encode the content type in CMS content info and encapsulated info. + @param aContentType the type of the content info + @return the ASN.1 oid instance of the content type. + */ + static CASN1EncObjectIdentifier* EncodeContentTypeLC(TInt aContentType); + + /** + Add an encoded attribute certificate in the certificate set if it is not in the list already. + @param aCertList the certificate list to which the certificate is added + @param aCert the encoded certificate to be added. + @param aType the type of the encoded certificate. + */ + static void AddCertificateL(RPointerArray& aCertList, const TDesC8& aCert, CCmsCertificateChoice::TCertificateType aType); + + /** + Add an X509 certificate in the certificate set if it is not in the list already. + @param aCertList the certificate list to which the certificate is added + @param aCert the x509 certificate to be added. + */ + static void AddCertificateL(RPointerArray& aCertList, const CX509Certificate& aCert); + + /** + Add an algorithm in the algorithm set if it is not in the list already. + @param aAlgorithmIdList the algorithm list to which the algorithm is added + @param aDigestAlgorithm the digest algorithm identifier + */ + static void AddAlgorithmIdentifierL(RPointerArray& aAlgorithmIdList, TAlgorithmId aDigestAlgorithm); + + /** + Decode the algorithm identifier set + @param aDigestAlgorithms the algorithm list to which the decoded algorithms is added + @param aRawData the encoded algorithm identifier set + */ + static void DecodeDigestAlgorithmsL(RPointerArray& aDigestAlgorithms, const TDesC8& aRawData); + + /** + Decode the certificate set + @param aDigestAlgorithms the certficate list to which the decoded certificates is added + @param aRawData the encoded certficate set + */ + static void DecodeCertificatesL(RPointerArray& aCertificates, const TDesC8& aRawData); + + /** + Encode the certficate set and put the encoding on the cleanup stack + @param aCertList the certificates list to be encoded. + @return the ASN.1 DER encoding of certificate set + */ + static CASN1EncBase* EncodeCertificatesLC(const RPointerArray& aCertList); + + /** + Encode the digest algorithm set and put the encoding on the cleanup stack. + @param aCertList the certificates list to be encoded. + @return the ASN.1 DER encoding of certificate set + */ + static CASN1EncBase* EncodeDigestAlgorithmsLC(const RPointerArray& aDigestAlgorithms); + + /** + Dncode the octet string + @param aRawData the certificates list to be encoded. + @param aBuf the buffer to hold the octet string. + */ + static void DecodeOctetStringL(const TDesC8& aRawData, HBufC8*& aBuf); + + /** + Create a hash from the given algorithm identifier and put it on the cleanup stack. + @param aAlgorithm the hash identifier. + @return the hash + */ + static CMessageDigest* CreateHashLC(TAlgorithmId aAlgorithm); + + /** + Create the DSA signature of the given hash. + @param aHash the hash used to create signature. + @param aKey the DSA private key used to create signature + @return the descriptor holds the signature. + */ + static HBufC8* CreateSignatureL(const TDesC8& aHash, const CDSAPrivateKey& aKey); + + /** + Create the RSA signature of the given hash. + @param aHash the hash used to create signature. + @param aKey the RSA private key used to create signature + @return the descriptor holds the signature. + */ + static HBufC8* CreateSignatureL(const TDesC8& aHash, const CRSAPrivateKey& aKey); + + /** + Create the RSA signature of the given data, algorithm and private key. + @param aDataToBeSigned the data content to be signed. + @param aIsHash if the first paramter is a hash + @param aAlgorithm the digest algorithm used to create hash + @param aKey the RSA private key. + @return the descriptor holds the signature. + */ + static HBufC8* CreateSignatureL(const TDesC8& aDataToBeSigned, TBool aIsHash, TAlgorithmId aAlgorithm, const CRSAPrivateKey& aKey); + + /** + Create the DSA signature of the given data, algorithm and private key. + @param aDataToBeSigned the data content to be signed. + @param aIsHash if the first paramter is a hash + @param aAlgorithm the digest algorithm used to create hash + @param aKey the DSA private key. + @return the descriptor holds the signature. + */ + static HBufC8* CreateSignatureL(const TDesC8& aDataToBeSigned, TBool aIsHash, TAlgorithmId aAlgorithm, const CDSAPrivateKey& aKey); + + /** + Create the raw data from the ASN.1 class. + @param aEncoding the reference of the ASN.1 class + @return the descritor holds the raw data. + */ + static HBufC8* CreateDEREncodingLC(const CASN1EncBase& aEncoding); + }; + +#endif // CMSUTILS_H