diff -r 000000000000 -r ba25891c3a9e installationservices/swi/source/securitymanager/signatureverifier.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/installationservices/swi/source/securitymanager/signatureverifier.h Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,127 @@ +/* +* Copyright (c) 2004-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: +* signatureverfier.h +* +*/ + + +/** + @file + @released + @internalTechnology +*/ + +#ifndef __SIGNATUREVERFIER_H__ +#define __SIGNATUREVERFIER_H__ + +#include +#include + +class CMessageDigest; +class CASN1EncSequence; + +namespace Swi +{ + + /** + * This Security Manager helper class takes care of verifying signatures. + */ + class CSignatureVerifier : public CBase + { + public : + + /** + * Creates a new signature verifier + * + * @return A new signature verifier + */ + static CSignatureVerifier* NewL(); + + /** + * Creates a new signature verifier and leaves it on the cleanup stack + * + * @return A new signature verifier + */ + static CSignatureVerifier* NewLC(); + + ~CSignatureVerifier(); + + public : // Business methods + + /** + * This is the main service provided by this class, it verifies a signature. + * + * @param aSchemeOid The OID of the signature scheme used + * @param aPublicKey The public key used to verity the signature + * @param aControllerData The signed data + * @param aSignatureData The actual signature data + * + * @return ETrue if the signature can be verified, EFalse otherwise + */ + TBool VerifySignatureL(const TDesC& aSchemeOid, + const CSubjectPublicKeyInfo& aPublicKey, + const TPtrC8& aControllerData, + const TDesC8& aSignatureData); + + + protected : // Helpers + + /** + * An internal method which given a signature OID converts it + * to its corresponding internal TAlgorithmId code + * + * @param aSchemeOid The OID we wish to convert + * + * @return The TAlgorithmId identifier corresponding to the given OID + */ + TAlgorithmId OidToIdL(const TDesC& aSchemeOid); + + /** + * Helper method which builds an ASN.1 Digest info structure for + * RSA signatures. RSA signatures work on digest info structure rather + * than on raw digest as DSA does. After the method call the ASN.1 Sequence + * returned is left on the cleanup stack. + * + * @param aDigest The actual message digest + * @param aPublicKey The RSA public key + * @param aDigestId The digest identifier + * + * @return An ASN.1 structure containing the digest info needed to either + * verify or sign some data + */ + CASN1EncSequence* DigestInfoLC(const TDesC8& aDigest, const CRSAPublicKey& aPublicKey, + TAlgorithmId aDigestId); + + /** + * This internal method creates an appropriate CMessageDigest given a certain + * digest OID + * + * @param aSchemeOid The OID of the digest scheme we are interested in + * + * @return An instance of CMessageDigest corresponding to the given OID + */ + CMessageDigest* CreateDigestL(const TDesC& aSchemeOid); + + + private : // Life cycle methods + CSignatureVerifier(); + void ConstructL(); + + private : + }; + +} // namespace Swi + +#endif // __SIGNATUREVERFIER_H__