rtp/srtpstack/tsrc/ut_srtpstack/src/UT_SRTPUtils.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 15:32:57 +0300
branchRCL_3
changeset 19 b5e99d8877c7
parent 0 307788aac0a8
permissions -rw-r--r--
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_SRTPUtils.h"

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


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

_LIT8(KRFCTestSalt112bits,              "0EC675AD498AFEEBB6960B3AABE6");
_LIT8(KSRTP_RFC112bitSessionEncrKey,    "0EC675AD498AFEEBB6960B3AABE6");
_LIT8(KSRTP_RFC112bitSessionAuthKey,    "0EC675AD498AFEEAB6960B3AABE6");
_LIT8(KSRTP_RFC112bitSessionSaltKey,    "0EC675AD498AFEE9B6960B3AABE6");
_LIT8(KSRTCP_RFC112bitSessionEncrKey,   "0EC675AD498AFEEBB6950B3AABE6");
_LIT8(KSRTCP_RFC112bitSessionAuthKey,   "0EC675AD498AFEEBB6920B3AABE6");
_LIT8(KSRTCP_RFC112bitSessionSaltKey,   "0EC675AD498AFEEBB6930B3AABE6");
_LIT8(KRFC3711_PaddedSaltX128bits,      "0EC675AD498AFEE9B6960B3AABE60000");
_LIT8(KTest128BitIV,                    "0EC675ADB67501164969F4C554190000");



// CONSTRUCTION
UT_SRTPUtils* UT_SRTPUtils::NewL()
    {
    UT_SRTPUtils* self = UT_SRTPUtils::NewLC(); 
    CleanupStack::Pop();

    return self;
    }

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

	self->ConstructL(); 

    return self;
    }

// Destructor (virtual by CBase)
UT_SRTPUtils::~UT_SRTPUtils()
    {
    }

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

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

//  METHODS



void UT_SRTPUtils::SetupL(  )
    {    
    // initialize 128 bit padded salt X value
    iRFC3711_PaddedSaltX128bits.Copy(KRFC3711_PaddedSaltX128bits);
    TSRTPUtils::DeHex(iRFC3711_PaddedSaltX128bits, iRFC3711_PaddedSaltX128bits_dehexed); 
       
    // test 128 bit IV (based on RFC session salt value)
    iTest128BitIV.Copy(KTest128BitIV);
    TSRTPUtils::DeHex(iTest128BitIV, iTest128BitIV_dehexed);     
       
    // initialize salting key (from RFC)
    iRFCTestSalt112bits.Copy(KRFCTestSalt112bits);
    TSRTPUtils::DeHex(iRFCTestSalt112bits, iRFCTestSalt112bits_dehexed); 

    // initialize derived SRTP session encr key (from RFC)
    iSRTP_RFC112bitSessionEncrKey.Copy(KSRTP_RFC112bitSessionEncrKey);
    TSRTPUtils::DeHex(iSRTP_RFC112bitSessionEncrKey, iSRTP_RFC112bitSessionEncrKey_dehexed);         
    // initialize derived SRTP session auth key (from RFC)
    iSRTP_RFC112bitSessionAuthKey.Copy(KSRTP_RFC112bitSessionAuthKey);
    TSRTPUtils::DeHex(iSRTP_RFC112bitSessionAuthKey, iSRTP_RFC112bitSessionAuthKey_dehexed); 
    // initialize derived SRTP session salting key (from RFC)
    iSRTP_RFC112bitSessionSaltKey.Copy(KSRTP_RFC112bitSessionSaltKey);
    TSRTPUtils::DeHex(iSRTP_RFC112bitSessionSaltKey, iSRTP_RFC112bitSessionSaltKey_dehexed); 

    // initialize derived SRTCP session encr key (from RFC)
    iSRTCP_RFC112bitSessionEncrKey.Copy(KSRTCP_RFC112bitSessionEncrKey);
    TSRTPUtils::DeHex(iSRTCP_RFC112bitSessionEncrKey, iSRTCP_RFC112bitSessionEncrKey_dehexed);         
    // initialize derived SRTCP session auth key (from RFC)
    iSRTCP_RFC112bitSessionAuthKey.Copy(KSRTCP_RFC112bitSessionAuthKey);
    TSRTPUtils::DeHex(iSRTCP_RFC112bitSessionAuthKey, iSRTCP_RFC112bitSessionAuthKey_dehexed); 
    // initialize derived SRTCP session salting key (from RFC)
    iSRTCP_RFC112bitSessionSaltKey.Copy(KSRTCP_RFC112bitSessionSaltKey);
    TSRTPUtils::DeHex(iSRTCP_RFC112bitSessionSaltKey, iSRTCP_RFC112bitSessionSaltKey_dehexed); 

    } 

void UT_SRTPUtils::Teardown(  )
    {
    iResult.Zero();        
    iRFCTestSalt112bits.Zero();
    iRFCTestSalt112bits_dehexed.Zero();
    iRFC_TestSalt_80bits.Zero();        
        
    iRFC3711_PaddedSaltX128bits.Zero();
    iRFC3711_PaddedSaltX128bits_dehexed.Zero();
    iTest128BitIV.Zero();
    iTest128BitIV_dehexed.Zero();
                
        // SRTP test data
    iSRTP_RFC112bitSessionEncrKey.Zero();
    iSRTP_RFC112bitSessionEncrKey_dehexed.Zero();
    iSRTP_RFC112bitSessionAuthKey.Zero();
    iSRTP_RFC112bitSessionAuthKey_dehexed.Zero();
    iSRTP_RFC112bitSessionSaltKey.Zero();
    iSRTP_RFC112bitSessionSaltKey_dehexed.Zero();
    
    
     iSRTCP_RFC112bitSessionEncrKey.Zero();
     iSRTCP_RFC112bitSessionEncrKey_dehexed.Zero();
     iSRTCP_RFC112bitSessionAuthKey.Zero();
     iSRTCP_RFC112bitSessionAuthKey_dehexed.Zero();
     iSRTCP_RFC112bitSessionSaltKey.Zero();
     iSRTCP_RFC112bitSessionSaltKey_dehexed.Zero();
    }


void UT_SRTPUtils::UT_GetIVFirstTermL(  )
    {

    TBuf8<32> result;    
    TSRTPUtils::GetIVFirstTerm(result, iSRTP_RFC112bitSessionSaltKey_dehexed);
    
    EUNIT_ASSERT( result.Compare(iRFC3711_PaddedSaltX128bits_dehexed) == 0);
    }


void UT_SRTPUtils::UT_GetIVSecondTermL(  )
    {
    TBuf8<32> result;    
    TBuf8<16> paddedSSRC;

    paddedSSRC.Append(0x00);
    paddedSSRC.Append(0x00);
    paddedSSRC.Append(0x00);
    paddedSSRC.Append(0x00);
    paddedSSRC.Append(0xFF);
    paddedSSRC.Append(0xFF);
    paddedSSRC.Append(0xFF);
    paddedSSRC.Append(0xFF);
    paddedSSRC.Append(0x00);
    paddedSSRC.Append(0x00);
    paddedSSRC.Append(0x00);
    paddedSSRC.Append(0x00);
    paddedSSRC.Append(0x00);
    paddedSSRC.Append(0x00);
    paddedSSRC.Append(0x00);
    paddedSSRC.Append(0x00);

    TSRTPUtils::GetIVSecondTerm(result, 0xFFFFFFFF);
        
    EUNIT_ASSERT( result.Compare(paddedSSRC) == 0);
    }

void UT_SRTPUtils::UT_GetIVThirdTermL(  )
    {
    TBuf8<32> result;    
    TBuf8<16> paddedPacketIndex;

    paddedPacketIndex.Append(0x00);
    paddedPacketIndex.Append(0x00);
    paddedPacketIndex.Append(0x00);
    paddedPacketIndex.Append(0x00);
    paddedPacketIndex.Append(0x00);
    paddedPacketIndex.Append(0x00);
    paddedPacketIndex.Append(0x00);
    paddedPacketIndex.Append(0x00);
    paddedPacketIndex.Append(0xFF);
    paddedPacketIndex.Append(0xFF);
    paddedPacketIndex.Append(0xFF);
    paddedPacketIndex.Append(0xFF);
    paddedPacketIndex.Append(0xFF);
    paddedPacketIndex.Append(0xFF);
    paddedPacketIndex.Append(0x00);
    paddedPacketIndex.Append(0x00);

    TSRTPUtils::GetIVThirdTerm(result, 0xFFFFFFFFFFFF);
        
    EUNIT_ASSERT( result.Compare(paddedPacketIndex) == 0);
    }


void UT_SRTPUtils::UT_CountIVL(  )
    {
    TBuf8<32> result;    
    
           
    TInt ret = TSRTPUtils::CountIV(result, iSRTP_RFC112bitSessionSaltKey_dehexed,
                       0xFFFFFFFF,
                       0xFFFFFFFFFFFF);

    EUNIT_ASSERT( ret == KErrArgument);
                       
    result.SetLength(16);   

    ret = TSRTPUtils::CountIV(result, iSRTP_RFC112bitSessionSaltKey_dehexed,
                       0xFFFFFFFF,
                       0xFFFFFFFFFFFF);

    EUNIT_ASSERT( ret == KErrNone);

    EUNIT_ASSERT( result.Compare(iTest128BitIV_dehexed) == 0);
    
    
    }


void UT_SRTPUtils::UT_SRTPUtils_Cnt_rL(  )
    {
    EUNIT_ASSERT( ETrue );
    }

void UT_SRTPUtils::UT_SRTPUtils_Cnt_key_idL(  )
    {
    EUNIT_ASSERT( TSRTPUtils::Cnt_key_id(KSRTPEncryptionLabel,0,     KSRTPIndexLength) == 0);
    EUNIT_ASSERT( TSRTPUtils::Cnt_key_id(KSRTPAuthenticationLabel,0, KSRTPIndexLength) == 0x01000000000000);
    EUNIT_ASSERT( TSRTPUtils::Cnt_key_id(KSRTCPEncryptionLabel,0, KSRTCPIndexLength) == 0x0300000000);
    EUNIT_ASSERT( TSRTPUtils::Cnt_key_id(KSRTCPAuthenticationLabel,0, KSRTCPIndexLength) == 0x0400000000);
    
    }

void UT_SRTPUtils::UT_SRTPUtils_Cnt_xL(  )
    {

    // first SRTP.. 
    // RFC test salt (112 bit) and SRTP encr label (0x00)
    TSRTPUtils::Cnt_x(KSRTP_56bit_encr_key_id, iResult, iRFCTestSalt112bits_dehexed);   
    EUNIT_ASSERT( iResult.Compare(iSRTP_RFC112bitSessionEncrKey_dehexed) == 0);
    //reset result
    iResult.FillZ();
    // RFC test salt (112 bit) and SRTP  auth label (0x01)
    TSRTPUtils::Cnt_x(KSRTP_56bit_auth_key_id, iResult, iRFCTestSalt112bits_dehexed);   
    EUNIT_ASSERT( iResult.Compare(iSRTP_RFC112bitSessionAuthKey_dehexed) == 0);
    //reset result
    iResult.FillZ();
    // RFC test salt (112 bit) and SRTP salting label (0x02)
    TSRTPUtils::Cnt_x(KSRTP_56bit_salt_key_id, iResult, iRFCTestSalt112bits_dehexed);   
    EUNIT_ASSERT( iResult.Compare(iSRTP_RFC112bitSessionSaltKey_dehexed) == 0);
    //reset result
    iResult.FillZ();

    // then SRTCP..
    // RFC test salt (112 bit) and SRTCP encr label (0x03)
    TSRTPUtils::Cnt_x(KSRTCP_39bit_encr_key_id, iResult, iRFCTestSalt112bits_dehexed);   
    EUNIT_ASSERT( iResult.Compare(iSRTCP_RFC112bitSessionEncrKey_dehexed) == 0);
    //reset result
    iResult.FillZ();
    // RFC test salt (112 bit) and SRTCP auth label (0x04)
    TSRTPUtils::Cnt_x(KSRTCP_39bit_auth_key_id, iResult, iRFCTestSalt112bits_dehexed);   
    EUNIT_ASSERT( iResult.Compare(iSRTCP_RFC112bitSessionAuthKey_dehexed) == 0);
    //reset result
    iResult.FillZ();
    // RFC test salt (112 bit) and SRTCP salting label (0x05)
    TSRTPUtils::Cnt_x(KSRTCP_39bit_salt_key_id, iResult, iRFCTestSalt112bits_dehexed);   
    EUNIT_ASSERT( iResult.Compare(iSRTCP_RFC112bitSessionSaltKey_dehexed) == 0);

    }

void UT_SRTPUtils::UT_SRTPUtils_SrtpDIVL(  )
    {
    TInt a = 9;
    TInt b = 3;
    EUNIT_ASSERT( TSRTPUtils::SrtpDIV(a,b) == 3);
    
    b=0;
    EUNIT_ASSERT( TSRTPUtils::SrtpDIV(a,b) == 0);
    }

void UT_SRTPUtils::UT_SRTPUtils_DeHexL(  )
    {
    EUNIT_ASSERT( ETrue );
    }

void UT_SRTPUtils::UT_SRTPUtils_HexValL(  )
    {
    EUNIT_ASSERT( ETrue );
    }

//  TEST TABLE

EUNIT_BEGIN_TEST_TABLE( 
    UT_SRTPUtils,
    "SRTPUtils",
    "UNIT" )

EUNIT_TEST(
    "Cnt_r - test ",
    "SRTPUtils",
    "Cnt_r",
    "FUNCTIONALITY",
    SetupL, UT_SRTPUtils_Cnt_rL, Teardown)

EUNIT_TEST(
    "Cnt_key_id - test ",
    "SRTPUtils",
    "Cnt_key_id",
    "FUNCTIONALITY",
    SetupL, UT_SRTPUtils_Cnt_key_idL, Teardown)

EUNIT_TEST(
    "Cnt_x - test ",
    "SRTPUtils",
    "Cnt_x",
    "FUNCTIONALITY",
    SetupL, UT_SRTPUtils_Cnt_xL, Teardown)

EUNIT_TEST(
    "SrtpDIV - test ",
    "SRTPUtils",
    "SrtpDIV",
    "FUNCTIONALITY",
    SetupL, UT_SRTPUtils_SrtpDIVL, Teardown)

EUNIT_TEST(
    "DeHex - test ",
    "SRTPUtils",
    "DeHex",
    "FUNCTIONALITY",
    SetupL, UT_SRTPUtils_DeHexL, Teardown)

EUNIT_TEST(
    "HexVal - test ",
    "SRTPUtils",
    "HexVal",
    "FUNCTIONALITY",
    SetupL, UT_SRTPUtils_HexValL, Teardown)

EUNIT_TEST(
    "GetIVFirstTerm - test ",
    "SRTPUtils",
    "GetIVFirstTerm",
    "FUNCTIONALITY",
    SetupL, UT_GetIVFirstTermL, Teardown)

EUNIT_TEST(
    "GetIVSecondTerm - test ",
    "SRTPUtils",
    "GetIVSecondTerm",
    "FUNCTIONALITY",
    SetupL, UT_GetIVSecondTermL, Teardown)

EUNIT_TEST(
    "GetIVThirdTerm - test ",
    "SRTPUtils",
    "GetIVThirdTerm",
    "FUNCTIONALITY",
    SetupL, UT_GetIVThirdTermL, Teardown)

EUNIT_TEST(
    "CountIV - test ",
    "SRTPUtils",
    "CountIV",
    "FUNCTIONALITY",
    SetupL, UT_CountIVL, Teardown)


EUNIT_END_TEST_TABLE

//  END OF FILE

/*    
    iSalt.Append(0x0E);
    iSalt.Append(0xC6);
    iSalt.Append(0x75);
    iSalt.Append(0xAD);
    iSalt.Append(0x49);
    iSalt.Append(0x8A);
    iSalt.Append(0xFE);
    iSalt.Append(0xEB);
    iSalt.Append(0xB6);
    iSalt.Append(0x96);
    iSalt.Append(0x0B);
    iSalt.Append(0x3A);
    iSalt.Append(0xAB);
    iSalt.Append(0xE6); */


/*
    TBuf8<320> salt;
    _LIT8(KFormatHex,"[%d %d %d %d %d %d %d %d %d %d %d %d %d %d] ");

    salt.Format(KFormatHex, 0x0E,0xC6,0x75,0xAD,0x49,0x8A, 
                            0xFE,0xEB,0xB6,0x96,0x0B,0x3A,
                            0xAB,0xE6);  */                             
                               

//    _LIT8(KTestMasterSalt,"0EC675AD498AFEEBB6960B3AABE6");
//    _LIT8(KTestSaltResult,"0EC675AD498AFEE9B6960B3AABE6");
//    TBuf8<32> salt(KTestMasterSalt);        
    

/*
TBuf8<256> tgt;
...
_LIT8(KFormat1,"[%b %c %d %o %u %x]");
tgt.Format(KFormat1,65,65,65,65,65,65);//generates:
... //[1000001 A 65 101 65 41]
...      */
   
/*    

TBuf8<16> tgt(Kabc);   */