multimediacommscontroller/mmccshared/src/mmcccryptocontext.cpp
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommscontroller/mmccshared/src/mmcccryptocontext.cpp	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,269 @@
+/*
+* Copyright (c) 2006 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:    Mcc crypto context.
+*
+*/
+
+
+
+
+// System includes
+#include <e32base.h>
+#include <mmccsrtpmasterkey.h>
+#include <mmccsrtpmastersalt.h>
+#include <mmccsrtpcryptoparams.h>
+
+#include "mmcccryptocontext.h"
+#include "mcccontrollerlogs.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+    
+       
+// ---------------------------------------------------------------------------
+// TMccCryptoContext::ValidateContext
+// 
+// ---------------------------------------------------------------------------
+// 
+TInt TMccCryptoContext::ValidateContext() const
+    {
+    // Checks Master key validity
+    if ( iSrtpMasterKey.iMasterKey.Length() != KMccSRTPDefaultMasterKeyLength/8 )
+        {
+        __CONTROLLER( "TMccCryptoContext::ValidateContext - Master Key Length Invalid" )
+        return KErrArgument;
+        }       
+    
+    if ( iSrtpMasterKey.iEncKeyBitLength != KMccSRTPDefSessionEncryptionKeyLength )
+        {
+        __CONTROLLER( "TMccCryptoContext::ValidateContext - Encryption Key Length Invalid" )
+        return KErrArgument;
+        }   
+        
+    if ( iSrtpMasterKey.iAuthKeyBitLength != KMccSRTPDefSessionAuthenticationKeyLength )
+        {
+        __CONTROLLER( "TMccCryptoContext::ValidateContext - Authentication Key Length Invalid" )
+        return KErrArgument;
+        }
+       
+    // Checks  master salt validity
+    if ( iSrtpMasterSalt.iMasterSalt.Length() != KMccSRTPDefaultMasterSaltLength/8 )
+        {
+        __CONTROLLER( "TMccCryptoContext::ValidateContext - Master Salt Length Invalid" )
+        return KErrArgument;
+        }       
+    
+    if ( iSrtpMasterSalt.iSaltKeyLength != KMccSRTPDefSessionSaltingKeyLength )
+        {
+        __CONTROLLER( "TMccCryptoContext::ValidateContext - Salt Key Length Invalid" )
+        return KErrArgument;
+        }  
+            
+    // Checks crypto params validity
+    if ( ( iSrtpCryptoParams.iSrtpEncAlg != ESrtpEncAES_CM &&
+           iSrtpCryptoParams.iSrtpEncAlg != ESrtpNullAlg ) && 
+         ( iSrtpCryptoParams.iSrtcpEncAlg != ESrtpEncAES_CM &&
+           iSrtpCryptoParams.iSrtcpEncAlg != ESrtpNullAlg ) )
+        {
+        __CONTROLLER( "TMccCryptoContext::ValidateContext - Crypto Params Enc Invalid" )
+        return KErrArgument;
+        }  
+
+    if ( ( iSrtpCryptoParams.iSrtpAuthAlg != ESrtpAuthHMAC_SHA1 &&
+           iSrtpCryptoParams.iSrtpAuthAlg != ESrtpAuthNull  &&
+           iSrtpCryptoParams.iSrtpAuthAlg != ESrtpAuthRCCm1 &&
+           iSrtpCryptoParams.iSrtpAuthAlg != ESrtpAuthRCCm2 &&
+           iSrtpCryptoParams.iSrtpAuthAlg != ESrtpAuthRCCm3 ) || 
+         ( iSrtpCryptoParams.iSrtcpAuthAlg != ESrtpAuthHMAC_SHA1 &&
+           iSrtpCryptoParams.iSrtcpAuthAlg != ESrtpAuthNull ) )
+        {
+        __CONTROLLER( "TMccCryptoContext::ValidateContext - Crypto Params AuthAlg Invalid" )
+        return KErrArgument;
+        }  
+
+	if ( iSrtpCryptoParams.iSrtpAuthAlg == ESrtpAuthHMAC_SHA1 &&
+		( iSrtpCryptoParams.iSrtpAuthTagLen != KMccSRTPAuthTagLength80 &&
+		  iSrtpCryptoParams.iSrtpAuthTagLen != KMccSRTPAuthTagLength32 ) )
+		{
+		__CONTROLLER( "TMccCryptoContext::ValidateContext - Crypto Params SRTP AuthTag32 Invalid" )
+		return KErrArgument;
+		}
+	
+	if ( iSrtpCryptoParams.iSrtcpAuthAlg == ESrtpAuthHMAC_SHA1 &&
+		 ( iSrtpCryptoParams.iSrtcpAuthTagLen != KMccSRTPAuthTagLength80 &&
+		   iSrtpCryptoParams.iSrtcpAuthTagLen != KMccSRTPAuthTagLength32 ) )
+		{
+		__CONTROLLER( "TMccCryptoContext::ValidateContext - Crypto Params SRTCP AuthTag32 Invalid" )
+		return KErrArgument;
+		}
+			
+    if ( ( iSrtpCryptoParams.iSrtpAuthAlg == ESrtpAuthRCCm1 ||
+          iSrtpCryptoParams.iSrtpAuthAlg == ESrtpAuthRCCm2 ) && 
+          iSrtpCryptoParams.iSrtpAuthTagLen != KMccSRTPAuthTagLength112 )
+        {
+        __CONTROLLER( "TMccCryptoContext::ValidateContext - Crypto Params SRTP AuthTag112 Invalid" )
+        return KErrArgument;
+        }
+        
+	if ( iSrtpCryptoParams.iSrtpAuthAlg == ESrtpAuthRCCm3 && 
+         iSrtpCryptoParams.iSrtpAuthTagLen != KMccSRTPAuthTagLength32 )
+        {
+        __CONTROLLER( "TMccCryptoContext::ValidateContext - Crypto Params SRTP RCC3 && AuthTag32 Invalid" )
+        return KErrArgument;
+        }
+        
+	if ( ( iSrtpCryptoParams.iSrtpAuthAlg == ESrtpAuthNull  && 
+           iSrtpCryptoParams.iSrtpAuthTagLen != 0 ) &&
+         ( iSrtpCryptoParams.iSrtpAuthAlg == ESrtpAuthNull && 
+           iSrtpCryptoParams.iSrtpAuthTagLen != 0) )
+        {
+        __CONTROLLER( "TMccCryptoContext::ValidateContext - Crypto Params SRTP AuthNull Invalid" )
+        return KErrArgument;
+        }  
+
+    if ( iSrtpCryptoParams.iPrefixLen != KMccSRTPPrefixLength )
+        {
+        __CONTROLLER( "TMccCryptoContext::ValidateContext - Crypto Params Prefix Invalid" )
+        return KErrArgument;
+        }  
+        
+    if ( !iSrtpCryptoParams.iROCTransRate )
+        {
+        __CONTROLLER( "TMccCryptoContext::ValidateContext - Crypto Params ROCTransRate Invalid" )
+        return KErrArgument;
+        }
+             
+    return KErrNone;
+    }
+    
+// ---------------------------------------------------------------------------
+// TMccCryptoContext::UpdateContext
+// 
+// ---------------------------------------------------------------------------
+//
+TInt TMccCryptoContext::UpdateContext( TMccCryptoContext& aCandidate )
+    {
+    iSrtpMasterKey = aCandidate.iSrtpMasterKey;
+    iSrtpMasterSalt = aCandidate.iSrtpMasterSalt;
+    
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// TMccCryptoContext::GetDestinationInfo
+// 
+// ---------------------------------------------------------------------------
+//    
+TInt TMccCryptoContext::GetDestinationInfo( TUint32& aSessionId, TUint32& aLinkId,
+    					                    TUint32& aStreamId, TUint32& aEndPointId ) const
+    {
+    if ( !iBindingDone )
+        {
+        return KErrNotFound;
+        }
+        
+    aSessionId = iSessionId;
+    aLinkId = iLinkId;
+    aStreamId = iStreamId;
+    aEndPointId = iEndPointId;    
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// TMccCryptoContext::GetDestinationInfo
+// 
+// ---------------------------------------------------------------------------
+//    
+TInt TMccCryptoContext::SetDestinationInfo( TUint32 aSessionId, TUint32 aLinkId,
+    					                    TUint32 aStreamId, TUint32 aEndPointId )
+    {
+    iSessionId = aSessionId;
+    iLinkId = aLinkId;
+    iStreamId = aStreamId;
+    iEndPointId =  aEndPointId;
+    
+    iBindingDone = ETrue;
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// TMccCryptoContext::SetMasterKey
+// 
+// ---------------------------------------------------------------------------
+//
+void TMccCryptoContext::SetMasterKey( const TMccSrtpMasterKey& aSrtpMasterKey )
+    {
+    iSrtpMasterKey = aSrtpMasterKey; 
+    }
+
+// ---------------------------------------------------------------------------
+// TMccCryptoContext::SetMasterSalt
+// 
+// ---------------------------------------------------------------------------
+//
+void TMccCryptoContext::SetMasterSalt( const TMccSrtpMasterSalt& aSrtpMasterSalt )
+    {
+    iSrtpMasterSalt = aSrtpMasterSalt; 
+    }
+
+// ---------------------------------------------------------------------------
+// TMccCryptoContext::SetCryptoParams
+// 
+// ---------------------------------------------------------------------------
+//
+void TMccCryptoContext::SetCryptoParams( const TMccSrtpCryptoParams& aSrtpCryptoParams )
+    {
+    iSrtpCryptoParams = aSrtpCryptoParams;   
+    }
+
+// ---------------------------------------------------------------------------
+// TMccCryptoContext::MasterKey
+// 
+// ---------------------------------------------------------------------------
+//   
+const TMccSrtpMasterKey& TMccCryptoContext::MasterKey() const
+    {
+    return iSrtpMasterKey;
+    }
+
+// ---------------------------------------------------------------------------
+// TMccCryptoContext::MasterSalt
+// 
+// ---------------------------------------------------------------------------
+//   
+const TMccSrtpMasterSalt& TMccCryptoContext::MasterSalt() const
+    {
+    return iSrtpMasterSalt;
+    }
+
+// ---------------------------------------------------------------------------
+// TMccCryptoContext::CryptoParams
+// 
+// ---------------------------------------------------------------------------
+//   
+const TMccSrtpCryptoParams& TMccCryptoContext::CryptoParams() const
+    {
+    return iSrtpCryptoParams;
+    }
+            					                      
+// ---------------------------------------------------------------------------
+// TMccCryptoContext::ContextId
+// 
+// ---------------------------------------------------------------------------
+//
+TUint32 TMccCryptoContext::ContextId() const
+    {
+    return iContextId;
+    }
+//  End of File