rtp/srtpstack/tsrc/ut_srtpstack/src/UT_CSRTPMasterKey.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:27:36 +0100
branchRCL_3
changeset 44 0dcb073356a5
parent 43 b5e99d8877c7
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2004 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:  
*
*/




//  CLASS HEADER
#include "UT_CSRTPMasterKey.h"

//  EXTERNAL INCLUDES
#include <digia/eunit/eunitmacros.h>


//  INTERNAL INCLUDES
#include "srtpmasterkey.h"
#include "srtputils.h"
#include "srtpdef.h"

_LIT8(KTestKey128bits,              "11223344556677889900AABBCCDDEEFF");
_LIT8(KTestMKI128Bits,      "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
// CONSTRUCTION
UT_CSRTPMasterKey* UT_CSRTPMasterKey::NewL()
    {
    UT_CSRTPMasterKey* self = UT_CSRTPMasterKey::NewLC(); 
    CleanupStack::Pop();

    return self;
    }

UT_CSRTPMasterKey* UT_CSRTPMasterKey::NewLC()
    {
    UT_CSRTPMasterKey* self = new( ELeave ) UT_CSRTPMasterKey();
    CleanupStack::PushL( self );

	self->ConstructL(); 

    return self;
    }

// Destructor (virtual by CBase)
UT_CSRTPMasterKey::~UT_CSRTPMasterKey()
    {
    }
void UT_CSRTPMasterKey::Hex(HBufC8& aString)
{
    TPtr8 ptr=aString.Des();
    TInt length = aString.Length();
    if (aString.Length()%2)
        {
        ptr.SetLength(0);
        return;
        }
    TInt i;
    for (i=0;i<aString.Length();i+=2)
        {
        TUint8 tmp;
        tmp=(TUint8)(aString[i]-(aString[i]>'9'?('A'-10):'0'));
        tmp*=16;
        tmp|=(TUint8)(aString[i+1]-(aString[i+1]>'9'?('A'-10):'0'));
        ptr[i/2]=tmp;
        }
    ptr.SetLength(aString.Length()/2);

}
// Default constructor
UT_CSRTPMasterKey::UT_CSRTPMasterKey() 
    {
    }

// Second phase construct
void UT_CSRTPMasterKey::ConstructL()
    {
    // The ConstructL from the base class CEUnitTestSuiteClass must be called.
    // It generates the test case table.
    CEUnitTestSuiteClass::ConstructL();
    }

//  METHODS

void UT_CSRTPMasterKey::SetupL(  )
    {
    
    
    HBufC8* masterKey = HBufC8::NewL(KTestKey128bits().Length());
    CleanupStack::PushL( masterKey );
    *masterKey = KTestKey128bits;

    
	
	HBufC8* mki =HBufC8::NewL(KTestMKI128Bits().Length());
    CleanupStack::PushL( mki);
	*mki = KTestMKI128Bits;
	Hex(*mki);
	
	iMasterKey = CSRTPMasterKey::NewL( *masterKey, *mki,
					KSRTPDefSessionEncryptionKeyLength, 
                    KSRTPDefSessionAuthenticationKeyLength/*, 
                    KSRTPDefaultKeyDerivationRate*/) ;
    

	iMasterKey2= CSRTPMasterKey::NewL( *masterKey, *mki,
						100, 
						KSRTPDefSessionAuthenticationKeyLength/*, 
                    	KSRTPDefaultKeyDerivationRate */),
   iMasterKey3= CSRTPMasterKey::NewL( *masterKey, *mki, 
   					KSRTPDefSessionEncryptionKeyLength,
   					100/*, 
                    KSRTPDefaultKeyDerivationRate*/ ),
   iMasterKey4= CSRTPMasterKey::NewL( *masterKey, *mki,
   					KSRTPDefSessionEncryptionKeyLength, 
                    KSRTPDefSessionAuthenticationKeyLength
                    /*22*/);
   iMasterKey5= CSRTPMasterKey::NewL( *masterKey, *mki);
    CleanupStack::PopAndDestroy( mki );
    
    CleanupStack::PopAndDestroy( masterKey ); 
 
        
    
    //    initialize key 
    iTestKey128bits.Copy(KTestKey128bits);
    TSRTPUtils::DeHex(iTestKey128bits, iTestKey128bits_dehexed); 
    } 

void UT_CSRTPMasterKey::Teardown(  )
    {
	delete iMasterKey;
	delete iMasterKey2;
	delete iMasterKey3;
	delete iMasterKey4;
	delete iMasterKey5;
	
	iTestKey128bits.Zero();
    iTestKey128bits_dehexed.Zero();    
    }

void UT_CSRTPMasterKey::UT_CSRTPMasterKey_SRTPMasterKeyL(  )
    {
    
    const TBuf8<32> masterKey = iMasterKey->MasterKey();
    EUNIT_ASSERT( masterKey.Compare(iTestKey128bits_dehexed) == 0);          
    
    }
    
void UT_CSRTPMasterKey::UT_CSRTPMasterKey_ConstructLL(  )
    {
    
   	HBufC8* masterKey = HBufC8::NewL(KTestKey128bits().Length());
    CleanupStack::PushL( masterKey );
    *masterKey = KTestKey128bits;
	Hex(*masterKey);
    
	
	HBufC8* mki =HBufC8::NewL(KTestMKI128Bits().Length());
    CleanupStack::PushL( mki);
	*mki = KTestMKI128Bits;
	Hex(*mki);
	
	CSRTPMasterKey* masterKeylength16 = CSRTPMasterKey::NewL( *masterKey, *mki,
					KSRTPDefSessionEncryptionKeyLength, 
                    KSRTPDefSessionAuthenticationKeyLength) ;
    CleanupStack::PopAndDestroy( mki );
    
    CleanupStack::PopAndDestroy( masterKey ); 
 	
    EUNIT_ASSERT( masterKeylength16->MasterKey()==iTestKey128bits_dehexed);   
 	delete masterKeylength16;       
    
    }    

void UT_CSRTPMasterKey::UT_CSRTPMasterKey_MasterKeyL(  )
    {   
    const TBuf8<32> masterKey = iMasterKey->MasterKey();
    EUNIT_ASSERT( masterKey.Compare(iTestKey128bits_dehexed) == 0);      
    }

void UT_CSRTPMasterKey::UT_CSRTPMasterKey_MKIL(  )
    {
    TBuf8<32>  MKI2;    
    for (TInt i = 0; i<16 ; i++)        
        {
    	MKI2.Append(0xAA);
        }
    EUNIT_ASSERT( MKI2.Compare(iMasterKey->MKI()) == 0);

    }

void UT_CSRTPMasterKey::UT_CSRTPMasterKey_EncrKeyLengthL(  )
    {
    EUNIT_ASSERT( iMasterKey->EncrKeyLength() == 128 );    
    }

void UT_CSRTPMasterKey::UT_CSRTPMasterKey_AuthKeyLengthL(  )
    {
    EUNIT_ASSERT( iMasterKey->AuthKeyLength() == 160 );    
    }


void UT_CSRTPMasterKey::UT_CSRTPMasterKey_ValidL(  )
    {
    //this one should pass
    EUNIT_ASSERT( iMasterKey->Valid());    
    //invalid bit length of the encryption key
    EUNIT_ASSERT(! iMasterKey2->Valid());    
    //invalid bit length of the authentication key
    EUNIT_ASSERT(! iMasterKey3->Valid());        
    //invalid key derivation rate
    EUNIT_ASSERT(iMasterKey4->Valid());    
    // test constructing with default values
    EUNIT_ASSERT(iMasterKey5->Valid());    
    }

void UT_CSRTPMasterKey::TestEqualL(  )
	{
	HBufC8* mki =HBufC8::NewL(KTestMKI128Bits().Length());
    CleanupStack::PushL( mki);
	*mki = KTestMKI128Bits;
	Hex(*mki);
	const CSRTPMasterKey& tempMasterKey=iMasterKey2->operator=(*iMasterKey2);
	EUNIT_ASSERT(tempMasterKey.MKI()==*mki);
	
	CleanupStack::PopAndDestroy(mki);
	}
//  TEST TABLE

EUNIT_BEGIN_TEST_TABLE( 
    UT_CSRTPMasterKey,
    "CSRTPMasterKey",
    "UNIT" )

EUNIT_TEST(
    "CSRTPMasterKey - test ",
    "CSRTPMasterKey",
    "CSRTPMasterKey",
    "FUNCTIONALITY",
    SetupL, UT_CSRTPMasterKey_SRTPMasterKeyL, Teardown)

EUNIT_TEST(
    "MasterKey - test ",
    "CSRTPMasterKey",
    "MasterKey",
    "FUNCTIONALITY",
    SetupL, UT_CSRTPMasterKey_MasterKeyL, Teardown)

EUNIT_TEST(
    "MKI - test ",
    "CSRTPMasterKey",
    "MKI",
    "FUNCTIONALITY",
    SetupL, UT_CSRTPMasterKey_MKIL, Teardown)

EUNIT_TEST(
    "EncrKeyLength - test ",
    "CSRTPMasterKey",
    "EncrKeyLength",
    "FUNCTIONALITY",
    SetupL, UT_CSRTPMasterKey_EncrKeyLengthL, Teardown)

EUNIT_TEST(
    "AuthKeyLength - test ",
    "CSRTPMasterKey",
    "AuthKeyLength",
    "FUNCTIONALITY",
    SetupL, UT_CSRTPMasterKey_AuthKeyLengthL, Teardown)



EUNIT_TEST(
    "Valid - test ",
    "CSRTPMasterKey",
    "Valid",
    "FUNCTIONALITY",
    SetupL, UT_CSRTPMasterKey_ValidL, Teardown)
EUNIT_TEST(
    "Test = ",
    "CSRTPMasterKey",
    "Test Operator equal",
    "FUNCTIONALITY",
    SetupL, TestEqualL, Teardown)
EUNIT_TEST(
    "Test Construct",
    "CSRTPMasterKey",
    "Test contruct keys with different length",
    "FUNCTIONALITY",
    SetupL, UT_CSRTPMasterKey_ConstructLL, Teardown)
 

EUNIT_END_TEST_TABLE

//  END OF FILE