--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/linklayerprotocols/pppnif/SPPP/chapmd5.cpp Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,121 @@
+// 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:
+// Authentication Protocol with MD5 (CHAP with MD5) - RFC 1994.
+//
+//
+
+/**
+ @file
+ @brief Source file for the implementation of PPP Challenge Handshake
+ @internalComponent
+*/
+
+#include "chapmd5.h"
+// use CMD5
+#include <hash.h>
+#include "PPPConfig.h"
+
+CPppChapMd5::CPppChapMd5()
+/**
+ Constructor.
+ @internalComponent
+*/
+ {
+ }
+
+CPppChapMd5::~CPppChapMd5()
+/**
+ Destructor.
+ @internalComponent
+*/
+ {
+#ifdef _UNICODE
+ delete iUserName;
+#endif
+
+ delete iMd5;
+ }
+
+
+void CPppChapMd5::InitL(CPppLcp* aLcp)
+/**
+ @copydoc CPppChap::InitL(CPppLcp*)
+ @see CPppChap::InitL(CPppLcp*)
+ @internalComponent
+*/
+ {
+ CPppChap::InitL(aLcp);
+ iMd5 = CMD5::NewL();
+ }
+
+
+void CPppChapMd5::MakeResponseL(TUint8 /*aChallengeId*/,
+ const TDesC8& aChallengeValue,
+ TPtrC8& aResponseValue,
+ TPtrC8& aResponseName)
+/**
+ @copydoc CPppChap::MakeResponseL(TUint8, const TDesC8&, TPtrC8&,
+ TPtrC8&)
+ @see CPppChap::MakeResponseL(TUint8, const TDesC8&, TPtrC8&,
+ TPtrC8&)
+ @internalComponent
+*/
+ {
+ ASSERT(aChallengeValue.Length() >= KPppChapMinValueSize);
+
+ const CCredentialsConfig* credentials = iPppLcp->GetCredentials();
+ const TDesC& username = credentials->GetUserName();
+
+ __ASSERT_ALWAYS(username.Length() <=
+ KMaxTInt16 -
+ KPppChapCodeFieldSize -
+ KPppChapIdFieldSize -
+ KPppChapLengthFieldSize -
+ KPppChapValueSizeFieldSize -
+ aResponseValue.Length(),
+ User::Leave(KErrTooBig));
+
+#ifdef _UNICODE
+ delete iUserName;
+ iUserName=0;
+ iUserName = HBufC8::NewL(username.Length());
+ iUserName->Des().Copy(username);
+ aResponseName.Set(*iUserName);
+
+ const TDesC& pwd=credentials->GetPassword();
+ HBufC8& password = *HBufC8::NewLC(pwd.Length());
+ password.Des().Copy(pwd);
+#else //! _UNICODE
+ aResponseName.Set(username);
+ const TDesC& password = credentials->GetPassword();
+#endif //! _UNICODE
+
+ iMd5->Update(TPtrC8(&iCurrentId, KPppChapIdFieldSize));
+ iMd5->Update(password);
+ aResponseValue.Set(iMd5->Final(aChallengeValue));
+
+#ifdef _UNICODE
+ CleanupStack::PopAndDestroy(&password);
+#endif // _UNICODE
+
+ ASSERT(aResponseValue.Length() == KPppChapMd5ValueSize);
+ ASSERT(aResponseName.Length() >= KPppChapMinNameSize &&
+ aResponseName.Length() <=
+ KMaxTInt16 -
+ KPppChapCodeFieldSize -
+ KPppChapIdFieldSize -
+ KPppChapLengthFieldSize -
+ KPppChapValueSizeFieldSize -
+ aResponseValue.Length());
+ }