diff -r 000000000000 -r af10295192d8 networksecurity/tls/protocol/tlshandshakeitem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networksecurity/tls/protocol/tlshandshakeitem.cpp Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,213 @@ +// 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: +// SSL3.0 and TLS1.0 Handshake message items source file. +// This file contains definitions for SSL3.0 and TLS1.0 handshake items +// (i.e., handshake protocol types, headers, message structures, etc). +// +// + +/** + @file +*/ + +#include "tlshandshakeitem.h" +#include +#include +#include + +void CServerKeyExchMsg::ComputeDigest( CMessageDigest* pDigest, const TDesC8& aClientRandom, const TDesC8& aServerRandom, TPtrC8& aDigestParams, TDes8& aDigest ) const +{ + pDigest->Update(aClientRandom); + pDigest->Update(aServerRandom); + aDigest.Copy( pDigest->Final(aDigestParams) ); +} + +void CServerKeyExchMsg::ComputeDSADigestL( const TDesC8& aClientRandom, const TDesC8& aServerRandom, TPtrC8& aDigestParams, TDes8& aDigest ) const +{ + CMessageDigest* pDigest = CSHA1::NewL(); + ComputeDigest( pDigest, aClientRandom, aServerRandom, aDigestParams, aDigest ); + delete pDigest; +} + +void CServerKeyExchMsg::ComputeRSADigestL( const TDesC8& aClientRandom, const TDesC8& aServerRandom, TPtrC8& aDigestParams, TDes8& aDigest ) const +{ + CMessageDigest* pDigest = CMD5::NewL(); + ComputeDigest( pDigest, aClientRandom, aServerRandom, aDigestParams, aDigest ); + delete pDigest; + //append DSA digest (SHA1 hash) + TInt nMax = aDigest.MaxLength() - aDigest.Length(); + TPtr8 digest( const_cast(aDigest.Ptr()) + aDigest.Length(), 0, nMax ); + ComputeDSADigestL( aClientRandom, aServerRandom, aDigestParams, digest ); + aDigest.SetLength( digest.Length() + aDigest.Length() ); +} + +//RSA key exchange +void CRsaAnonServerKeyExchMsg::CopyParamsL( CTlsCryptoAttributes *aAttrs ) +{ + iRsaParams.iRsaModulus.CopyBodyToL( aAttrs->iPublicKeyParams->iValue1); + iRsaParams.iRsaExponent.CopyBodyToL( aAttrs->iPublicKeyParams->iValue2); +} + +TPtr8 CRsaDsaServerKeyExchMsg::Signature() +{ + return iDsaSignature.iSha.GetBodyDes(); +} + +void CRsaDsaServerKeyExchMsg::ComputeDigestL( const TDesC8& aClientRandom, const TDesC8& aServerRandom, TDes8& aDigest ) +{ + TPtrC8 ptrParams( GetDigestParamsPtr(), GetDigestParamsLength() ); + ComputeDSADigestL( aClientRandom, aServerRandom, ptrParams, aDigest ); +} + +TPtr8 CRsaRsaServerKeyExchMsg::Signature() +{ + return iRsaSignature.iMd5Sha.GetBodyDes(); +} + +void CRsaRsaServerKeyExchMsg::ComputeDigestL( const TDesC8& aClientRandom, const TDesC8& aServerRandom, TDes8& aDigest ) +{ + TPtrC8 ptrParams( GetDigestParamsPtr(), GetDigestParamsLength() ); + ComputeRSADigestL( aClientRandom, aServerRandom, ptrParams, aDigest ); +} + +//DH key exchange +void CDhAnonServerKeyExchMsg::CopyParamsL( CTlsCryptoAttributes *aAttrs ) +{ + iDhParams.iDh_p.CopyBodyToL( aAttrs->iPublicKeyParams->iValue1); + iDhParams.iDh_g.CopyBodyToL( aAttrs->iPublicKeyParams->iValue2); + iDhParams.iDh_Ys.CopyBodyToL( aAttrs->iPublicKeyParams->iValue3); +} + +TPtr8 CDhDsaServerKeyExchMsg::Signature() +{ + return iDsaSignature.iSha.GetBodyDes(); +} + +void CDhDsaServerKeyExchMsg::ComputeDigestL( const TDesC8& aClientRandom, const TDesC8& aServerRandom, TDes8& aDigest ) +{ + TPtrC8 ptrParams( GetDigestParamsPtr(), GetDigestParamsLength() ); + ComputeDSADigestL( aClientRandom, aServerRandom, ptrParams, aDigest ); +} + +TPtr8 CDhRsaServerKeyExchMsg::Signature() +{ + return iRsaSignature.iMd5Sha.GetBodyDes(); +} + +void CDhRsaServerKeyExchMsg::ComputeDigestL( const TDesC8& aClientRandom, const TDesC8& aServerRandom, TDes8& aDigest ) +{ + TPtrC8 ptrParams( GetDigestParamsPtr(), GetDigestParamsLength() ); + ComputeRSADigestL( aClientRandom, aServerRandom, ptrParams, aDigest ); +} + +//PSK key exchange +void CPskServerKeyExchMsg::CopyParamsL( CTlsCryptoAttributes *aAttrs ) +{ + iPskServerParams.iPskIdentityHint.CopyBodyToL( aAttrs->iPskIdentityHint ); +} + +TPtr8 CPskServerKeyExchMsg::Signature() +{ + // Not used + return TPtr8(0,0); +} + +void CPskServerKeyExchMsg::ComputeDigestL( const TDesC8& /*aClientRandom*/, const TDesC8& /*aServerRandom*/, TDes8& /*aDigest */) +{ + // Not used +} + +void CRsaCertificateVerifyMsg::SetSignature( TDesC8& aSign ) +{ + iRsaSignature.iMd5Sha.SetBody( aSign ); +} + +void CRsaCertificateVerifyMsg::SetSignatureLength( TDesC8& aSign ) +{ + iRsaSignature.iMd5Sha.Header().SetInitialValue( aSign.Length() ); +} + +void CDsaCertificateVerifyMsg::SetSignature( TDesC8& aSign ) +{ + iDsaSignature.iSha.SetBody( aSign ); +} + +void CDsaCertificateVerifyMsg::SetSignatureLength( TDesC8& aSign ) +{ + iDsaSignature.iSha.Header().SetInitialValue( aSign.Length() ) ; +} + + +CGenericExtension* CGenericExtension::NewLC(TInt aInitialLength) +{ + CGenericExtension* self = new(ELeave) CGenericExtension(aInitialLength); + CleanupStack::PushL(self); + return self; +} + +CGenericExtension::CGenericExtension( TInt aInitialLength ) : + CExtensionNode(&iOpaqueData), + iOpaqueData(KTlsExtensionLength, NULL, aInitialLength) +{ +} + +CGenericExtension::~CGenericExtension() +{ +} + +TInt CGenericExtension::ExtensionLength() +{ + return CExtensionNode::ExtensionLength() + iOpaqueData.GetItemLength(); +} + +CClientServerNameEntry* CClientServerNameEntry::NewLC(TInt aInitialLength) +{ + CClientServerNameEntry* self = new(ELeave) CClientServerNameEntry(aInitialLength); + CleanupStack::PushL(self); + return self; +} + +CClientServerNameEntry::CClientServerNameEntry( TInt aInitialLength ) : + CConstItem(&iName, KTlsExtensionNameTypeLength), + iName(KTlsExtensionLength, NULL, aInitialLength) +{ +} + +CClientServerNameExtension* CClientServerNameExtension::NewLC() +{ + CClientServerNameExtension* self = new(ELeave) CClientServerNameExtension(); + self->ConstructOpaqueDataWrapperL(&self->iServerNames); + CleanupStack::PushL(self); + return self; +} + +void CClientServerNameExtension::AddServerNameEntryL(CClientServerNameEntry *aServerNameEntry) + /** + Add server name entry to the list of server names and take ownership of it. + */ +{ + iServerNames.AddNodeL(aServerNameEntry); +} + +CClientServerNameEntry* CClientServerNameExtension::Node(TInt aIndex) +{ + return static_cast(iServerNames.Node(aIndex)); +} + +CClientServerNameExtension::CClientServerNameExtension() : + CKnownExtensionNode(), + iServerNames(NULL, KTlsExtensionLength) +{ +} +