--- /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