/*
* Copyright (c) 2004-2010 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: 
* Static class containing Security Manager's utility functions
*
*/


/**
 @file
 @released
 @internalTechnology
*/

#ifndef __SECUTILS_H__
#define __SECUTILS_H__

#include <e32std.h>
#include <f32file.h>
#include <e32uid.h>
#include "swi/swiutils.h"

namespace Swi
{
/**
 * Static class containing Security Manager's utility functions
 * @released
 * @internalTechnology
 */
class SecUtils
	{
public:
	/**
	 * Checks if the file is an EXE
	 * @param aFileName Name of the file to check
	 * @return          True if it is an EXE, false otherwise
	 */
	IMPORT_C static TBool IsExeL(const TDesC& aFileName);
	
	/**
	 * Checks if the file is an DLL
	 * @param aFileName Name of the file to check
	 * @return          True if it is an DLL, false otherwise
	 */
	IMPORT_C static TBool IsDllL(const TDesC& aFileName);
	
	/**
	 * Checks if the file is an EXE
	 * @param aEntry Dir entry of the file to check
	 * @return       True if it is an EXE, false otherwise
	 */
	static TBool IsExe(const TEntry& aEntry);
	
	/**
	 * Checks if the file is an DLL
	 * @param aEntry Dir entry of the file to check
	 * @return       True if it is an DLL, false otherwise
	 */
	static TBool IsDll(const TEntry& aEntry);
	
	/**
	 * Retrieves file entry information
	 * @param aFileName Name of the file to get entry for
	 * @param aEntry    Filled with file information
	 */
	static void EntryL(const TFileName& aFileName, TEntry& aEntry);
	
	/**
	 * Returns buffer containing hex representation of a hash of the provided
	 * descriptor.  Intended for use where a "unique" name is needed where the
	 * actual name may be too long.
	 *
	 * @param aName Descriptor containing data to hash
	 * @return      Pointer to allocated buffer, which will be owned by the
	 *              caller.
	 */	
	IMPORT_C static HBufC* HexHashL(const TDesC& aName);
	   
    /**
     * Appends a Uid to the buffer and publishes the same.
     * @param aBuf The buffer containing the list of Uids that is published.
     * @param aUid The UID of the package which has been processed.
     */
    IMPORT_C static TInt PublishPackageUid(TUid aUid, TUid (&aUidList)[KMaxUidCount]);
    
    /**
     * Checks if the given Uid is present in the buffer that contains the list of Uids published.
     * @param aBuf The buffer containing the list of Uids that is published.
     * @param aUid The UID of the package which to be verified.
     */
    IMPORT_C static TBool IsPackageUidPresent(TUid aUid, const TUid (&aUidList)[KMaxUidCount]);
	};

inline TBool SecUtils::IsExe(const TEntry& aEntry)
	{
	return (aEntry[0].iUid == KExecutableImageUidValue) ? ETrue : EFalse;
	}

inline TBool SecUtils::IsDll(const TEntry& aEntry)
	{
	return (aEntry[0].iUid == KDynamicLibraryUidValue) ? ETrue : EFalse;
	}
} // namespace Swi

#endif
