diff -r 675a964f4eb5 -r 35751d3474b7 crypto/weakcryptospi/inc/spi/cryptosignatureapi.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/crypto/weakcryptospi/inc/spi/cryptosignatureapi.h Thu Sep 10 14:01:51 2009 +0300 @@ -0,0 +1,327 @@ +/* +* 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: +* crypto signature application interface +* +*/ + + +/** + @file + @publishedPartner + @released +*/ + +#ifndef __CRYPTOAPI_SIGNATUREAPI_H__ +#define __CRYPTOAPI_SIGNATUREAPI_H__ + +#include <cryptospi/cryptobaseapi.h> + +namespace CryptoSpi + { + class CKey; + class MSignatureBase; + class MSigner; + class CCryptoParams; + class MAsyncSigner; + class MVerifier; + class MAsyncVerifier; + + /** + Base class for signer and verifier + */ + NONSHARABLE_CLASS(CSignatureBase) : public CCryptoBase + { + public: + + /** + Set the padding mode for the signer or verifier. Reset() is called to reinitialise the cipher. + @param aPaddingMode The padding mode of the signer + */ + IMPORT_C void SetPaddingModeL(TUid aPaddingMode); + + /** + Set the private key for the signer or verifier. Reset() is called to reinitialise the cipher. + @param aPrivateKey The privatekey that used to sign + */ + IMPORT_C void SetKeyL(const CKey& aPrivateKey); + + /** + Gets the maximum size of input accepted by this object. + @return The maximum length allowed in bytes + */ + IMPORT_C TInt GetMaximumInputLengthL() const; + + /** + Gets the maximum size of output that can be generated by this object. + @return The maximum output length in bytes + */ + IMPORT_C TInt GetMaximumOutputLengthL() const; + + /** + Destructor + */ + virtual ~CSignatureBase(); + + protected: + /** + * @internalComponent + * + * Constructor + **/ + CSignatureBase(MSignatureBase* aSignatureProcessor, TInt aHandle); + }; + + + /** + Synchronous signer API, which wraps a synchronous signer plugin implementation + */ + NONSHARABLE_CLASS(CSigner) : public CSignatureBase + { + public: + /** + * @internalComponent + * + * Create a CSigner instance from the given MSigner instance + * @param aSigner The signer plugin instance + * @return A pointer to a CSigner instance + **/ + static CSigner* NewL(MSigner* aSigner, TInt aHandle); + + /** + Destructor + */ + IMPORT_C ~CSigner(); + + /** + Signs the input hash + @param aInput The hash of the message to sign + @param aSignature The signature of the hash + */ + IMPORT_C void SignL(const TDesC8& aInput, CCryptoParams& aSignature); + + private: + CSigner(MSigner* aSigner, TInt aHandle); + }; + + /** + Asynchronous signer API, which wraps an asynchronous signer plugin implementation + */ + NONSHARABLE_CLASS(CAsyncSigner) : public CSignatureBase + { + public: + + /** + * @internalComponent + * + * Create a CAsyncSigner instance from the given MAsyncSigner instance + * @param aAsyncSigner The async signer plugin instance + * @return A pointer to a CAsyncSigner instance + **/ + static CAsyncSigner* NewL(MAsyncSigner* aAsyncSigner, TInt aHandle); + + /** + Destructor + */ + IMPORT_C ~CAsyncSigner(); + + /** + Set the public key for the signer + @param aInput The hash of the message to sign + @param aSignature The signature of the hash + @param aRequestStatus + */ + IMPORT_C void SignL(const TDesC8& aInput, CCryptoParams& aSignature, TRequestStatus& aRequestStatus); + + /** + Cancel the outstanding request + */ + IMPORT_C void Cancel(); + + private: + + CAsyncSigner(MAsyncSigner* aAsyncSigner, TInt aHandle); + }; + + /** + Synchronous verifier API, which wraps a synchronous verifier plugin implementation + */ + NONSHARABLE_CLASS(CVerifier) : public CSignatureBase + { + public: + + /** + * @internalComponent + * + * Create a CVerifier instance from the given MVerifier instance + * @param aVerifier The verifier plugin instance + * @return A pointer to a CVerifier instance + **/ + static CVerifier* NewL(MVerifier* aVerifier, TInt aHandle); + + /** + Destructor + */ + IMPORT_C ~CVerifier(); + + /** + Verify the signature + @param aInput The hash of the message to be verified + @param aSignature The signature of the hash + @param aVerificationResult indicates the success or failure of the verification + */ + IMPORT_C void VerifyL(const TDesC8& aInput, const CCryptoParams& aSignature, TBool& aVerificationResult); + + /** + Unsign the signature + @param aOutput The unsigned hash + @param aSignature The signature of the hash + */ + IMPORT_C void InverseSignL(HBufC8*& aOutput, const CCryptoParams& aSignature); + + private: + /** + Constructor + */ + CVerifier(MVerifier* aVerifier, TInt aHandle); + }; + + /** + Asynchronous verfier API, which wraps a asynchronous verifier plugin implementation + */ + NONSHARABLE_CLASS(CAsyncVerifier) : public CSignatureBase + { + public: + + /** + * @internalComponent + * + * Create a CAsyncVerifier instance from the given MAsyncVerifier instance + * @param aAsyncVerifier The async verifier plugin instance + * @return A pointer to a CAsyncVerifier instance + */ + static CAsyncVerifier* NewL(MAsyncVerifier* aAsyncVerifier, TInt aHandle); + + /** + Destructor + */ + IMPORT_C ~CAsyncVerifier(); + + /** + Verify the signature + @param aInput The hash of the message to be verified + @param aSignature The signature of the hash. + @param aVerificationResult Indicates the success or failure of the verification + @param aRequestStatus the request status. + */ + IMPORT_C void VerifyL(const TDesC8& aInput, const CCryptoParams& aSignature, TBool& aVerificationResult, TRequestStatus& aRequestStatus); + + /** + Unsign the signature + @param aOutput The unsigned hash + @param aSignature The signature of the hash + @param aRequestStatus the request status. + */ + IMPORT_C void InverseSignL(HBufC8*& aOutput, const CCryptoParams& aSignature, TRequestStatus& aRequestStatus); + + /** + Cancel the outstanding request + */ + IMPORT_C void Cancel(); + + private: + /** + Constructor + */ + CAsyncVerifier(MAsyncVerifier* aAsyncVerifier, TInt aHandle); + }; + + + /** + the Factory to create synchronous and asynchronous signer and verifier instance + */ + class CSignatureFactory + { + public: + + /** + Creates a new instance of a synchronous signer. + + @param aSigner A reference to a pointer that should be set to point to the new signer object. + @param aAlgorithmUid The algorithm to use. + @param aKey The signing key. + @param aPaddingMode The padding mode of the signer. + @param aAlgorithmParams Parameters that are specific to a particular algorithm. This is for extendibility and will normally be null. + @return KErrNone if successful; otherwise, a system wide error code. + */ + IMPORT_C static void CreateSignerL(CSigner*& aSigner, + TUid aAlgorithmUid, + const CKey& aKey, + TUid aPaddingMode, + const CCryptoParams* aAlgorithmParams); + + + /** + Creates a new instance of a asynchronous signer. + + @param aAsyncSigner A reference to a pointer that should be set to point to the new signer object. + @param aAlgorithmUid The algorithm to use + @param aKey The signing key. + @param aPaddingMode The padding mode of the signer. + @param aAlgorithmParams Parameters that are specific to a particular algorithm. This is for extendibility and will normally be null. + @return KErrNone if successful; otherwise, a system wide error code. + */ + IMPORT_C static void CreateAsyncSignerL(CAsyncSigner*& aAsyncSigner, + TUid aAlgorithmUid, + const CKey& aKey, + TUid aPaddingMode, + const CCryptoParams* aAlgorithmParams); + + /** + Creates a new instance of a verifier. + + @param aVerifier A reference to a pointer that should be set to point to the new verifier object. + @param aAlgorithmUid The algorithm to use + @param aKey The key to verify the signature with. + @param aPaddingMode The padding mode of the signer. + @param aAlgorithmParams Parameters that are specific to a particular algorithm. This is for extendibility and will normally be null. + @return KErrNone if successful; otherwise, a system wide error code. + */ + IMPORT_C static void CreateVerifierL(CVerifier*& aVerifier, + TUid aAlgorithmUid, + const CKey& aKey, + TUid aPaddingMode, + const CCryptoParams* aAlgorithmParams); + + + /** + Creates a new instance of an asynchronous verifier. + + @param aAsyncVerifier A reference to a pointer that should be set to point to the new verifier object. + @param aAlgorithmUid The algorithm to use + @param aKey The key to verify the signature with. + @param aPaddingMode The padding mode of the signer. + @param aAlgorithmParams Parameters that are specific to a particular algorithm. This is for extendibility and will normally be null. + @return KErrNone if successful; otherwise, a system wide error code. + */ + IMPORT_C static void CreateAsyncVerifierL(CAsyncVerifier*& aAsyncVerifier, + TUid aAlgorithmUid, + const CKey& aKey, + TUid aPaddingMode, + const CCryptoParams* aAlgorithmParams); + + }; + } + +#endif //__CRYPTOAPI_SIGNATUREAPI_H__