diff -r 675a964f4eb5 -r 35751d3474b7 cryptoservices/certificateandkeymgmt/inc/cmsutils.h --- a/cryptoservices/certificateandkeymgmt/inc/cmsutils.h Tue Jul 21 01:04:32 2009 +0100 +++ b/cryptoservices/certificateandkeymgmt/inc/cmsutils.h Thu Sep 10 14:01:51 2009 +0300 @@ -1,173 +1,172 @@ -/* -* 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 +/* +* 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 +