--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vpnengine/ikev1lib/inc/ikev1crypto.h Thu Dec 17 09:14:51 2009 +0200
@@ -0,0 +1,90 @@
+/*
+* Copyright (c) 2003-2009 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:
+* Cryptographic Intermediate Layer to use and change any crypto library easily.
+*
+*/
+
+#ifndef IKEV1CRYPTO_H
+#define IKEV1CRYPTO_H
+
+#include <e32base.h>
+#include "ikev1isakmpct.h"
+
+
+class CUtlDiffieHellman;
+
+NONSHARABLE_CLASS(CIkeKeys) : public CBase
+{
+public:
+ static CIkeKeys* NewL(const TDesC8& aN,const TDesC8& aG);
+ HBufC8 *GetPubKey();
+ void XValueL();
+ const HBufC8* KValueL(const TDesC8& aY) const;
+ inline TInt ModulusLength() {return iModuluslength;}
+
+ ~CIkeKeys();
+private:
+ CUtlDiffieHellman* iDHKey;
+ const HBufC8* iPubKey;
+ TInt iModuluslength;
+};
+
+
+// SSL function implementation using Symbian apis
+// - des_ede3_cbc_encrypt
+#define DES_ENCRYPT 1
+#define DES_DECRYPT 0
+
+#define HMAC_MD5_SIZE 128
+#define HMAC_SHA1_SIZE 160
+
+#define DESCBC_KEY_LEN 8
+#define DESCBC_IV_LEN 8
+
+#define AESCBC_DEF_KEY_LEN 16
+#define AESCBC_IV_LEN 16
+
+#define DEFAULT_NONCE_SIZE 128/8 //128 bits = 16 bytes
+
+#define PAD_SIZE 64 + 2 * DEFAULT_NONCE_SIZE + 1000
+
+//DH functions
+CIkeKeys* GeneratePubPrivKeysL(TUint aGroupDesc);
+HBufC8* ComputeAgreedKeyL(TUint aGroupDesc, const TDesC8 &aPeerPublicKey, CIkeKeys *aOwnKeys);
+
+//
+//Symmetric encryption/decryption functions
+//
+void DecryptL(const TUint8* aInputPayload, TUint8* aOutputPayload, TUint32 aLength, TDes8 &aIV, TDesC8& aKey, TUint16 aEncrAlg);
+TBool EncryptL(TDes8& aInputPayload, TDes8& aOutputPayload,TDes8 &aIV, TDesC8& aKey , TUint16 aEncrAlg);
+void Cipher3DesL(TUint8 *aInData, TInt aInDataLen, const TDesC8 &aPrfKey, TDes8 &aIV, TDes8 &aPrfOutput);
+
+//
+//Message Digest Algorithms
+//
+void MD5HashL(const TDesC8 &aInData, TDes8& aOutData);
+void SHA1HashL(const TDesC8 &aInData, TDes8& aOutData);
+
+void MD5HmacL(const TDesC8 &aInData, TDes8& aOutData, const TDesC8& aKeyData);
+void SHA1HmacL(const TDesC8 &aInData, TDes8& aOutData, const TDesC8& aKeyData);
+
+//The length of aInData must be less than PAD_SIZE. The caller of this function
+//has to take care of handling the size of this parameter.
+void Hmac3DesCbcL(const TDesC8 &aInData, TDes8& aOutData, const TDesC8& aKeyData);
+
+TInt SymmetricCipherL(TUint8 *aInput, TUint8 *aOutput, TInt aLength,
+ TUint8 *aKey, TUint8 *aIV, TBool aEncr, TInt aEncAlg = DES_CBC);
+
+#endif