--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptoservices/certificateandkeymgmt/inc/cmssignerinfo.h Wed Jul 08 11:25:26 2009 +0100
@@ -0,0 +1,345 @@
+/*
+* 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
+ @publishedPartner
+ @released
+*/
+
+#ifndef CMSSIGNERINFO_H
+#define CMSSIGNERINFO_H
+
+#include <e32base.h>
+
+class CX509AlgorithmIdentifier;
+class CPKCS7IssuerAndSerialNumber;
+class CCmsSignerIdentifier;
+class CASN1EncSequence;
+class CX509Certificate;
+class CDSAPrivateKey;
+class CRSAPrivateKey;
+class CMessageDigest;
+class CASN1EncOctetString;
+class CASN1EncBase;
+
+
+/**
+Represents CMS signer information as defined in RFC2630.
+SignedAttributes and UnsignedAttributes are not supported.
+*/
+class CCmsSignerInfo : public CBase
+ {
+public:
+
+ /**
+ @internalComponent
+
+ Creates a CMS signer info object as defined in RFC2630.
+ @param aDataToBeSigned The data content or its hash to be signed.
+ @param aIsHash Indicates whether the first parameter is a hash.
+ @param aKey The DSA private key used to sign.
+ @param aSignerIdentifier The signer identifier. Ownership of
+ the signer identifier is taken by this newly created signer info object.
+ If construction fails, ownership is not transferred. The user
+ needs to push aSignerIdentifier onto the cleanup stack before calling this
+ method, and pop it off the cleanup stack after successful construction.
+ @param aDigestAlgorithm The digest algorithm used to create the hash.
+ Ownership of the digest algorithm instance is taken by
+ this newly created signer info object. If construction fails, ownership
+ is not transferred. The user needs to push aDigestAlgorithm onto the cleanup stack before
+ calling this method and pop it off the cleanup stack after successful construction.
+ @param aSignatureAlgorithm The signature algorithm to create the signature.
+ Ownership of the signature algorithm instance is taken by this
+ newly created signer info object. If construction fails, ownership is not transferred.
+ The user needs to push aDigestAlgorithm onto the cleanup stack before calling this
+ method and pop it off the cleanup stack after successful construction.
+ @return The fully constructed object.
+ */
+ static CCmsSignerInfo* NewL(const TDesC8& aDataToBeSigned,
+ TBool aIsHash,
+ const CDSAPrivateKey& aKey,
+ CCmsSignerIdentifier* aSignerIdentifier,
+ CX509AlgorithmIdentifier* aDigestAlgorithm,
+ CX509AlgorithmIdentifier* aSignatureAlgorithm);
+ /**
+ @internalComponent
+
+ Creates a CMS signer info object as defined in RFC2630
+ and leaves it on the cleanup stack.
+ @param aDataToBeSigned The data content or its hash to be signed.
+ @param aIsHash Indicates whether the first parameter is a hash.
+ @param aKey The DSA private key used to sign.
+ @param aSignerIdentifier The signer identifier. Ownership of
+ the signer identifier is taken by this newly created signer info object.
+ If construction fails, ownership is not transferred. The user
+ needs to push aSignerIdentifier onto the cleanup stack before calling this
+ method, and pop it off the cleanup stack after successful construction.
+ @param aDigestAlgorithm The digest algorithm used to create the hash.
+ Ownership of the digest algorithm instance is taken by
+ this newly created signer info object. If construction fails, ownership
+ is not transferred. The user needs to push aDigestAlgorithm onto the cleanup stack before
+ calling this method and pop it off the cleanup stack after successful construction.
+ @param aSignatureAlgorithm The signature algorithm to create the signature.
+ Ownership of the signature algorithm instance is taken by this
+ newly created signer info object. If construction fails, ownership is not transferred.
+ The user needs to push aDigestAlgorithm onto the cleanup stack before calling this
+ method and pop it off the cleanup stack after successful construction.
+ @return The fully constructed object.
+ */
+ static CCmsSignerInfo* NewLC(const TDesC8& aDataToBeSigned,
+ TBool aIsHash,
+ const CDSAPrivateKey& aKey,
+ CCmsSignerIdentifier* aSignerIdentifier,
+ CX509AlgorithmIdentifier* aDigestAlgorithm,
+ CX509AlgorithmIdentifier* aSignatureAlgorithm);
+ /**
+ @internalComponent
+
+ Creates a CMS signer info object as defined in RFC2630.
+ @param aDataToBeSigned The data content or its hash to be signed.
+ @param aIsHash Indicates whether the first parameter is a hash.
+ @param aKey The RSA private key used to sign.
+ @param aSignerIdentifier The signer identifier. Ownership of
+ the signer identifier is taken by this newly created signer info object.
+ If construction fails, ownership is not transferred. The user
+ needs to push aSignerIdentifier onto the cleanup stack before calling this
+ method, and pop it off the cleanup stack after successful construction.
+ @param aDigestAlgorithm The digest algorithm used to create the hash.
+ Ownership of the digest algorithm instance is taken by
+ this newly created signer info object. If construction fails, ownership
+ is not transferred. The user needs to push aDigestAlgorithm onto the cleanup stack before
+ calling this method and pop it off the cleanup stack after successful construction.
+ @param aSignatureAlgorithm The signature algorithm to create the signature.
+ Ownership of the signature algorithm instance is taken by this
+ newly created signer info object. If construction fails, ownership is not transferred.
+ The user needs to push aDigestAlgorithm onto the cleanup stack before calling this
+ method and pop it off the cleanup stack after successful construction.
+ @return The fully constructed object.
+ */
+ static CCmsSignerInfo* NewL(const TDesC8& aDataToBeSigned,
+ TBool aIsHash,
+ const CRSAPrivateKey& aKey,
+ CCmsSignerIdentifier* aSignerIdentifier,
+ CX509AlgorithmIdentifier* aDigestAlgorithm,
+ CX509AlgorithmIdentifier* aSignatureAlgorithm);
+ /**
+ @internalComponent
+
+ Creates a CMS signer info object as defined in RFC2630
+ and leaves it on the cleanup stack.
+ @param aDataToBeSigned The data content or its hash to be signed.
+ @param aIsHash Indicates whether the first parameter is a hash.
+ @param aKey The RSA private key used to sign.
+ @param aSignerIdentifier The signer identifier. Ownership of
+ the signer identifier is taken by this newly created signer info object.
+ If construction fails, ownership is not transferred. The user
+ needs to push aSignerIdentifier onto the cleanup stack before calling this
+ method, and pop it off the cleanup stack after successful construction.
+ @param aDigestAlgorithm The digest algorithm used to create the hash.
+ Ownership of the digest algorithm instance is taken by
+ this newly created signer info object. If construction fails, ownership
+ is not transferred. The user needs to push aDigestAlgorithm onto the cleanup stack before
+ calling this method and pop it off the cleanup stack after successful construction.
+ @param aSignatureAlgorithm The signature algorithm to create the signature.
+ Ownership of the signature algorithm instance is taken by this
+ newly created signer info object. If construction fails, ownership is not transferred.
+ The user needs to push aDigestAlgorithm onto the cleanup stack before calling this
+ method and pop it off the cleanup stack after successful construction.
+ @return The fully constructed object.
+ */
+ static CCmsSignerInfo* NewLC(const TDesC8& aDataToBeSigned,
+ TBool aIsHash,
+ const CRSAPrivateKey& aKey,
+ CCmsSignerIdentifier* aSignerIdentifier,
+ CX509AlgorithmIdentifier* aDigestAlgorithm,
+ CX509AlgorithmIdentifier* aSignatureAlgorithm);
+
+ /**
+ @internalComponent
+
+ Creates a CMS signer info object as defined in RFC2630.
+ @param aRawData the encoded signer info.
+ @return The fully constructed object.
+ */
+ static CCmsSignerInfo* NewL(const TDesC8& aRawData);
+
+ /**
+ @internalComponent
+
+ Creates a CMS signer info object as defined in RFC2630
+ and leaves it on the cleanup stack.
+ @param aRawData The encoded signer info.
+ @return The fully constructed object.
+ */
+ static CCmsSignerInfo* NewLC(const TDesC8& aRawData);
+ virtual ~CCmsSignerInfo();
+
+ /**
+ Returns the version of the CMS signer info object.
+ @return The version of the CMS signer info object.
+ */
+ IMPORT_C TInt Version() const;
+
+ /**
+ Returns whether signed attributes are present or not.
+ @return Boolean indicating whether signed attributes are present or not.
+ */
+ IMPORT_C TBool IsSignedAttributesPresent() const;
+
+ /**
+ Returns whether unsigned attributes are present or not.
+ @return Boolean indicating whether unsigned attributes are present or not.
+ */
+ IMPORT_C TBool IsUnsignedAttributesPresent() const;
+
+ /**
+ Returns the digest algorithm identifier.
+ @return The digest algorithm identifier reference.
+ */
+ IMPORT_C const CX509AlgorithmIdentifier& DigestAlgorithm() const;
+
+ /**
+ Returns the signature algorithm identifier.
+ @return The signature algorithm identifier reference.
+ */
+ IMPORT_C const CX509AlgorithmIdentifier& SignatureAlgorithm() const;
+
+ /**
+ Returns the signature value.
+ @return The signature value.
+ */
+ IMPORT_C const TPtrC8 SignatureValue() const;
+
+ /**
+ Returns the signer identifier.
+ @return the signer identifier reference.
+ */
+ IMPORT_C const CCmsSignerIdentifier& SignerIdentifier() const;
+
+ /**
+ @internalComponent
+
+ Creates the ASN.1 sequence of this CMS signed object and leaves it on the cleanup stack.
+ @return ASN.1 sequence of this object.
+ */
+ CASN1EncSequence* EncodeASN1DERLC() const;
+
+private:
+ /**
+ Constructor.
+ */
+ CCmsSignerInfo();
+
+
+private:
+ /**
+ second phase constructor
+ @param aDataToBeSigned the data or its hash
+ @param aIsHash a flag to represent if the first paramter is hash or data content
+ @param aKey the DSA private key used to create the signature.
+ @param aSignerIdentifier the signer identifier.
+ @param aDigestAlgorithm the digest algorithm used to create hash.
+ @param aSignatureAlgorithm the signature alogorithm to create signature
+ */
+ void ConstructL(const TDesC8& aDataToBeSigned,
+ TBool aIsHash,
+ const CDSAPrivateKey& aKey,
+ CCmsSignerIdentifier* aSignerIdentifier,
+ CX509AlgorithmIdentifier* aDigestAlgorithm,
+ CX509AlgorithmIdentifier* aSignatureAlgorithm);
+
+ /**
+ second phase constructor
+ @param aDataToBeSigned the data or its hash
+ @param aIsHash a flag to represent if the first paramter is hash or data content
+ @param aKey the RSA private key used to create the signature.
+ @param aSignerIdentifier the signer identifier.
+ @param aDigestAlgorithm the digest algorithm used to create hash.
+ @param aSignatureAlgorithm the signature alogorithm to create signature.
+ */
+ void ConstructL(const TDesC8& aDataToBeSigned,
+ TBool aIsHash,
+ const CRSAPrivateKey& aKey,
+ CCmsSignerIdentifier* aSignerIdentifier,
+ CX509AlgorithmIdentifier* aDigestAlgorithm,
+ CX509AlgorithmIdentifier* aSignatureAlgorithm);
+
+ /**
+ Second phase constructor
+ @param aRawData the encoded the CMS content info
+ */
+ void ConstructL(const TDesC8& aRawData);
+
+ /**
+ Encode the signer identifier
+ @return encoding of the signer identifier
+ */
+ CASN1EncBase* EncodeSignerIdentifierLC() const;
+
+ /**
+ Decode the signature
+ @param aRawData the encoded signature
+ */
+ void DecodeEncryptedDigestL(const TDesC8& aRawData);
+
+ /**
+ Decode the signer identifier
+ @param aRawData the encoded signer identifier
+ */
+ void DecodeSignerIdentifierL(const TDesC8& aRawData);
+
+private:
+ /**
+ Represents if the Signed Attribute is present
+ */
+ TBool iSignedAttributesPresent;
+
+ /**
+ Represents if the Unsigned Attribute is present
+ */
+ TBool iUnsignedAttributesPresent;
+
+ /**
+ The version of the signer info
+ */
+ TInt iVersion;
+
+ /**
+ the signer identifier
+ */
+ CCmsSignerIdentifier* iSignerIdentifier;
+
+ /**
+ The digest algorithm identifier
+ */
+ CX509AlgorithmIdentifier* iDigestAlgorithm;
+ /**
+ The signature algorithm identifier
+ */
+ CX509AlgorithmIdentifier* iSignatureAlgorithm;
+
+ /**
+ the signature value
+ */
+ HBufC8* iSignatureValue;
+ };
+
+#endif