diff -r 000000000000 -r 1bce908db942 multimediacommscontroller/mmccrtpsourcesink/src/mmcccryptoadapter.cpp --- /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 +#include +#include +#include +#include + +// 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