diff -r 000000000000 -r af10295192d8 linklayerprotocols/pppnif/SPPP/chapmd5.cpp --- /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 +#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()); + }