--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vpnengine/vpnipsecpolparser/inc/spcrypto.h Thu Dec 17 09:14:51 2009 +0200
@@ -0,0 +1,117 @@
+/*
+* Copyright (c) 2002-2005 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: Security parser crypto manager.
+*
+*/
+
+
+
+#ifndef __SPCRYPTO_H
+#define __SPCRYPTO_H
+
+#include <e32base.h>
+#include <es_prot.h>
+
+const TUint KProtocolCrypto = 0x104; // A dummy assignment for now (should have
+// central registry)
+const TUint KAfCrypto = 0x0803; // Dummy
+
+//
+// TAlgorithmDesc (and related types)
+//
+// A description of available algorithm
+//
+typedef TBuf8<0x20> TAlgorithmName;
+typedef enum
+ {
+ EAlgorithmClass_Digest, // Message Digest algorithm
+ EAlgorithmClass_Cipher, // Symmetric Cipher algorithm
+ //
+ // New types are possible by adding the symbol here
+ // and defining the corresponding abstract class
+ // (similar to COwnMessageDigest and CSymmetricCipher)
+ //
+ } TAlgorithmClass;
+
+class TAlgorithmDesc
+ {
+ public:
+ TAlgorithmName iName; // Descriptive name
+ TAlgorithmClass iAlgType;
+ TUint iMinBits; // Min Length of the key in bits (all keys total)
+ TUint iMaxBits; // Max Length of the key in bits (all keys total)
+ TUint iBlock; // Length of the block in bytes
+ TUint iVector; // Initialization Vector length (bytes)
+ };
+
+
+//
+// Each of the following includes virtual destructor
+// just in case there is a need for a cleanup code
+// when the object is deleted using a pointer to
+// the base virtual class
+
+//
+// COwnMessageDigest
+// Base Message Digest (abstract) class
+//
+class COwnMessageDigest : public CBase
+ {
+ public:
+ virtual void Init()=0;
+ virtual void Update(const TDesC8& aMessage)=0;
+ virtual void Final(TDes8& aDigest)=0;
+ virtual ~COwnMessageDigest() {}
+ };
+
+
+//
+// CSymmetricCipher
+// Base Symmetric Cipher (abstract) class
+//
+class CSymmetricCipher : public CBase
+ {
+ public:
+ enum TAction { EEncrypt, EDecrypt };
+ virtual void Setkey(const TDesC8& aKey)=0;
+ virtual void InitL(const TDesC8 &anIV, TAction aMode)=0;
+ //
+ // ALL OutBuf's given to Update must exist up to Finish
+ // call (or at least as long as at least blocksize octets
+ // have been given to Update after it).
+ //
+ virtual void Update(TDes8& anOutBuf,const TDesC8& anInBuf)=0;
+ //
+ // Calling Finish is optional, it is needed if the total
+ // bytes is not multiple of the blocksize, or if one wants
+ // to get the final IV.
+ virtual void Finish(TDes8& anIV)=0;
+ virtual ~CSymmetricCipher() {}
+ };
+
+//
+// CProtocolCrypto
+// The algorithm manager (abstract) class
+//
+class CProtocolCrypto : public CProtocolBase
+ {
+ public:
+ virtual TUint AlgorithmList(TAlgorithmDesc *&aList) = 0;
+ virtual CSymmetricCipher* SymmetricCipher(TUint anAlg)=0;
+ virtual COwnMessageDigest* MessageDigest(TUint anAlg)=0;
+ protected:
+ virtual ~CProtocolCrypto() {}
+ };
+
+#endif