networksecurity/tls/inc/SSLCONST.H
changeset 0 af10295192d8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networksecurity/tls/inc/SSLCONST.H	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,372 @@
+// Copyright (c) 1997-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:
+// SSL DLL entry code 
+// 
+//
+
+#if !defined(__SSLCONST_H__)
+#define __SSLCONST_H__
+
+#define __USE_TLSV1__
+#include <e32std.h>
+#include <e32base.h>
+
+const TInt KSSLActiveHighPriority=10;
+const TInt KSSLActiveMedPriority=0;
+const TInt KSSLActiveLowPriority=-10;
+
+// this constants are arbitrary and define high limits for the length of some tmp descriptors
+const TUint KHSMessMax=0x100000; //TODO isnt it too big or too small?
+const TInt KMaxBlkSize=32; 
+const TInt KMaxMac=32; //
+const TInt KMaxPad=8; //
+const TInt KOutRecBufLen=1024;
+const TUint KCiphTextLengLimit=0x8000; //TODO ssl defines 
+// this value as 2^14+2048 but it seems that some servers exeed this limit 
+// so I put greater value. Need to check this. (Artem)
+
+// $$VR 21/09/2001
+const TUint	KHSversionOffset=4;
+const TUint	KHSrandomOffset=6;
+const TUint KHSrandomLength=32;
+const TUint KHSsessionLenOffset=38;
+const TUint KHSciperOffset=39;
+
+// CT 18/10/00 
+// Maximum size of buffers used to hold keys during exchange. 512 will allow a 4096bit key.
+const TInt KMaxKeyBufferSize=512;
+
+//error const
+const TInt KErrRecProt=1;
+//const KErr
+
+/** States for the record protocol parser. 
+* @since v6.0 */
+enum TRecordProtocol
+	{
+	/** Changing ciphers. */
+	EChangeCipherSpec=20,
+	/** Alerting. */
+	EAlert=21,
+	/** Handshake. */
+  	EHandshake=22,
+	/** Application data. */
+  	EApplicationData=23
+  	};
+
+const TUint8 KCHCiphSpecByte=1;
+
+/** Hanshake protocol state.
+* @since v6.0 */
+enum THandshakeProtocol
+	{
+	/** Hello request. */
+	EHelloRequest,
+	/** Client hello. */
+	EClientHello,
+	/** Server hello. */
+	EServerHello,
+	/** Certificate. */
+	ECert,
+	/** Certificate request. */
+	ECertRequest,
+	/** Certificate verify. */
+	ECertVerify,
+	/** Server hello done. */
+	EServerHelloDone,
+	/** Server key exchange. */
+	EServKeyExchange,
+	/** Client key exchange. */
+	ECliKeyExchange,
+	/** Finished. */
+	EFinished
+	};
+
+class THandshakeProtocolTag
+/** @since v6.0 */
+	{
+public:
+	THandshakeProtocol iHSMess;
+	TUint8 iValue;
+	};
+
+/** @since v6.0 */
+const THandshakeProtocolTag THSMessTypes[10] =
+	{
+		{EHelloRequest,0},
+		{EClientHello,1},
+		{EServerHello,2},
+		{ECert,11},
+		{EServKeyExchange,12},
+		{ECertRequest,13},
+		{EServerHelloDone,14},
+		{ECertVerify,15},
+		{ECliKeyExchange,16},
+		{EFinished,20}
+	};
+
+/** Handshake message item. */
+enum THSMessItemType 
+	{
+	/** Version. */
+	EVersion,
+	/** Random. */
+	ERandom,
+	/** Session ID. */
+	ESessionID,
+	/** Cipher suite. */
+	ECipherSuite,
+	/** Compression method. */
+	ECompressionMethod,
+	/** Parameter. */
+	EParameter,
+	/** Signature. */
+	ESignature,
+	/** Raw data. */
+	ERawData,
+	/** ASN1 certificate. */
+	EASN1Cert,
+	/** Select. */
+	ESelect,
+	/** End. */
+	EEnd
+	};
+
+/** Handshake message item quantity. */
+enum THSMessItemQuantity 
+	{
+	/** Single item. */
+	ESingle, 
+	/** Item list. */
+	EList
+	};
+	
+/** Handshake vector length. */
+enum THSVectorLengthType 
+	{
+	/** Length fixed. */
+	EFixed,
+	/** Length variable. */
+	EVariable
+	};
+	
+class THSMessItem
+	{
+public:
+	THSMessItemType iItemType;
+	TInt iValue;
+	THSVectorLengthType iLenType;
+	THSMessItemQuantity iQuantity;
+	};
+
+/** Protocol alerts. */
+enum TAlertProtocol
+	{
+	/** Close notification. */
+	ECloseNotify,
+	/** Unexpected message. */
+	EUnexpectedMes,
+	/** Bad MAC received. */
+	EBadRecordMac,
+	/** Decompression failure. */
+	EDecompressionFailure,
+	/** Handshake failure. */
+	EHandshakeFailure,
+	/** No certificate. */
+	ENoCertificate,
+	/** Bad certificate. */
+	EBadCertificate,
+	/** Unsupported certificate. */
+	EUnsupportedCertificate,
+	/** Certificate is revoked. */
+	ETLSCertificateRevoked,
+	/** Certificate is expired. */
+	ECertificateExpired,
+	/** Certificate unknown. */
+	ECertificateUnknown,
+	/** Illegal parameter. */
+	EIllegalParameter
+	};
+
+/** SSL Alert levels */
+enum TAlertLevel
+	{
+	/** Warning. */
+	EWarning=1,
+	/** Fatal. */
+	EFatal=2
+	};
+
+
+class TAlertLevelTag
+/** @since v6.0 */
+{
+public:
+	TAlertProtocol iAlert;
+	TUint8 iValue;
+	TAlertLevel iLevel;
+};
+
+/** @since v6.0 */
+const TAlertLevelTag Alerts[12]=
+{
+	{ECloseNotify,0,EWarning},
+	{EUnexpectedMes,10,EFatal},
+	{EBadRecordMac,20,EFatal},
+	{EDecompressionFailure,30,EFatal},
+	{EHandshakeFailure,40,EFatal},
+	{ENoCertificate,41,EWarning},
+	{EBadCertificate,42,EWarning},
+	{EUnsupportedCertificate,43,EWarning},
+	{ETLSCertificateRevoked,44,EWarning},
+	{ECertificateExpired,45,EWarning},
+	{ECertificateUnknown,46,EWarning},
+	{EIllegalParameter,47,EFatal}
+};
+
+class TTLSVersion
+/** @since v6.0 */
+	{
+public:
+	TUint8 iMajor;
+	TUint8 iMinor;
+	};
+
+const TTLSVersion SSLv3Version= {3,0};
+const TTLSVersion TLSv1Version= {3,1};
+//const TTLSVersion DefaultVersion= TLSv1Version;
+
+//#define RSA_PKCS1_PADDING	11
+//#define RSA_SSLV23_PADDING	12
+
+// Client/Server Hello frame constants,
+const TUint KServerHelloMajorOffset = 0;
+const TUint KServerHelloMinorOffset = 1;
+const TUint KHelloRandomLength = 32;
+//const TUint KServerHelloRandomOffset = 2;
+//const TUint KServerHelloSessionIDLengthOffset = 34;
+//const TUint KServerHelloSessionIDOffset = 35;
+//const TUint KServerHelloCipherSuiteLengthOffset = 35;
+
+// Server cert frame constants
+const TInt KServerCertOffset= 0x00;  
+
+//Look RFC 2104 for explanation of ipad & opad
+const TUint8 KIpad=0x36;
+const TUint8 KOpad=0x5C;
+//pg Note
+//These following definitions used to be part of the previous crypto lib 
+/** Symmetric cipher types 
+*
+* @since v6.0 */
+enum TSymmetricCipherType
+	{
+	/** default cipher. */
+	EDefaultCipher,
+	/** null cipher. */
+	ENullCipher,
+	/** DES in ecb mode, iv=0, block=8, key= 8. */
+	EDes_ecb,
+	/** DES in ecb ede mode, iv=0, block=8, key=16. */
+	EDes_ede,
+	/** DES in ecb ede mode, iv=0, block=8, key=24. */
+	EDes_ede3,
+	/** DES in cfb mode, iv=8, block=1, key= 8. */
+	EDes_cfb,
+	/** DES in ede cfb mode, iv=8, block=1, key=16. */
+	EDes_ede_cfb,
+	/** DES in ede cfb mode, iv=8, block=1, key=24. */
+	EDes_ede3_cfb,
+	/** DES in ofb mode, iv=8, block=1, key= 8. */
+	EDes_ofb,
+	/** DES in ede ofb mode, iv=8, block=1, key=16. */
+	EDes_ede_ofb,
+	/** DES in ede ofb mode, iv=8, block=1, key=24. */
+	EDes_ede3_ofb,
+	/** DES in cbc mode, iv=8, block=8, key= 8. */
+	EDes_cbc,
+	/** DES in cbc ede mode, iv=8, block=8, key=16. */
+	EDes_ede_cbc,
+	/** DES in cbc ede mode, iv=8, block=8, key=24. */
+	EDes_ede3_cbc,
+	/** DES in desx cbc mode,iv=8, block=8, key=24 */
+	EDesx_cbc,
+	/** ARC4, iv=0, block=1, key=16. */
+	ERc4,
+	/** RC5 in ecb mode. */
+	ERc5_ecb,          // RC5, 
+	/** RC5 in cbc mode. */
+	ERc5_cbc,
+	/** RC5 in cfb mode. */
+	ERc5_cfb,
+	/** RC5 in ofb mode. */
+	ERc5_ofb,
+	/** IDEA in ecb mode, iv=0, block=8, key=16. */
+	EIdea_ecb,
+	/** IDEA in cfb mode, iv=8, block=1, key=16. */
+	EIdea_cfb,
+	/** IDEA in ofb mode, iv=8, block=1, key=16. */
+	EIdea_ofb,
+	/** IDEA in cbc mode, iv=8, block=8, key=16. */
+	EIdea_cbc,
+	/** RC2 in ecb mode. */
+	ERc2_ecb,
+	/** RC2 in cbc mode. */
+	ERc2_cbc
+//	ERc2_cfb,
+//	ERc2_ofb
+	};
+
+/** Message digest types. */
+enum TMessageDigestType
+	{
+	/** Default. */
+	EDefaultDigest,
+	/** None. */
+	EMdNull,
+	/** RSA sign/verify. */
+	EMd5,
+	/** RSA sign/verify. */
+	ESha,
+	/** RSA sign/verify. */
+	ESha1,
+	/** DSA sign/verify. */
+	EDss,
+	/** DSA sign/verify. */
+	EDss1,
+	/** MAC sign/verify. */
+	EHMac
+	};
+
+/** Public key algorithm. */
+enum TPublicKeyAlg 
+	{
+	/** RSA encryption. */
+	ERsa,
+	/** DH encryption. */
+	EDh,
+	/** DSA encryption. */
+	EDsa
+	};
+
+class TAlgorithmInfo
+	{
+public:
+	TInt iType;//TODO enum
+	TInt iSize;
+	};
+
+
+#endif
+