cryptoplugins/cryptospiplugins/source/softwarecrypto/shacommon.h
changeset 19 cd501b96611d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptoplugins/cryptospiplugins/source/softwarecrypto/shacommon.h	Fri Nov 06 13:21:00 2009 +0200
@@ -0,0 +1,123 @@
+#ifndef __CRYPTOAPI_SOFTWARESHACOMMON_H_
+#define __CRYPTOAPI_SOFTWARESHACOMMON_H_/*
+* Copyright (c) 2007-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: 
+* sha256impl.h
+* Same as used in SHA1
+* SHA_CH		> CSHA1_F
+* SHA_Maj		> CSHA1_H
+* SHA_Parity	> CSHA1_G
+* The following definitions are equivalent and potentially faster.
+* #define SHA_Ch(x, y, z)      (((x) & ((y) ^ (z))) ^ (z))
+* #define SHA_Maj(x, y, z)     (((x) & ((y) | (z))) | ((y) & (z)))
+* These functions are defined in FIPS 180-2 Section 4.1
+* Equation 4.1, 4.2, 4.3, 4.8, 4.9
+*
+*/
+
+
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+template<typename T>
+inline T SHA_Ch(T aX, T aY, T aZ)
+	{
+	return ((aX & aY) ^ ((~aX) & aZ));
+	}
+
+template<typename T>
+inline T SHA_Maj(T aX, T aY, T aZ)
+	{
+	return ((aX & aY) ^ (aX & aZ) ^ (aY & aZ));
+	}
+
+template<typename T>
+inline T SHA_Parity(T aX, T aY, T aZ)
+	{
+	return (aX ^ aY ^ aZ);
+	}
+
+/**
+ * Define the SHA shift, and rotate right macro 
+ * Defined in FIPS 180-2 Section 3.2
+ */
+/** 
+ * SHA Right Shift operation: The right shift operation SHR^n(x), 
+ * where x is a w-bit word and n is an integer with 0 <= n < w, 
+ * is defined by  SHR^n(x) = x >> n.
+ */
+template<typename T>
+inline T SHA_SHR(T aBits, T aWord)
+	{
+	return (aWord >> aBits);
+	}
+
+/**
+ * SHA Rotate Right Operation: The rotate right (circular right shift) operation
+ * ROTR^n(x), where x is a w-bit word and n is an integer with 0 <= n < w, 
+ * is defined by ROTR n(x)=(x >> n) || (x << w - n).
+ */
+template<typename T>
+inline T SHA_ROTR(T aBits, T aWord)
+	{
+	TInt totalBits = sizeof(T) << 3;
+	return ((aWord >> aBits) | (aWord << (totalBits-aBits)));
+	}
+
+namespace SoftwareCrypto
+{
+
+NONSHARABLE_CLASS(MSHA2Impl)
+	{
+public:
+	/**
+	 * This function will reset the state of hash.
+	 */
+	virtual void Reset(const TAny*) = 0;
+	/**
+	 * This function will finalize the hash and return
+	 * the calculated hash.
+	 * @return Final hash
+	 */ 
+	virtual const TDesC8& Final() = 0;
+	/**
+	 * This function will add the message to the internal
+	 * buffer and if the block size is reached then calcualte
+	 * the hash till that point.
+	 * @param aMessage Message to be updated.
+	 * @param aLength Length of the message to be updated.
+	 */ 
+	virtual void Update(const TUint8* aMessage, TUint aLength) = 0;
+	/**
+	 * This function will save the internal state of the hash.
+	 */ 
+	virtual void StoreState() = 0;
+	/**
+	 * This function will retrieve the saved the internal state 
+	 * of the hash.
+	 */ 
+	virtual void RestoreState() = 0;
+	/**
+	 * virtual distructor.
+	 */
+	virtual ~MSHA2Impl(){}
+	};
+	
+}//namespace SoftwareCrypto
+
+#endif //__CRYPTOAPI_SOFTWARESHACOMMON_H_