PECengine/StorageManager2/Tools/PEngHashTool.cpp
branchRCL_3
changeset 17 a941bc465d9f
parent 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PECengine/StorageManager2/Tools/PEngHashTool.cpp	Wed Sep 01 12:31:13 2010 +0100
@@ -0,0 +1,107 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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:  Hashing tool
+*
+*/
+
+
+// INCLUDE FILES
+#include "PEngHashTool.h"
+// #include <e32std.h>
+#include <hash.h>
+#include <imcvcodc.h>
+#include "PEngStorageGlobals.h"
+
+
+// -----------------------------------------------------------------------------
+// PEngHashTool::HashDescriptorL()
+// -----------------------------------------------------------------------------
+//
+HBufC* PEngHashTool::HashDescriptorL(
+    const TDesC& aDesToHash )
+    {
+    HBufC8* temHashBuf = HBufC8::NewLC( aDesToHash.Length() + KMinimalHashSize );
+    temHashBuf->Des().Copy( aDesToHash );
+    temHashBuf->Des().LowerCase();
+    CSHA1* sHA1 = CSHA1::NewL();
+    CleanupStack::PushL( sHA1 );
+    sHA1->Reset();
+
+    TPtrC8 hash ( sHA1->Hash( *temHashBuf ) );
+
+    TImCodecB64 b64;
+    b64.Initialise();
+
+    TPtr8 encodeBuffer( temHashBuf->Des() );
+    encodeBuffer.Zero();
+    b64.Encode( hash, encodeBuffer );
+
+    HBufC* hashedId = HBufC::NewL( encodeBuffer.Length() );
+    TPtr tmp( hashedId->Des() );
+    tmp.Copy( encodeBuffer );
+    CleanupStack::PopAndDestroy( 2 ); // sHA1, temHashBuf
+
+
+    ReplaceCharacterInDescriptor( tmp, '/', '_' );
+    ReplaceCharacterInDescriptor( tmp, ':', '_' );
+    ReplaceCharacterInDescriptor( tmp, '@', '_' );
+    return hashedId;
+    }
+
+
+// -----------------------------------------------------------------------------
+// PEngHashTool::HashSubfolderL()
+// -----------------------------------------------------------------------------
+//
+HBufC* PEngHashTool::HashStateNameL(
+    const TDesC& aServerAddress,
+    const TDesC& aUserName )
+    {
+    HBufC* address = HBufC::NewLC( aServerAddress.Length() + aUserName.Length() );
+    address->Des().Append( aServerAddress );
+    address->Des().Append( aUserName );
+    address->Des().LowerCase();
+    HBufC* folder = HashDescriptorL( *address );
+    CleanupStack::PopAndDestroy();//address
+    CleanupStack::PushL( folder );
+    // KPEngStorageStateSuffix if client wants to attach some
+    folder = folder->ReAllocL( folder->Length() +
+                               KPEngStorageStateSuffix().Length() );
+    CleanupStack::Pop(); // folder
+    folder->Des().Append( KPEngStorageStateSuffix );
+    return folder;
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// PEngHashTool::ReplaceCharacterInDescriptor()
+// Replace characters in descriptor with defined
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void PEngHashTool::ReplaceCharacterInDescriptor(
+    TPtr& aDescriptor,
+    const TText aConvertFrom,
+    const TText aConvertTo  )
+    {
+    TInt offset;
+    while ( ( offset = aDescriptor.Locate( aConvertFrom ) ) != KErrNotFound )
+        {
+        aDescriptor[ offset ] = aConvertTo;
+        }
+    }
+
+
+//  End of File