multimediacommscontroller/mmccrtpsourcesink/src/mmcccryptoadapter.cpp
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommscontroller/mmccrtpsourcesink/src/mmcccryptoadapter.cpp	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,188 @@
+/*
+* 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:    Implementation of the MCC Crypto Adapter
+*
+*/
+
+
+
+
+// System includes
+#include <e32base.h>
+#include <srtpcryptocontext.h>
+#include <srtpmasterkey.h>
+#include <srtpmastersalt.h>
+#include <mmf/common/mmfcontrollerframework.h>
+
+// User include
+#include "mmcccryptoadapter.h"
+#include "mccrtpdefs.h"
+#include "mmcccryptocontext.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// TMccCryptoAdapter::CreateCryptoContextL
+// 
+// ---------------------------------------------------------------------------
+//    
+CSRTPCryptoContext* TMccCryptoAdapter::CreateCryptoContextL( 
+                                   const TMccCryptoContext& aContextParams )
+    {
+	TRACE_RTP_CRYPTO_ADAPTER_PRINT( "TMccCryptoAdapter::CreateCryptoContextL IN" )
+    
+    const TMccSrtpMasterKey mccMasterkey( aContextParams.MasterKey() ); 
+    const TMccSrtpMasterSalt mccMasterSalt( aContextParams.MasterSalt() );
+    const TMccSrtpCryptoParams mccCryptoParams( aContextParams.CryptoParams() ); 
+
+    // Creates Srtp master key
+    CSRTPMasterKey* masterKey = CSRTPMasterKey::NewL( mccMasterkey.iMasterKey,
+                                                      mccMasterkey.iMKI,
+                                                      mccMasterkey.iEncKeyBitLength,
+                                                      mccMasterkey.iAuthKeyBitLength );
+    CleanupStack::PushL( masterKey );
+    
+    TRACE_RTP_CRYPTO_ADAPTER_PRINT2( "TMccCryptoAdapter::masterKey - iEncKeyBitLength: %d ", mccMasterkey.iEncKeyBitLength )
+    TRACE_RTP_CRYPTO_ADAPTER_PRINT2( "TMccCryptoAdapter::masterKey - iAuthKeyBitLength: %d ", mccMasterkey.iAuthKeyBitLength  )    
+
+    
+    // Creates Srtp master salt                                   
+    CSRTPMasterSalt* masterSalt = CSRTPMasterSalt::NewL( mccMasterSalt.iMasterSalt,
+                                                         mccMasterSalt.iSaltKeyLength );
+    CleanupStack::PushL( masterSalt );
+    
+    TRACE_RTP_CRYPTO_ADAPTER_PRINT2( "TMccCryptoAdapter::masterSalt - iSaltKeyLength: %d ", mccMasterSalt.iSaltKeyLength )    
+
+    // Creates Srtp crypto params
+    TSrtpCryptoParams cryptoParams;
+    cryptoParams.iSrtpEncAlg = ( TSRTPEncAlg )mccCryptoParams.iSrtpEncAlg;
+    cryptoParams.iSrtpAuthAlg = ( TSRTPAuthAlg )mccCryptoParams.iSrtpAuthAlg;
+    cryptoParams.iSrtpAuthTagLen = mccCryptoParams.iSrtpAuthTagLen;
+    cryptoParams.iPrefixLen = mccCryptoParams.iPrefixLen;
+    cryptoParams.iSrtpReplayProtection = mccCryptoParams.iSrtpReplayProtection;
+    cryptoParams.iSrtpKeyDervRate = mccCryptoParams.iSrtpKeyDervRate;
+    
+    // RTCP Crypto Params
+    cryptoParams.iSrtcpEncAlg = ( TSRTPEncAlg )mccCryptoParams.iSrtcpEncAlg;
+    cryptoParams.iSrtcpAuthAlg = ( TSRTPAuthAlg )mccCryptoParams.iSrtcpAuthAlg;
+    cryptoParams.iSrtcpAuthTagLen = mccCryptoParams.iSrtcpAuthTagLen;
+    cryptoParams.iSrtcpReplayProtection = mccCryptoParams.iSrtcpReplayProtection;
+    cryptoParams.iSrtcpKeyDervRate = mccCryptoParams.iSrtcpKeyDervRate;
+    
+    cryptoParams.iROCTransRate = mccCryptoParams.iROCTransRate;
+    cryptoParams.iMasterKeysLifeTime = mccCryptoParams.iMasterKeysLifeTime;
+    cryptoParams.iReplayWindowSizeHint = mccCryptoParams.iReplayWindowSizeHint;
+    cryptoParams.iIsRCCm3Sync = mccCryptoParams.iIsRCCm3Sync;
+    
+
+    TRACE_RTP_CRYPTO_ADAPTER_PRINT2( "TMccCryptoAdapter::cryptoParams - iSrtpEncAlg, [0=null, 1=AES_CM]: %d", ( TUint )cryptoParams.iSrtpEncAlg )
+    TRACE_RTP_CRYPTO_ADAPTER_PRINT2( "TMccCryptoAdapter::cryptoParams - iSrtpAuthAlg [0=null, 1=HMAC_SHA1 2=RCCm1, 3=RCCm2, 4=RCCm3]: %d", ( TUint )cryptoParams.iSrtpAuthAlg )
+    TRACE_RTP_CRYPTO_ADAPTER_PRINT2( "TMccCryptoAdapter::cryptoParams - iSrtpAuthTagLen: %d", cryptoParams.iSrtpAuthTagLen )
+    TRACE_RTP_CRYPTO_ADAPTER_PRINT2( "TMccCryptoAdapter::cryptoParams - iPrefixLen: %d", cryptoParams.iPrefixLen )
+    TRACE_RTP_CRYPTO_ADAPTER_PRINT2( "TMccCryptoAdapter::cryptoParams - iSrtpReplayProtection: %d", cryptoParams.iSrtpReplayProtection )
+    TRACE_RTP_CRYPTO_ADAPTER_PRINT2( "TMccCryptoAdapter::cryptoParams - iSrtpKeyDervRate: %d", cryptoParams.iSrtpKeyDervRate )
+    TRACE_RTP_CRYPTO_ADAPTER_PRINT( "" )  
+    TRACE_RTP_CRYPTO_ADAPTER_PRINT2( "TMccCryptoAdapter::cryptoParams - iSrtcpEncAlg, [0=null, 1=AES_CM] : %d", ( TUint )cryptoParams.iSrtcpEncAlg )
+    TRACE_RTP_CRYPTO_ADAPTER_PRINT2( "TMccCryptoAdapter::cryptoParams - iSrtcpAuthAlg [0=null, 1=HMAC_SHA1 2=RCCm1, 3=RCCm2, 4=RCCm3]: %d", ( TUint )cryptoParams.iSrtcpAuthAlg )   
+    TRACE_RTP_CRYPTO_ADAPTER_PRINT2( "TMccCryptoAdapter::cryptoParams - iSrtcpAuthTagLen: %d", cryptoParams.iSrtcpAuthTagLen )
+    TRACE_RTP_CRYPTO_ADAPTER_PRINT2( "TMccCryptoAdapter::cryptoParams - iSrtcpReplayProtection: %d", cryptoParams.iSrtcpReplayProtection )
+    TRACE_RTP_CRYPTO_ADAPTER_PRINT2( "TMccCryptoAdapter::cryptoParams - iSrtcpKeyDervRate: %d", cryptoParams.iSrtcpKeyDervRate )
+
+
+    TRACE_RTP_CRYPTO_ADAPTER_PRINT2( "TMccCryptoAdapter::cryptoParams - iROCTransRate: %d", cryptoParams.iROCTransRate)
+    TRACE_RTP_CRYPTO_ADAPTER_PRINT2( "TMccCryptoAdapter::cryptoParams - iMasterKeysLifeTime: %d", cryptoParams.iMasterKeysLifeTime )
+    TRACE_RTP_CRYPTO_ADAPTER_PRINT2( "TMccCryptoAdapter::cryptoParams - iReplayWindowSizeHint: %d", cryptoParams.iReplayWindowSizeHint )
+    TRACE_RTP_CRYPTO_ADAPTER_PRINT2( "TMccCryptoAdapter::cryptoParams - iIsRCCm3Sync: %d", cryptoParams.iIsRCCm3Sync )     
+
+    
+    CleanupStack::Pop( masterSalt );
+    CleanupStack::Pop( masterKey );
+                                                               
+    CSRTPCryptoContext* context = CSRTPCryptoContext::NewL( masterKey,
+                                                            masterSalt, 
+                                                            cryptoParams );
+
+	TRACE_RTP_CRYPTO_ADAPTER_PRINT( "TMccCryptoAdapter::CreateCryptoContextL OUT" );   
+    return context;   
+    };
+ 
+// ---------------------------------------------------------------------------
+// TMccCryptoAdapter::UpdateCryptoContextL()
+// 
+// ---------------------------------------------------------------------------
+//   
+void TMccCryptoAdapter::UpdateCryptoContextL( const TMccCryptoContext& aContextParams,
+                                              CSRTPCryptoContext& aContext )
+    {
+    TRACE_RTP_CRYPTO_ADAPTER_PRINT( "TMccCryptoAdapter::UpdateCryptoContextL IN" )
+    
+    const TMccSrtpMasterKey mccMasterkey( aContextParams.MasterKey() ); 
+    const TMccSrtpMasterSalt mccMasterSalt( aContextParams.MasterSalt() );
+    const TMccSrtpCryptoParams mccCryptoParams( aContextParams.CryptoParams() );
+       
+    // Creates Srtp master key
+    CSRTPMasterKey* masterKey = CSRTPMasterKey::NewL( mccMasterkey.iMasterKey,
+                                                      mccMasterkey.iMKI,
+                                                      mccMasterkey.iEncKeyBitLength,
+                                                      mccMasterkey.iAuthKeyBitLength );
+                                                      
+    CleanupStack::PushL( masterKey );
+                                                      
+    CSRTPMasterSalt* masterSalt = CSRTPMasterSalt::NewL( mccMasterSalt.iMasterSalt,
+                                                         mccMasterSalt.iSaltKeyLength );
+    CleanupStack::PushL( masterSalt );
+                                               
+    if ( EFalse == masterKey->Valid() )
+        {
+        TRACE_RTP_CRYPTO_ADAPTER_PRINT( "TMccCryptoAdapter::UpdateCryptoContextL Masterkey isn't valid" )
+
+        User::Leave( KErrArgument );
+        }
+        
+    if ( EFalse == masterSalt->Valid() )
+        {
+        TRACE_RTP_CRYPTO_ADAPTER_PRINT( "TMccCryptoAdapter::UpdateCryptoContextL Mastersalt isn't valid" )
+
+        User::Leave( KErrArgument );
+        } 
+         
+    if ( ( aContext.MasterSalt().MasterSalt()).Compare( masterSalt->MasterSalt() ) != 0 )
+        {               
+        aContext.SetMasterSalt( masterSalt );
+        CleanupStack::Pop( masterSalt );
+        TRACE_RTP_CRYPTO_ADAPTER_PRINT( "TMccCryptoAdapter::UpdateCryptoContextL MasterSalt Is changed" )  
+        }
+    else
+        {
+        CleanupStack::PopAndDestroy( masterSalt );
+        TRACE_RTP_CRYPTO_ADAPTER_PRINT( "TMccCryptoAdapter::UpdateCryptoContextL MasterSalt Isn't changed" )   
+        }
+
+    if ( ( aContext.MasterKey().MasterKey()).Compare( masterKey->MasterKey() ) != 0 ||
+         ( aContext.MasterKey().MKI()).Compare( masterKey->MKI() ) != 0 )
+        {               
+        aContext.SetMasterKey( masterKey );
+        CleanupStack::Pop( masterKey );
+        TRACE_RTP_CRYPTO_ADAPTER_PRINT( "TMccCryptoAdapter::UpdateCryptoContextL MasterKey Is changed" ) 
+        }
+    else
+        {
+        CleanupStack::PopAndDestroy( masterKey );
+        TRACE_RTP_CRYPTO_ADAPTER_PRINT( "TMccCryptoAdapter::UpdateCryptoContextL MasterKey Isn't changed" )  
+        }
+    
+    TRACE_RTP_CRYPTO_ADAPTER_PRINT( "TMccCryptoAdapter::UpdateCryptoContextL OUT" )            
+    }
+//  End of File