--- /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 <signed.h>
+#include <hash.h>
+#include <tlstypedef.h>
+
+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<TUint8*>(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<CClientServerNameEntry*>(iServerNames.Node(aIndex));
+}
+
+CClientServerNameExtension::CClientServerNameExtension() :
+ CKnownExtensionNode(),
+ iServerNames(NULL, KTlsExtensionLength)
+{
+}
+