installationservices/swi/source/securitymanager/signatureverifier.h
changeset 0 ba25891c3a9e
--- /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 <e32base.h>
+#include <signed.h>
+
+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__