rtp/srtpstack/tsrc/ut_srtpstack/src/UT_CSRTPStreamIn.cpp
changeset 0 307788aac0a8
child 19 b5e99d8877c7
equal deleted inserted replaced
-1:000000000000 0:307788aac0a8
       
     1 /*
       
     2 * Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 
       
    21 //  CLASS HEADER
       
    22 #include "UT_CSRTPStreamIn.h"
       
    23 #include "srtputils.h"
       
    24 
       
    25 // CONSTANTS
       
    26 const TInt KRtpVersion = 2;    // Current protocol version          
       
    27 const TUint KMinRtpHeaderLen( 12 );
       
    28 const TUint16 KTestSeqNr17 = 17171;
       
    29 const TUint16 KTestSeqNr18 = 17172;
       
    30 const TInt KLength = 50;
       
    31 
       
    32 // 80 bit key, test 1
       
    33 _LIT8(KTestPayload160Bits,  "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
       
    34 
       
    35 // 80 bit key, test 1
       
    36 //_LIT8(KTestMKI128Bits,      "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB");
       
    37 _LIT8(KTestMKI128Bits,      "ABCDEF1234567890ABCDEF1234567890");
       
    38 
       
    39 // 80 bit key, test 1
       
    40 _LIT8(KTestAuthTag80Bits,   "CCCCCCCCCCCCCCCCCCCC");
       
    41 										
       
    42 
       
    43 _LIT8(KRFC3711_TestMasterKey128bits,    "E1F97A0D3E018BE0D64FA32C06DE4139");
       
    44 _LIT8(KRFC3711_TestMasterSalt112bits,   "0EC675AD498AFEEBB6960B3AABE6");	
       
    45 _LIT8(KRFC3711_SessionEncrKey128bits,   "C61E7A93744F39EE10734AFE3FF7A087");  
       
    46 _LIT8(KRFC3711_SessionSaltKey128bits,   "30CBBC08863D8C85D49DB34A9AE1");  
       
    47 _LIT8(KRFC3711_SessionAuthKey128bits,   "CEBE321F6FF7716B6FD4AB49AF256A156D38BAA4");  
       
    48 										 
       
    49 _LIT8(KRFC3711_RtcpEncrKey128bits,   	"4C1AA45A81F73D61C800BBB00FBB1EAA");  
       
    50 _LIT8(KRFC3711_RtcpSaltKey128bits,   	"9581C7AD87B3E530BF3E4454A8B3");  
       
    51 _LIT8(KRFC3711_RtcpAuthKey128bits,   	"8D54534FEB49AE8E7993A6BD0B844FC323A93DFD");  
       
    52 
       
    53 _LIT8(KDecryptedPayload,                "2EDE3286C6E33E68C6BB93350620A1245EC0004F");  
       
    54 
       
    55 _LIT8(KTestM_without_ROC,               "123456789ABCDE");  
       
    56 _LIT8(KRefM_with_ROC,                   "123456789ABCDEFFFFFFFF");  
       
    57 
       
    58 _LIT8(KTestAuthTag,                     "D07919ABC9F235CB4516");  
       
    59 _LIT8(KDummyRTCPPacket, "dummyrtcp");
       
    60 _LIT8(KRTCPPacket, "80C90001DEADBEEF9E30159059A23363F0FBDB62DC85AF52875C944495C5B00280000001ABCDEF1234567890ABCDEF1234567890DFC98F01DE16DA30F20D");
       
    61 
       
    62 _LIT8(KSRTCPPacket2, "80C90001DEADBEEF2BC095F51495D87D35B816BE569A6A1BA6989D5A20B541D680000002ABCDEF1234567890ABCDEF12345678905140BA93E8CDAC0C89D5");
       
    63 
       
    64 
       
    65 //  EXTERNAL INCLUDES
       
    66 #include <digia/eunit/eunitmacros.h>
       
    67 #include "srtpcryptohandlersrtp.h"
       
    68 #include "srtpcryptohandlersrtcp.h"
       
    69 #include "srtpmastersalt.h"
       
    70 #include "srtpmasterkey.h"
       
    71 #include "srtpstreamin.h"
       
    72 #include "srtpsession.h"
       
    73 #include "srtputils.h"
       
    74 
       
    75 
       
    76 
       
    77 //  INTERNAL INCLUDES
       
    78 #include "srtpstreamin.h"
       
    79 
       
    80 // CONSTRUCTION
       
    81 UT_CSRTPStreamIn* UT_CSRTPStreamIn::NewL()
       
    82     {
       
    83     UT_CSRTPStreamIn* self = UT_CSRTPStreamIn::NewLC(); 
       
    84     CleanupStack::Pop();
       
    85 
       
    86     return self;
       
    87     }
       
    88 
       
    89 UT_CSRTPStreamIn* UT_CSRTPStreamIn::NewLC()
       
    90     {
       
    91     UT_CSRTPStreamIn* self = new( ELeave ) UT_CSRTPStreamIn();
       
    92     CleanupStack::PushL( self );
       
    93 
       
    94 	self->ConstructL(); 
       
    95 
       
    96     return self;
       
    97     }
       
    98 
       
    99 // Destructor (virtual by CBase)
       
   100 UT_CSRTPStreamIn::~UT_CSRTPStreamIn()
       
   101     {
       
   102     }
       
   103 
       
   104 // Default constructor
       
   105 UT_CSRTPStreamIn::UT_CSRTPStreamIn() 
       
   106     {
       
   107     }
       
   108 
       
   109 UT_CSRTPStreamIn::TPayloadDetails::TPayloadDetails() :
       
   110         seqNr(),
       
   111 //      ssrc(),
       
   112         padding(0),
       
   113         numCSRC(0),
       
   114         fHeaderExtension(EFalse),
       
   115         payloadLen(0),
       
   116         payloadData(NULL),
       
   117         MKILen(0),
       
   118         MKIData(NULL),
       
   119         authTagLen(0),
       
   120         authTagData(NULL)
       
   121             {            
       
   122             }
       
   123         
       
   124 void UT_CSRTPStreamIn::SRTPMasterKeyStaleEvent(const CSRTPStream& /*aStream*/ )
       
   125     {
       
   126     }
       
   127 void UT_CSRTPStreamIn::SRTPMasterKeyStaleEvent(const CSRTPSession& /*aSession*/ )
       
   128     {
       
   129     }
       
   130 
       
   131 // Second phase construct
       
   132 void UT_CSRTPStreamIn::ConstructL()
       
   133     {
       
   134     // The ConstructL from the base class CEUnitTestSuiteClass must be called.
       
   135     // It generates the test case table.
       
   136     CEUnitTestSuiteClass::ConstructL();
       
   137     }
       
   138 
       
   139 //  METHODS
       
   140 
       
   141 
       
   142 void UT_CSRTPStreamIn::Hex(HBufC8& aString)
       
   143 {
       
   144     TPtr8 ptr=aString.Des();
       
   145     TInt length = aString.Length();
       
   146     if (aString.Length()%2)
       
   147         {
       
   148         ptr.SetLength(0);
       
   149         return;
       
   150         }
       
   151     TInt i;
       
   152     for (i=0;i<aString.Length();i+=2)
       
   153         {
       
   154         TUint8 tmp;
       
   155         tmp=(TUint8)(aString[i]-(aString[i]>'9'?('A'-10):'0'));
       
   156         tmp*=16;
       
   157         tmp|=(TUint8)(aString[i+1]-(aString[i+1]>'9'?('A'-10):'0'));
       
   158         ptr[i/2]=tmp;
       
   159         }
       
   160     ptr.SetLength(aString.Length()/2);
       
   161 
       
   162 }
       
   163 
       
   164 // ---------------------------------------------------------------------------
       
   165 // UT_CSRTPStreamIn::BuildSrtpPacketL()
       
   166 // 
       
   167 // ---------------------------------------------------------------------------
       
   168 //
       
   169 HBufC8* UT_CSRTPStreamIn::BuildPacketL(TBool aSrtp, TPayloadDetails& details)
       
   170     {
       
   171     TUint packetSize = KMinRtpHeaderLen + details.payloadLen;
       
   172     TUint payloadStartOffset = KMinRtpHeaderLen;
       
   173     TUint8 padCount = 0;
       
   174     
       
   175     packetSize += details.numCSRC*4;
       
   176     payloadStartOffset += details.numCSRC*4;          
       
   177     
       
   178     if (details.fHeaderExtension) 
       
   179         {
       
   180         packetSize += 4;        
       
   181         payloadStartOffset += 4;
       
   182         }
       
   183 
       
   184     if (details.padding) 
       
   185         {
       
   186         padCount = 3;
       
   187         }
       
   188         
       
   189     packetSize += padCount;            
       
   190         
       
   191     if (aSrtp)
       
   192         {
       
   193         packetSize += details.MKILen;                    
       
   194         packetSize += details.authTagLen;                        
       
   195         }
       
   196         
       
   197     
       
   198     HBufC8* packet = HBufC8::NewMaxL(packetSize);
       
   199     TUint8* dataP = const_cast<TUint8*>( packet->Des().Ptr() );    
       
   200     TUint8* ptr = dataP;
       
   201     Mem::FillZ( ptr, packetSize);
       
   202     
       
   203     // padding (1 bit)
       
   204     ptr[0] |= static_cast<TUint8>( details.padding << 5 );
       
   205         
       
   206     // header extension (1 bit)
       
   207     if ( details.fHeaderExtension )
       
   208         {
       
   209         ptr[0] |= ( 1 << 4 );
       
   210         }
       
   211     
       
   212     if (details.numCSRC)
       
   213         {
       
   214         // CC
       
   215         ptr[0] |= details.numCSRC;
       
   216         }
       
   217        
       
   218     //sequence number
       
   219     ptr+=2;
       
   220     TSRTPUtils::Write16( ptr, details.seqNr );    
       
   221     
       
   222     //ssrc   
       
   223     /*
       
   224     ptr+=6;
       
   225     if (details.ssrc)
       
   226         {
       
   227         Mem::Copy( ptr, details.ssrc, 4 );        
       
   228         }
       
   229    */
       
   230     //payload
       
   231     ptr = dataP + payloadStartOffset;
       
   232     if (details.payloadData)
       
   233         {
       
   234         Mem::Copy( ptr, details.payloadData, details.payloadLen );        
       
   235         }
       
   236 
       
   237     if (aSrtp)
       
   238         {
       
   239         //MKI
       
   240         ptr = dataP + payloadStartOffset + details.payloadLen + padCount;
       
   241         if (details.MKILen > 0)
       
   242             {
       
   243             Mem::Copy( ptr, details.MKIData, details.MKILen );        
       
   244             }
       
   245         ptr = dataP + payloadStartOffset + details.payloadLen + padCount + details.MKILen;    
       
   246     	if (details.authTagLen==14)
       
   247     		{
       
   248     		details.authTagLen=10;
       
   249     		TSRTPUtils::Write32( ptr,0);
       
   250   			ptr+=4;  	
       
   251     		}
       
   252         //auth tag
       
   253         
       
   254         if (details.authTagLen > 0)
       
   255             {
       
   256             Mem::Copy( ptr, details.authTagData, details.authTagLen );        
       
   257             }            
       
   258         }    
       
   259     
       
   260     return packet;
       
   261     }
       
   262 
       
   263 
       
   264 
       
   265 void UT_CSRTPStreamIn::SetupL(  )
       
   266     {
       
   267 
       
   268     iDecryptedPayload = HBufC8::NewL(KDecryptedPayload().Length());
       
   269 	*iDecryptedPayload = KDecryptedPayload;
       
   270 	Hex(*iDecryptedPayload);
       
   271 	iDecryptedPayload->Des().SetLength(20);
       
   272 
       
   273     iRFC3711_SessionEncrKey128bits = HBufC8::NewL(KRFC3711_SessionEncrKey128bits().Length());
       
   274 	*iRFC3711_SessionEncrKey128bits = KRFC3711_SessionEncrKey128bits;
       
   275 	Hex(*iRFC3711_SessionEncrKey128bits);
       
   276 
       
   277     iRFC3711_SessionSaltKey128bits = HBufC8::NewL(KRFC3711_SessionSaltKey128bits().Length());
       
   278 	*iRFC3711_SessionSaltKey128bits = KRFC3711_SessionSaltKey128bits;
       
   279 	Hex(*iRFC3711_SessionSaltKey128bits);
       
   280 
       
   281     iRFC3711_SessionAuthKey128bits = HBufC8::NewL(KRFC3711_SessionAuthKey128bits().Length());
       
   282 	*iRFC3711_SessionAuthKey128bits = KRFC3711_SessionAuthKey128bits;
       
   283 	Hex(*iRFC3711_SessionAuthKey128bits);
       
   284 	
       
   285     iRFC3711_RtcpEncrKey128bits = HBufC8::NewL(KRFC3711_RtcpEncrKey128bits().Length());
       
   286 	*iRFC3711_RtcpEncrKey128bits = KRFC3711_RtcpEncrKey128bits;
       
   287 	Hex(*iRFC3711_RtcpEncrKey128bits);
       
   288 
       
   289     iRFC3711_RtcpSaltKey128bits = HBufC8::NewL(KRFC3711_RtcpSaltKey128bits().Length());
       
   290 	*iRFC3711_RtcpSaltKey128bits = KRFC3711_RtcpSaltKey128bits;
       
   291 	Hex(*iRFC3711_RtcpSaltKey128bits);
       
   292 
       
   293     iRFC3711_RtcpAuthKey128bits = HBufC8::NewL(KRFC3711_RtcpAuthKey128bits().Length());
       
   294 	*iRFC3711_RtcpAuthKey128bits = KRFC3711_RtcpAuthKey128bits;
       
   295 	Hex(*iRFC3711_RtcpAuthKey128bits);
       
   296 	
       
   297 	
       
   298 	    
       
   299 	iTestPayload160Bits = HBufC8::NewL(KTestPayload160Bits().Length());
       
   300 	*iTestPayload160Bits = KTestPayload160Bits;	
       
   301 	Hex(*iTestPayload160Bits);	
       
   302     
       
   303 
       
   304     // our test MKI is 16 bit long:
       
   305     // ABCDEF1234567890ABCDEF1234567890
       
   306 
       
   307     HBufC8* masterKey = HBufC8::NewL(KRFC3711_TestMasterKey128bits().Length());
       
   308     CleanupStack::PushL( masterKey );
       
   309     *masterKey = KRFC3711_TestMasterKey128bits;
       
   310 	
       
   311     
       
   312     
       
   313     HBufC8* masterSalt =HBufC8::NewL(KRFC3711_TestMasterSalt112bits().Length());
       
   314     CleanupStack::PushL( masterSalt);
       
   315 	*masterSalt = KRFC3711_TestMasterSalt112bits;
       
   316 	
       
   317 	
       
   318 	HBufC8* mki =HBufC8::NewL(KTestMKI128Bits().Length());
       
   319     CleanupStack::PushL( mki);
       
   320 	*mki = KTestMKI128Bits;
       
   321 	Hex(*mki);
       
   322 	
       
   323 	iMasterKey = CSRTPMasterKey::NewL( *masterKey, *mki );
       
   324     iMasterSalt = CSRTPMasterSalt::NewL( *masterSalt );
       
   325     
       
   326     
       
   327     TSrtpCryptoParams params;
       
   328     iContext = CSRTPCryptoContext::NewL(iMasterKey, iMasterSalt, params );
       
   329     CleanupStack::PopAndDestroy( mki );
       
   330     CleanupStack::PopAndDestroy( masterSalt );
       
   331     CleanupStack::PopAndDestroy( masterKey ); 
       
   332     iDestination.Input(_L("127.0.0.1"));
       
   333     
       
   334     
       
   335     
       
   336     iSRTPSession = CSRTPSession::NewL( iDestination, iContext, *this ); 
       
   337     iStreamIn = CSRTPStreamIn::NewL(*iSRTPSession, (TUint)1);
       
   338     iStreamInLateBD = CSRTPStreamIn::NewL(*iSRTPSession);
       
   339 	iCryptoHandlerSRTP = iStreamIn->iHandlerRTP;
       
   340 	iCryptoHandlerSRTCP =iStreamIn->iHandlerRTCP;
       
   341 	iCryptoHandlerSRTP2 = iStreamInLateBD->iHandlerRTP;
       
   342 	iCryptoHandlerSRTCP2 =iStreamInLateBD->iHandlerRTCP;
       
   343     } 
       
   344 
       
   345 
       
   346 void UT_CSRTPStreamIn::Teardown(  )
       
   347     {
       
   348     delete iDecryptedPayload;
       
   349     delete iTestPayload160Bits;
       
   350 
       
   351 
       
   352     delete iStreamIn;
       
   353     delete iStreamInLateBD;
       
   354     delete iSRTPSession;    
       
   355 
       
   356    
       
   357     delete iRFC3711_SessionEncrKey128bits;
       
   358     delete iRFC3711_SessionSaltKey128bits;
       
   359     delete iRFC3711_SessionAuthKey128bits;    
       
   360     delete iRFC3711_RtcpEncrKey128bits;
       
   361 	delete iRFC3711_RtcpSaltKey128bits;
       
   362 	delete iRFC3711_RtcpAuthKey128bits;
       
   363     }
       
   364 
       
   365 void UT_CSRTPStreamIn::UT_CSRTPStreamIn_NewL_1L(  )
       
   366     {        
       
   367     CSRTPStreamIn* tempStreamIn = CSRTPStreamIn::NewL(*iSRTPSession, (TUint)1);
       
   368     EUNIT_ASSERT(tempStreamIn->SSRC()== 1);
       
   369     delete tempStreamIn;
       
   370     }
       
   371 
       
   372 void UT_CSRTPStreamIn::UT_CSRTPStreamIn_NewL_2L(  )
       
   373     {
       
   374     HBufC8* masterKey = HBufC8::NewL(KRFC3711_TestMasterKey128bits().Length());
       
   375     CleanupStack::PushL( masterKey );
       
   376     *masterKey = KRFC3711_TestMasterKey128bits;
       
   377 
       
   378     
       
   379     HBufC8* masterSalt =HBufC8::NewL(KRFC3711_TestMasterSalt112bits().Length());
       
   380     CleanupStack::PushL( masterSalt);
       
   381 	*masterSalt = KRFC3711_TestMasterSalt112bits;
       
   382 
       
   383 	
       
   384 	HBufC8* mki =HBufC8::NewL(KTestMKI128Bits().Length());
       
   385     CleanupStack::PushL( mki);
       
   386 	*mki = KRFC3711_TestMasterSalt112bits;
       
   387 	Hex(*mki);
       
   388 	TSrtpCryptoParams params;
       
   389 	CSRTPMasterKey* masterkey = CSRTPMasterKey::NewLC( *masterKey, *mki );
       
   390     CSRTPMasterSalt* mastersalt = CSRTPMasterSalt::NewLC( *masterSalt );
       
   391     CSRTPCryptoContext* context = CSRTPCryptoContext::NewL(masterkey, mastersalt, params );
       
   392     CleanupStack::Pop( mastersalt );
       
   393     CleanupStack::Pop( masterkey );
       
   394     CleanupStack::PopAndDestroy( mki );
       
   395     CleanupStack::PopAndDestroy( masterSalt );
       
   396     CleanupStack::PopAndDestroy( masterKey ); 
       
   397     CleanupStack::PushL( context );
       
   398     CSRTPSession* srtpSession = CSRTPSession::NewL( iDestination, context, *this );     
       
   399     CleanupStack::Pop( context ); 
       
   400     CleanupStack::PushL( srtpSession );                      
       
   401     CSRTPStreamIn* tempStreamIn =CSRTPStreamIn::NewL( *srtpSession,
       
   402                                       (TUint)1,
       
   403                                       *this );
       
   404     EUNIT_ASSERT(tempStreamIn->SSRC()== 1);
       
   405     delete tempStreamIn;    
       
   406      CleanupStack::PopAndDestroy( srtpSession );                   
       
   407     }
       
   408 
       
   409 void UT_CSRTPStreamIn::UT_CSRTPStreamIn_NewL_3L(  )
       
   410     {
       
   411     HBufC8* masterKey = HBufC8::NewL(KRFC3711_TestMasterKey128bits().Length());
       
   412     CleanupStack::PushL( masterKey );
       
   413     *masterKey = KRFC3711_TestMasterKey128bits;
       
   414 
       
   415     
       
   416     HBufC8* masterSalt =HBufC8::NewL(KRFC3711_TestMasterSalt112bits().Length());
       
   417     CleanupStack::PushL( masterSalt);
       
   418 	*masterSalt = KRFC3711_TestMasterSalt112bits;
       
   419 
       
   420 	
       
   421 	HBufC8* mki =HBufC8::NewL(KTestMKI128Bits().Length());
       
   422     CleanupStack::PushL( mki);
       
   423 	*mki = KRFC3711_TestMasterSalt112bits;
       
   424 	Hex(*mki);
       
   425 	TSrtpCryptoParams params;
       
   426 	CSRTPMasterKey* masterkey = CSRTPMasterKey::NewLC( *masterKey, *mki );
       
   427     CSRTPMasterSalt* mastersalt = CSRTPMasterSalt::NewLC( *masterSalt );
       
   428     CSRTPCryptoContext* context = CSRTPCryptoContext::NewL(masterkey, mastersalt, params );
       
   429     
       
   430     CleanupStack::Pop( mastersalt );
       
   431     CleanupStack::Pop( masterkey );
       
   432     CleanupStack::PopAndDestroy( mki );
       
   433     CleanupStack::PopAndDestroy( masterSalt );
       
   434     CleanupStack::PopAndDestroy( masterKey ); 
       
   435     CleanupStack::PushL( context );
       
   436     CSRTPSession* srtpSession = CSRTPSession::NewL( iDestination, context, *this ); 
       
   437     CleanupStack::Pop( context );
       
   438     CleanupStack::PushL( srtpSession );
       
   439     CSRTPStreamIn* tempStreamIn =CSRTPStreamIn::NewL( *srtpSession);
       
   440     
       
   441     EUNIT_ASSERT(tempStreamIn->GetCryptoContext().Valid()==ETrue); 
       
   442     delete tempStreamIn;   
       
   443     CleanupStack::PopAndDestroy( srtpSession );                   
       
   444     }
       
   445 void UT_CSRTPStreamIn::UT_CSRTPStreamIn_NewL_4L(  )
       
   446     {
       
   447      HBufC8* masterKey = HBufC8::NewL(KRFC3711_TestMasterKey128bits().Length());
       
   448     CleanupStack::PushL( masterKey );
       
   449     *masterKey = KRFC3711_TestMasterKey128bits;
       
   450 
       
   451     
       
   452     HBufC8* masterSalt =HBufC8::NewL(KRFC3711_TestMasterSalt112bits().Length());
       
   453     CleanupStack::PushL( masterSalt);
       
   454 	*masterSalt = KRFC3711_TestMasterSalt112bits;
       
   455 
       
   456 	
       
   457 	HBufC8* mki =HBufC8::NewL(KTestMKI128Bits().Length());
       
   458     CleanupStack::PushL( mki);
       
   459 	*mki = KRFC3711_TestMasterSalt112bits;
       
   460 	Hex(*mki);
       
   461 	TSrtpCryptoParams params;
       
   462 	CSRTPMasterKey* masterkey = CSRTPMasterKey::NewLC( *masterKey, *mki );
       
   463     CSRTPMasterSalt* mastersalt = CSRTPMasterSalt::NewLC( *masterSalt );
       
   464     CSRTPCryptoContext* context = CSRTPCryptoContext::NewL(masterkey, mastersalt, params );
       
   465     
       
   466     CleanupStack::Pop( mastersalt );
       
   467     CleanupStack::Pop( masterkey );
       
   468     CleanupStack::PopAndDestroy( mki );
       
   469     CleanupStack::PopAndDestroy( masterSalt );
       
   470     CleanupStack::PopAndDestroy( masterKey ); 
       
   471     CleanupStack::PushL( context );
       
   472     CSRTPSession* srtpSession = CSRTPSession::NewL( iDestination, context, *this ); 
       
   473     CleanupStack::Pop( context );
       
   474     CleanupStack::PushL( srtpSession );
       
   475     CSRTPStreamIn* tempStreamIn =CSRTPStreamIn::NewL( *srtpSession, *this );
       
   476     
       
   477     EUNIT_ASSERT(tempStreamIn->GetCryptoContext().Valid()==ETrue); 
       
   478     delete tempStreamIn;  
       
   479     CleanupStack::PopAndDestroy( srtpSession );
       
   480     }
       
   481     
       
   482 void UT_CSRTPStreamIn::UT_CSRTPStreamIn_NewL_5L(  )
       
   483     {
       
   484      HBufC8* masterKey = HBufC8::NewL(KRFC3711_TestMasterKey128bits().Length());
       
   485     CleanupStack::PushL( masterKey );
       
   486     *masterKey = KRFC3711_TestMasterKey128bits;
       
   487 
       
   488     
       
   489     HBufC8* masterSalt =HBufC8::NewL(KRFC3711_TestMasterSalt112bits().Length());
       
   490     CleanupStack::PushL( masterSalt);
       
   491 	*masterSalt = KRFC3711_TestMasterSalt112bits;
       
   492 
       
   493 	
       
   494 	HBufC8* mki =HBufC8::NewL(KTestMKI128Bits().Length());
       
   495     CleanupStack::PushL( mki);
       
   496 	*mki = KRFC3711_TestMasterSalt112bits;
       
   497 	Hex(*mki);
       
   498 	TSrtpCryptoParams params;
       
   499 	CSRTPMasterKey* masterkey = CSRTPMasterKey::NewLC( *masterKey, *mki );
       
   500     CSRTPMasterSalt* mastersalt = CSRTPMasterSalt::NewLC( *masterSalt );
       
   501     CSRTPCryptoContext* context = CSRTPCryptoContext::NewL(masterkey, mastersalt, params );
       
   502     
       
   503     CleanupStack::Pop( mastersalt );
       
   504     CleanupStack::Pop( masterkey );
       
   505     CleanupStack::PopAndDestroy( mki );
       
   506     CleanupStack::PopAndDestroy( masterSalt );
       
   507     CleanupStack::PopAndDestroy( masterKey ); 
       
   508     CleanupStack::PushL( context );
       
   509     CSRTPSession* srtpSession = CSRTPSession::NewL( iDestination); 
       
   510     CleanupStack::PushL( srtpSession );
       
   511     CSRTPStreamIn* tempStreamIn =CSRTPStreamIn::NewL( *srtpSession, context, *this );
       
   512     CleanupStack::Pop( srtpSession );
       
   513     CleanupStack::Pop( context );
       
   514     
       
   515     
       
   516     EUNIT_ASSERT(tempStreamIn->GetCryptoContext().Valid()==ETrue); 
       
   517     delete tempStreamIn;  
       
   518     delete srtpSession;                       
       
   519     }
       
   520    
       
   521 void UT_CSRTPStreamIn::UT_CSRTPStreamIn_SetCryptoInL(  )
       
   522 	{
       
   523 	 HBufC8* masterKey = HBufC8::NewL(KRFC3711_TestMasterKey128bits().Length());
       
   524     CleanupStack::PushL( masterKey );
       
   525     *masterKey = KRFC3711_TestMasterKey128bits;
       
   526 
       
   527     
       
   528     HBufC8* masterSalt =HBufC8::NewL(KRFC3711_TestMasterSalt112bits().Length());
       
   529     CleanupStack::PushL( masterSalt);
       
   530 	*masterSalt = KRFC3711_TestMasterSalt112bits;
       
   531 
       
   532 	
       
   533 	HBufC8* mki =HBufC8::NewL(KTestMKI128Bits().Length());
       
   534     CleanupStack::PushL( mki);
       
   535 	*mki = KRFC3711_TestMasterSalt112bits;
       
   536 	Hex(*mki);
       
   537 	TSrtpCryptoParams params;
       
   538 	CSRTPMasterKey* masterkey = CSRTPMasterKey::NewLC( *masterKey, *mki );
       
   539     CSRTPMasterSalt* mastersalt = CSRTPMasterSalt::NewLC( *masterSalt );
       
   540     CSRTPCryptoContext* context = CSRTPCryptoContext::NewL(masterkey, mastersalt, params );
       
   541     
       
   542     CleanupStack::Pop( mastersalt );
       
   543     CleanupStack::Pop( masterkey );
       
   544     CleanupStack::PopAndDestroy( mki );
       
   545     CleanupStack::PopAndDestroy( masterSalt );
       
   546     CleanupStack::PopAndDestroy( masterKey ); 
       
   547     CleanupStack::PushL( context );
       
   548     CSRTPSession* srtpSession = CSRTPSession::NewL( iDestination); 
       
   549     CleanupStack::PushL( srtpSession ); 
       
   550     CSRTPStreamIn* tempStreamIn =CSRTPStreamIn::NewL( *srtpSession, *this );
       
   551     CleanupStack::PushL( tempStreamIn );
       
   552     CSRTPCryptoContext* context2 =NULL;
       
   553     CSRTPCryptoContext* context3 =context;
       
   554     EUNIT_ASSERT_SPECIFIC_LEAVE(tempStreamIn->SetCryptoInL(context2), KErrArgument);
       
   555     tempStreamIn->SetCryptoInL(context);
       
   556     CleanupStack::Pop( tempStreamIn );
       
   557     CleanupStack::Pop( srtpSession );
       
   558     CleanupStack::Pop( context );
       
   559     CleanupStack::PushL( srtpSession );
       
   560     CleanupStack::PushL( tempStreamIn );
       
   561     EUNIT_ASSERT(tempStreamIn->GetCryptoContext().Valid()==ETrue); 
       
   562     //iRekey is True
       
   563     tempStreamIn->iRekey=ETrue;
       
   564     tempStreamIn->SetCryptoInL(context);
       
   565     
       
   566     //with ssrc
       
   567     tempStreamIn->SetSSRC(1);
       
   568      tempStreamIn->SetCryptoInL(context3);
       
   569      
       
   570      CleanupStack::PopAndDestroy( tempStreamIn );
       
   571      CleanupStack::PopAndDestroy( srtpSession );                      
       
   572 	}
       
   573 
       
   574 void UT_CSRTPStreamIn::UT_CSRTPStreamIn_UnprotectSrtpLL(  )
       
   575     {
       
   576     
       
   577     TInt authTagLenInBytes = (iContext->CryptoParams().iSrtpAuthTagLen)/8;
       
   578         
       
   579     TBuf8<32> payload;
       
   580     TBuf8<32> authTag;        
       
   581     TInt ssrc = 500;
       
   582 
       
   583     
       
   584     for (TInt i=0; i<20; i++)
       
   585         {
       
   586         payload.Append(0xAA);            
       
   587         }        
       
   588 
       
   589 	payload.SetLength(20);
       
   590 	
       
   591     authTag.Append(0x6F);
       
   592     authTag.Append(0x35);
       
   593     authTag.Append(0x39);
       
   594     authTag.Append(0x16);
       
   595     authTag.Append(0x8C);
       
   596     authTag.Append(0xBB);
       
   597     authTag.Append(0xAD);
       
   598     authTag.Append(0xF5);
       
   599     authTag.Append(0xFD);
       
   600     authTag.Append(0x4B);
       
   601 
       
   602 	HBufC8* mki =HBufC8::NewL(KTestMKI128Bits().Length());
       
   603     CleanupStack::PushL( mki);
       
   604 	*mki = KTestMKI128Bits;
       
   605 	Hex(*mki);
       
   606 	TInt mkiLength = mki->Length();
       
   607 	
       
   608     const TUint8* payloadPtr = payload.PtrZ();
       
   609     const TUint8* mkiPtr =mki->Ptr();// mki->Des().PtrZ();
       
   610     const TUint8* authTagPtr = authTag.PtrZ();
       
   611     const TUint8* decryptedPayloadPtr = iDecryptedPayload->Des().PtrZ();
       
   612     
       
   613     TPayloadDetails details;    
       
   614 
       
   615     details.seqNr       = KTestSeqNr17;
       
   616 //        details.ssrc        = ssrcPtr;
       
   617     details.padding     = 0;
       
   618     details.numCSRC     = 0;
       
   619     details.fHeaderExtension = EFalse;
       
   620     details.payloadLen  = 20;
       
   621     details.payloadData = payloadPtr;
       
   622     details.MKILen      = mkiLength;
       
   623     details.MKIData     = mkiPtr;
       
   624     details.authTagLen  = authTagLenInBytes;
       
   625     details.authTagData = authTagPtr;    
       
   626     
       
   627       
       
   628     HBufC8* srtpPacket = BuildPacketL(ETrue, details);
       
   629     CleanupStack::PushL(srtpPacket);
       
   630     
       
   631     details.payloadData = decryptedPayloadPtr;
       
   632     
       
   633     HBufC8* refRtpPacket = BuildPacketL(EFalse, details);
       
   634     CleanupStack::PushL(refRtpPacket);
       
   635  
       
   636  	
       
   637     HBufC8* rtpPacket = iStreamIn->UnprotectSrtpL(*srtpPacket);
       
   638     CleanupStack::PushL(rtpPacket);
       
   639     
       
   640     EUNIT_ASSERT( iCryptoHandlerSRTP->iSessionEncrKey->Compare(
       
   641                                     *iRFC3711_SessionEncrKey128bits) == 0);
       
   642     EUNIT_ASSERT( iCryptoHandlerSRTP->iSessionSaltKey->Compare(
       
   643                                     *iRFC3711_SessionSaltKey128bits) == 0);
       
   644     EUNIT_ASSERT( iCryptoHandlerSRTP->iSessionAuthKey->Compare(
       
   645                                     *iRFC3711_SessionAuthKey128bits) == 0);    
       
   646     EUNIT_ASSERT( refRtpPacket->Compare(*rtpPacket) == 0);        
       
   647     
       
   648     EUNIT_ASSERT(iStreamIn->iCurrentRTPState==
       
   649     				MSRTPStreamInContext::ESRTPStreamInNormal);
       
   650     CleanupStack::Pop(3);
       
   651     delete rtpPacket;
       
   652     delete refRtpPacket;
       
   653     delete srtpPacket;
       
   654     CleanupStack::PopAndDestroy(mki);
       
   655     
       
   656     }
       
   657     
       
   658 void UT_CSRTPStreamIn::UT_CSRTPStreamIn_UnprotectSrtpL2L(  )
       
   659     {
       
   660     //Test Late Binding state
       
   661     TInt authTagLenInBytes = iContext->CryptoParams().iSrtpAuthTagLen/8;
       
   662         
       
   663     TBuf8<32> payload;
       
   664     TBuf8<32> authTag;        
       
   665     TInt ssrc = 500;
       
   666 
       
   667     for (TInt i=0; i<20; i++)
       
   668         {
       
   669         payload.Append(0xAA);            
       
   670         }        
       
   671 
       
   672 	payload.SetLength(20);
       
   673 	
       
   674     authTag.Append(0x6F);
       
   675     authTag.Append(0x35);
       
   676     authTag.Append(0x39);
       
   677     authTag.Append(0x16);
       
   678     authTag.Append(0x8C);
       
   679     authTag.Append(0xBB);
       
   680     authTag.Append(0xAD);
       
   681     authTag.Append(0xF5);
       
   682     authTag.Append(0xFD);
       
   683     authTag.Append(0x4B);
       
   684 
       
   685 	HBufC8* mki =HBufC8::NewL(KTestMKI128Bits().Length());
       
   686     CleanupStack::PushL( mki);
       
   687 	*mki = KTestMKI128Bits;
       
   688 	Hex(*mki);
       
   689 	TInt mkiLength = mki->Length();
       
   690 	
       
   691     const TUint8* payloadPtr = payload.PtrZ();
       
   692     const TUint8* mkiPtr =mki->Ptr();// mki->Des().PtrZ();
       
   693     const TUint8* authTagPtr = authTag.PtrZ();
       
   694     const TUint8* decryptedPayloadPtr = iDecryptedPayload->Des().PtrZ();
       
   695     
       
   696     TPayloadDetails details;    
       
   697 
       
   698     details.seqNr       = KTestSeqNr17;
       
   699     details.padding     = 0;
       
   700     details.numCSRC     = 0;
       
   701     details.fHeaderExtension = EFalse;
       
   702     details.payloadLen  = 20;
       
   703     details.payloadData = payloadPtr;
       
   704     details.MKILen      = mkiLength;
       
   705     details.MKIData     = mkiPtr;
       
   706     details.authTagLen  = authTagLenInBytes;
       
   707     details.authTagData = authTagPtr;    
       
   708     
       
   709       
       
   710     HBufC8* srtpPacket = BuildPacketL(ETrue, details);
       
   711     CleanupStack::PushL(srtpPacket);
       
   712     
       
   713     details.payloadData = decryptedPayloadPtr;
       
   714     
       
   715     HBufC8* refRtpPacket = BuildPacketL(EFalse, details);
       
   716     CleanupStack::PushL(refRtpPacket);
       
   717  
       
   718  	
       
   719     HBufC8* rtpPacket = iStreamInLateBD->UnprotectSrtpL(*srtpPacket);
       
   720     CleanupStack::PushL(rtpPacket);
       
   721     
       
   722     EUNIT_ASSERT( iCryptoHandlerSRTP2->iSessionEncrKey->Compare(
       
   723                                     *iRFC3711_SessionEncrKey128bits) == 0);
       
   724     EUNIT_ASSERT( iCryptoHandlerSRTP2->iSessionSaltKey->Compare(
       
   725                                     *iRFC3711_SessionSaltKey128bits) == 0);
       
   726     EUNIT_ASSERT( iCryptoHandlerSRTP2->iSessionAuthKey->Compare(
       
   727                                     *iRFC3711_SessionAuthKey128bits) == 0);    
       
   728    
       
   729     EUNIT_ASSERT(iStreamInLateBD->iCurrentRTPState==
       
   730     				MSRTPStreamInContext::ESRTPStreamInNormal);
       
   731     CleanupStack::Pop(3);
       
   732     delete rtpPacket;
       
   733     delete refRtpPacket;
       
   734     delete srtpPacket;
       
   735     CleanupStack::PopAndDestroy(mki);
       
   736     }    
       
   737  
       
   738 void UT_CSRTPStreamIn::UT_CSRTPStreamIn_UnprotectSrtpL3L(  )
       
   739     {
       
   740     //Test RCC mode
       
   741     HBufC8* masterKey = HBufC8::NewL(KRFC3711_TestMasterKey128bits().Length());
       
   742     CleanupStack::PushL( masterKey );
       
   743     *masterKey = KRFC3711_TestMasterKey128bits;
       
   744 
       
   745     
       
   746     HBufC8* masterSalt =HBufC8::NewL(KRFC3711_TestMasterSalt112bits().Length());
       
   747     CleanupStack::PushL( masterSalt);
       
   748 	*masterSalt = KRFC3711_TestMasterSalt112bits;
       
   749 
       
   750 	
       
   751 	HBufC8* mki1 =HBufC8::NewL(KTestMKI128Bits().Length());
       
   752     CleanupStack::PushL( mki1);
       
   753 	*mki1 = KTestMKI128Bits;
       
   754 	Hex(*mki1);
       
   755 	TSrtpCryptoParams params;
       
   756 	params.iSrtpAuthAlg=EAuthRCCm1;
       
   757 	params.iSrtpAuthTagLen=112;
       
   758 	CSRTPMasterKey* masterkey = CSRTPMasterKey::NewLC( *masterKey, *mki1 );
       
   759     CSRTPMasterSalt* mastersalt = CSRTPMasterSalt::NewLC( *masterSalt );
       
   760     CSRTPCryptoContext* context = CSRTPCryptoContext::NewL(masterkey, mastersalt, params );
       
   761     
       
   762     CleanupStack::Pop( mastersalt );
       
   763     CleanupStack::Pop( masterkey );
       
   764     CleanupStack::PopAndDestroy( mki1 );
       
   765     CleanupStack::PopAndDestroy( masterSalt );
       
   766     CleanupStack::PopAndDestroy( masterKey ); 
       
   767     CleanupStack::PushL( context );
       
   768     //update context
       
   769     iStreamIn->SetCryptoInL(context);
       
   770     CleanupStack::Pop( context );
       
   771     iStreamIn->SetROC(0);
       
   772     
       
   773     TInt authTagLenInBytes = (iContext->CryptoParams().iSrtpAuthTagLen)/8;
       
   774         
       
   775     TBuf8<32> payload;
       
   776     TBuf8<32> authTag;        
       
   777     TInt ssrc = 500;
       
   778     
       
   779     for (TInt i=0; i<20; i++)
       
   780         {
       
   781         payload.Append(0xAA);            
       
   782         }        
       
   783 
       
   784 	payload.SetLength(20);
       
   785 	
       
   786     authTag.Append(0x6F);
       
   787     authTag.Append(0x35);
       
   788     authTag.Append(0x39);
       
   789     authTag.Append(0x16);
       
   790     authTag.Append(0x8C);
       
   791     authTag.Append(0xBB);
       
   792     authTag.Append(0xAD);
       
   793     authTag.Append(0xF5);
       
   794     authTag.Append(0xFD);
       
   795     authTag.Append(0x4B);
       
   796 
       
   797 	HBufC8* mki =HBufC8::NewL(KTestMKI128Bits().Length());
       
   798     CleanupStack::PushL( mki);
       
   799 	*mki = KTestMKI128Bits;
       
   800 	Hex(*mki);
       
   801 	TInt mkiLength = mki->Length();
       
   802 	
       
   803     const TUint8* payloadPtr = payload.PtrZ();
       
   804     const TUint8* mkiPtr =mki->Ptr();
       
   805     const TUint8* authTagPtr = authTag.PtrZ();
       
   806     const TUint8* decryptedPayloadPtr = iDecryptedPayload->Des().PtrZ();
       
   807     
       
   808     TPayloadDetails details;    
       
   809 
       
   810     details.seqNr       = KTestSeqNr17;
       
   811     details.padding     = 0;
       
   812     details.numCSRC     = 0;
       
   813     details.fHeaderExtension = EFalse;
       
   814     details.payloadLen  = 20;
       
   815     details.payloadData = payloadPtr;
       
   816     details.MKILen      = mkiLength;
       
   817     details.MKIData     = mkiPtr;
       
   818     details.authTagLen  = authTagLenInBytes+4;
       
   819     details.authTagData = authTagPtr;    
       
   820     
       
   821       
       
   822     HBufC8* srtpPacket = BuildPacketL(ETrue, details);
       
   823     CleanupStack::PushL(srtpPacket);
       
   824     
       
   825     details.payloadData = decryptedPayloadPtr;
       
   826     
       
   827     HBufC8* refRtpPacket = BuildPacketL(EFalse, details);
       
   828     CleanupStack::PushL(refRtpPacket);
       
   829  
       
   830  	
       
   831     HBufC8* rtpPacket = iStreamIn->UnprotectSrtpL(*srtpPacket);
       
   832     CleanupStack::PushL(rtpPacket);
       
   833     
       
   834     EUNIT_ASSERT( iCryptoHandlerSRTP->iSessionEncrKey->Compare(
       
   835                                     *iRFC3711_SessionEncrKey128bits) == 0);
       
   836     EUNIT_ASSERT( iCryptoHandlerSRTP->iSessionSaltKey->Compare(
       
   837                                     *iRFC3711_SessionSaltKey128bits) == 0);
       
   838     EUNIT_ASSERT( iCryptoHandlerSRTP->iSessionAuthKey->Compare(
       
   839                                     *iRFC3711_SessionAuthKey128bits) == 0);    
       
   840     EUNIT_ASSERT( refRtpPacket->Compare(*rtpPacket) == 0);        
       
   841     
       
   842     EUNIT_ASSERT(iStreamIn->iCurrentRTPState==
       
   843     				MSRTPStreamInContext::ESRTPStreamInNormal);
       
   844     CleanupStack::Pop(3);
       
   845     delete rtpPacket;
       
   846     delete refRtpPacket;
       
   847     delete srtpPacket;
       
   848     CleanupStack::PopAndDestroy(mki);
       
   849     }    
       
   850     
       
   851 
       
   852 void UT_CSRTPStreamIn::UT_CSRTPStreamIn_UnprotectSrtcpLL(  )
       
   853     {
       
   854     HBufC8* encSrtcpPacket =HBufC8::NewLC(KRTCPPacket().Length());
       
   855 	*encSrtcpPacket=KRTCPPacket;
       
   856     Hex(*encSrtcpPacket);
       
   857     TInt len= KRTCPPacket().Length();
       
   858 	encSrtcpPacket->Des().SetLength(len/2);
       
   859 
       
   860     HBufC8* rtcpPacket =iStreamIn->UnprotectSrtcpL(*encSrtcpPacket);
       
   861     CleanupStack::PopAndDestroy(encSrtcpPacket);
       
   862     CleanupStack::PushL(rtcpPacket);
       
   863     EUNIT_ASSERT( iCryptoHandlerSRTCP->iSessionEncrKey->Compare(
       
   864                                     *iRFC3711_RtcpEncrKey128bits) == 0);
       
   865     EUNIT_ASSERT( iCryptoHandlerSRTCP->iSessionSaltKey->Compare(
       
   866                                     *iRFC3711_RtcpSaltKey128bits) == 0);
       
   867     EUNIT_ASSERT( iCryptoHandlerSRTCP->iSessionAuthKey->Compare(
       
   868                                     *iRFC3711_RtcpAuthKey128bits) == 0);   
       
   869     EUNIT_ASSERT(iStreamIn->iCurrentRTCPState==
       
   870     				MSRTPStreamInContext::ESRTPStreamInNormal);                                 
       
   871     CleanupStack::PopAndDestroy(rtcpPacket);                                
       
   872     
       
   873     }
       
   874     
       
   875 void UT_CSRTPStreamIn::UT_CSRTPStreamIn_UnprotectSrtcpL2L(  )
       
   876     {
       
   877     HBufC8* encSrtcpPacket =HBufC8::NewLC(KRTCPPacket().Length());
       
   878 	*encSrtcpPacket=KRTCPPacket;
       
   879     Hex(*encSrtcpPacket);
       
   880     TInt len= KRTCPPacket().Length();
       
   881 	encSrtcpPacket->Des().SetLength(len/2);
       
   882 
       
   883     HBufC8* rtcpPacket =iStreamInLateBD->UnprotectSrtcpL(*encSrtcpPacket);
       
   884     CleanupStack::PopAndDestroy(encSrtcpPacket);
       
   885     CleanupStack::PushL(rtcpPacket);
       
   886     EUNIT_ASSERT( iCryptoHandlerSRTCP2->iSessionEncrKey->Compare(
       
   887                                     *iRFC3711_RtcpEncrKey128bits) == 0);
       
   888     EUNIT_ASSERT( iCryptoHandlerSRTCP2->iSessionSaltKey->Compare(
       
   889                                     *iRFC3711_RtcpSaltKey128bits) == 0);
       
   890     EUNIT_ASSERT( iCryptoHandlerSRTCP2->iSessionAuthKey->Compare(
       
   891                                     *iRFC3711_RtcpAuthKey128bits) == 0);   
       
   892     EUNIT_ASSERT(iStreamInLateBD->iCurrentRTCPState==
       
   893     				MSRTPStreamInContext::ESRTPStreamInNormal);                                 
       
   894     CleanupStack::PopAndDestroy(rtcpPacket);                                
       
   895     
       
   896     }    
       
   897 void UT_CSRTPStreamIn::UT_CSRTPStreamIn_StateTestsL()
       
   898 	{
       
   899 	EUNIT_ASSERT(iStreamIn->iCurrentRTPState==
       
   900     				MSRTPStreamInContext::ESRTPStreamInUninitialized); 
       
   901 	UT_CSRTPStreamIn_UnprotectSrtpLL(  );
       
   902 	EUNIT_ASSERT(iStreamIn->iCurrentRTPState==
       
   903     				MSRTPStreamInContext::ESRTPStreamInNormal);
       
   904     EUNIT_ASSERT(iStreamIn->iCurrentRTCPState==
       
   905     				MSRTPStreamInContext::ESRTPStreamInUninitialized); 				
       
   906 	
       
   907 	UT_CSRTPStreamIn_UnprotectSrtcpLL(  );
       
   908 	EUNIT_ASSERT(iStreamIn->iCurrentRTPState==
       
   909     				MSRTPStreamInContext::ESRTPStreamInNormal);
       
   910 	//UT_CSRTPStreamIn_UnprotectSrtpLL(  );
       
   911 	//change sequence number
       
   912 	
       
   913 	 TInt authTagLenInBytes = iContext->CryptoParams().iSrtpAuthTagLen/8;
       
   914         
       
   915     TBuf8<32> payload;
       
   916     TBuf8<32> authTag;        
       
   917     TInt ssrc = 500;
       
   918 //        TUint8* ssrcPtr = static_cast<TUint8 *>(&ssrc);
       
   919 
       
   920     
       
   921     for (TInt i=0; i<20; i++)
       
   922         {
       
   923         payload.Append(0xAA);            
       
   924         }        
       
   925 
       
   926 	payload.SetLength(20);
       
   927 	//898C05B99F51A602AEF8495A2987EB45A0FB5995
       
   928     authTag.Append(0x89);
       
   929     authTag.Append(0x8C);
       
   930     authTag.Append(0x05);
       
   931     authTag.Append(0xB9);
       
   932     authTag.Append(0x9F);
       
   933     authTag.Append(0x51);
       
   934     authTag.Append(0xA6);
       
   935     authTag.Append(0x02);
       
   936     authTag.Append(0xAE);
       
   937     authTag.Append(0xF8);
       
   938 
       
   939 	HBufC8* mki =HBufC8::NewL(KTestMKI128Bits().Length());
       
   940     CleanupStack::PushL( mki);
       
   941 	*mki = KTestMKI128Bits;
       
   942 	Hex(*mki);
       
   943 	TInt mkiLength = mki->Length();
       
   944 	
       
   945     const TUint8* payloadPtr = payload.PtrZ();
       
   946     const TUint8* mkiPtr =mki->Ptr();// mki->Des().PtrZ();
       
   947     const TUint8* authTagPtr = authTag.PtrZ();
       
   948     const TUint8* decryptedPayloadPtr = iDecryptedPayload->Des().PtrZ();
       
   949     
       
   950     TPayloadDetails details;    
       
   951 
       
   952     details.seqNr       = KTestSeqNr18;
       
   953 //        details.ssrc        = ssrcPtr;
       
   954     details.padding     = 0;
       
   955     details.numCSRC     = 0;
       
   956     details.fHeaderExtension = EFalse;
       
   957     details.payloadLen  = 20;
       
   958     details.payloadData = payloadPtr;
       
   959     details.MKILen      = mkiLength;
       
   960     details.MKIData     = mkiPtr;
       
   961     details.authTagLen  = authTagLenInBytes;
       
   962     details.authTagData = authTagPtr;    
       
   963     
       
   964       
       
   965     HBufC8* srtpPacket = BuildPacketL(ETrue, details);
       
   966     CleanupStack::PushL(srtpPacket);
       
   967     
       
   968     details.payloadData = decryptedPayloadPtr;
       
   969     
       
   970     HBufC8* refRtpPacket = BuildPacketL(EFalse, details);
       
   971     CleanupStack::PushL(refRtpPacket);
       
   972  
       
   973  	
       
   974     HBufC8* rtpPacket = iStreamIn->UnprotectSrtpL(*srtpPacket);
       
   975     CleanupStack::PushL(rtpPacket);
       
   976     
       
   977     EUNIT_ASSERT( iCryptoHandlerSRTP->iSessionEncrKey->Compare(
       
   978                                     *iRFC3711_SessionEncrKey128bits) == 0);
       
   979     EUNIT_ASSERT( iCryptoHandlerSRTP->iSessionSaltKey->Compare(
       
   980                                     *iRFC3711_SessionSaltKey128bits) == 0);
       
   981     EUNIT_ASSERT( iCryptoHandlerSRTP->iSessionAuthKey->Compare(
       
   982                                     *iRFC3711_SessionAuthKey128bits) == 0);    
       
   983         
       
   984     
       
   985     EUNIT_ASSERT(iStreamIn->iCurrentRTPState==
       
   986     				MSRTPStreamInContext::ESRTPStreamInNormal);
       
   987     CleanupStack::Pop(3);
       
   988     delete rtpPacket;
       
   989     delete refRtpPacket;
       
   990     delete srtpPacket;
       
   991     CleanupStack::PopAndDestroy(mki);
       
   992 	EUNIT_ASSERT(iStreamIn->iCurrentRTCPState==
       
   993     				MSRTPStreamInContext::ESRTPStreamInNormal);  
       
   994     }
       
   995     
       
   996 void UT_CSRTPStreamIn::UT_CSRTPStreamIn_StateTests2L()
       
   997 	{
       
   998 	EUNIT_ASSERT(iStreamIn->iCurrentRTPState==
       
   999     				MSRTPStreamInContext::ESRTPStreamInUninitialized); 
       
  1000 	
       
  1001 	
       
  1002 	UT_CSRTPStreamIn_UnprotectSrtpLL(  );
       
  1003 	
       
  1004 	EUNIT_ASSERT(iStreamIn->iCurrentRTPState==
       
  1005     				MSRTPStreamInContext::ESRTPStreamInNormal);
       
  1006     EUNIT_ASSERT(iStreamIn->iCurrentRTCPState==
       
  1007     				MSRTPStreamInContext::ESRTPStreamInUninitialized); 				
       
  1008 	
       
  1009 	UT_CSRTPStreamIn_UnprotectSrtcpLL(  );
       
  1010 	EUNIT_ASSERT(iStreamIn->iCurrentRTCPState==
       
  1011     				MSRTPStreamInContext::ESRTPStreamInNormal);	
       
  1012     				
       
  1013     HBufC8* encSrtcpPacket =HBufC8::NewLC(KSRTCPPacket2().Length());
       
  1014 	*encSrtcpPacket=KSRTCPPacket2();
       
  1015     Hex(*encSrtcpPacket);
       
  1016     TInt len= KSRTCPPacket2().Length();
       
  1017 	encSrtcpPacket->Des().SetLength(len/2);
       
  1018 	//The following will leave because of the authentication tag will not match
       
  1019     HBufC8* rtcpPacket =iStreamIn->UnprotectSrtcpL(*encSrtcpPacket);
       
  1020     CleanupStack::PopAndDestroy(encSrtcpPacket);
       
  1021     CleanupStack::PushL(rtcpPacket);
       
  1022                      
       
  1023     CleanupStack::PopAndDestroy(rtcpPacket);                                
       
  1024     EUNIT_ASSERT(iStreamIn->iCurrentRTCPState==
       
  1025     				MSRTPStreamInContext::ESRTPStreamInNormal);					
       
  1026 	}
       
  1027 //  TEST TABLE
       
  1028 
       
  1029 EUNIT_BEGIN_TEST_TABLE( 
       
  1030     UT_CSRTPStreamIn,
       
  1031     "CSRTPStreamIn",
       
  1032     "UNIT" )
       
  1033 
       
  1034 EUNIT_TEST(
       
  1035     "NewL1 - test ",
       
  1036     "CSRTPStreamIn",
       
  1037     "NewL1",
       
  1038     "FUNCTIONALITY",
       
  1039     SetupL, UT_CSRTPStreamIn_NewL_1L, Teardown)
       
  1040 
       
  1041 EUNIT_TEST(
       
  1042     "NewL2 - test ",
       
  1043     "CSRTPStreamIn",
       
  1044     "NewL2",
       
  1045     "FUNCTIONALITY",
       
  1046     SetupL, UT_CSRTPStreamIn_NewL_2L, Teardown)
       
  1047 
       
  1048 EUNIT_TEST(
       
  1049     "NewL3 - test ",
       
  1050     "CSRTPStreamIn",
       
  1051     "NewL3",
       
  1052     "FUNCTIONALITY",
       
  1053     SetupL, UT_CSRTPStreamIn_NewL_3L, Teardown)
       
  1054     
       
  1055 EUNIT_TEST(
       
  1056     "NewL4 - test ",
       
  1057     "CSRTPStreamIn",
       
  1058     "NewL4",
       
  1059     "FUNCTIONALITY",
       
  1060     SetupL, UT_CSRTPStreamIn_NewL_4L, Teardown)    
       
  1061 
       
  1062 EUNIT_TEST(
       
  1063     "NewL5 - test ",
       
  1064     "CSRTPStreamIn",
       
  1065     "NewL5",
       
  1066     "FUNCTIONALITY",
       
  1067     SetupL, UT_CSRTPStreamIn_NewL_5L, Teardown)    
       
  1068 EUNIT_TEST(
       
  1069     "UnprotectSrtpL - test ",
       
  1070     "CSRTPStreamIn",
       
  1071     "UnprotectSrtpL",
       
  1072     "FUNCTIONALITY",
       
  1073     SetupL, UT_CSRTPStreamIn_UnprotectSrtpLL, Teardown)
       
  1074 
       
  1075 EUNIT_TEST(
       
  1076     "UnprotectSrtcpL - test ",
       
  1077     "CSRTPStreamIn",
       
  1078     "UnprotectSrtcpL",
       
  1079     "FUNCTIONALITY",
       
  1080     SetupL, UT_CSRTPStreamIn_UnprotectSrtcpLL, Teardown)
       
  1081 
       
  1082 EUNIT_TEST(
       
  1083     "UnprotectSrtpLateBD - test ",
       
  1084     "CSRTPStreamIn",
       
  1085     "UnprotectSrtpL Late Binding",
       
  1086     "FUNCTIONALITY",
       
  1087     SetupL, UT_CSRTPStreamIn_UnprotectSrtpL2L, Teardown)
       
  1088 
       
  1089 EUNIT_TEST(
       
  1090     "UnprotectSrtpL3L-RCC mode",
       
  1091     "CSRTPStreamIn",
       
  1092     "UnprotectSrtpL RCC",
       
  1093     "FUNCTIONALITY",
       
  1094     SetupL, UT_CSRTPStreamIn_UnprotectSrtpL3L, Teardown)    
       
  1095 
       
  1096 EUNIT_TEST(
       
  1097     "UnprotectSrtcpLateBind - test ",
       
  1098     "CSRTPStreamIn",
       
  1099     "UnprotectSrtcpL Late Binding",
       
  1100     "FUNCTIONALITY",
       
  1101     SetupL, UT_CSRTPStreamIn_UnprotectSrtcpL2L, Teardown)
       
  1102 EUNIT_TEST(
       
  1103     "State Tests ",
       
  1104     "CSRTPStreamIn",
       
  1105     "State Tests for SRTP and SRTCP",
       
  1106     "FUNCTIONALITY",
       
  1107     SetupL, UT_CSRTPStreamIn_StateTestsL, Teardown)
       
  1108 EUNIT_TEST(
       
  1109     "State Tests2 ",
       
  1110     "CSRTPStreamIn",
       
  1111     "State Tests for SRTP and SRTCP Noraml State",
       
  1112     "FUNCTIONALITY",
       
  1113     SetupL, UT_CSRTPStreamIn_StateTests2L, Teardown)
       
  1114 
       
  1115 EUNIT_TEST(
       
  1116     "SetCryptoIn",
       
  1117     "CSRTPStreamIn",
       
  1118     "SetCryptoIn",
       
  1119     "FUNCTIONALITY",
       
  1120     SetupL, UT_CSRTPStreamIn_SetCryptoInL, Teardown)    
       
  1121 EUNIT_END_TEST_TABLE
       
  1122 
       
  1123 //  END OF FILE