diff -r 000000000000 -r 307788aac0a8 ipappprotocols_plat/srtp_api/inc/srtpcryptocontext.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ipappprotocols_plat/srtp_api/inc/srtpcryptocontext.h Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,197 @@ +/* +* 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: Contains a default cryptographic context for SRTP/SRTCP streams. +* +*/ + + + + +#ifndef __SRTP_CRYPTOCONTEXT_H__ +#define __SRTP_CRYPTOCONTEXT_H__ + +// INCLUDES +#include +#include "srtpdef.h" +#include + +// FORWARD DECLARATIONS +class CSRTPMasterKey; +class CSRTPMasterSalt; +class CSRTPCryptoHandler; +class TSrtpCryptoParams; +/** +* Contains a cryptographic context. +*/ +class CSRTPCryptoContext : public CBase + { + //public: // enumerations + + + public: // Construction + + /** + * Use this function if the stream will use the SRTP session's default + * cryptographic context. CSrtpSession take the ownership of + * CSRTPCryptoContext if CSrtpSession is created with CSRTPCryptoContext + * as input parameter. + * @param aKey The master key. + * @param aSalt The master salt. + * @param aCryptoParams. Crypto Context parameters. + * @leave KErrNone if success, system-wide error code otherwise + */ + IMPORT_C static CSRTPCryptoContext* NewL( const CSRTPMasterKey* aKey, + const CSRTPMasterSalt* aSalt, + const TSrtpCryptoParams& aCryptoParams); + + /** + * Use this function if the stream will use the SRTP session's default + * cryptographic context. + * @param aKey The master key. + * @param aSalt The master salt. + * @param aCryptoParams. Crypto Context parameters. + * @leave KErrNone if success, system-wide error code otherwise + */ + IMPORT_C static CSRTPCryptoContext* NewLC( const CSRTPMasterKey* aKey, + const CSRTPMasterSalt* aSalt, + const TSrtpCryptoParams& aCryptoParams ); + + /** + * Destructor + * + */ + ~CSRTPCryptoContext(); + + /* + * Gets current master key + * @return CSRTPMasterKey + */ + IMPORT_C const CSRTPMasterKey& MasterKey() const; + + /* + * Sets master key, the new master key will be used in encryptiuon + * and decryption. The previous master key will be deleted. + * @param aKey new master key + */ + IMPORT_C void SetMasterKey( const CSRTPMasterKey* aKey); + + /* + * Gets current master salt + * @return CSRTPMasterSalt + */ + IMPORT_C const CSRTPMasterSalt& MasterSalt() const; + + /* + * Sets master salt, the new master salt key will be used in encryptiuon + * and decryption. The previous master salt key will be deleted. + * @param aSalt new master salt + */ + IMPORT_C void SetMasterSalt(const CSRTPMasterSalt* aSalt); + + + /* + * Check the validity of the whole TCryptoContext + * @return validity of this CryptoContext + */ + IMPORT_C TBool Valid() const; + + /* + * Gets CryptoParams + * @return TSrtpCryptoParams Cryptocontext parameters + */ + IMPORT_C const TSrtpCryptoParams& CryptoParams() ; + + /* + * Feeback from Applicaiton to indicate that if the local ROC is + * synchronized with the sender in RCC mode3.If it is not set, + * "Not-Synchronized" will be default. If it is synchronized, + * the packet would hence be processed using the local ROC. + * Defined in RFC srtp-rcc-04 section 4. + * @param aSync True if it is synchronized, False otherwise. + */ + IMPORT_C void SetRCCm3Sync(TBool aSync) ; + + /* + * Check if the crypto context is equal + * @param aContext True if it is equal, False otherwise. + */ + TBool IsEqual(const CSRTPCryptoContext& aContext); + + /* + * Add cryptocontext user + * @param aObserver new CSRTPCryptoHandler instance + */ + void AddCryptoChangeObserver(CSRTPCryptoHandler *aObserver); + + /* + * Remove cryptocontext user + * @param aObserver CSRTPCryptoHandler instance + */ + void RemoveCryptoChangeObserver(CSRTPCryptoHandler *aObserver); + + protected: + + /* + * Update crypto parameters, internal use only + * @param aCryptoParams a new crypto parameters + */ + void UpdateCryptoParams(const TSrtpCryptoParams& aCryptoParams ); + + private: + + /* copy constructor */ + CSRTPCryptoContext(const TSrtpCryptoParams& aCryptoParams ); + + void ConstructL ( const CSRTPMasterKey* aKey, + const CSRTPMasterSalt* aSalt); + + + /* assignment operator */ + const CSRTPCryptoContext& operator=(const CSRTPCryptoContext& aContext); + + TBool FindHandler( CSRTPCryptoHandler *aObserver ); + + private: // from Array + + + /** + * list of CSRTPCryptoHandler objects + * owned by CSRTPCryptoContext object. + */ + TSglQue iHandlerList; + + /** + * CSRTPCryptoHandler iterator. + * Owned by CSRTPCryptoContext object. + */ + TSglQueIter iHandlerIter; + + + + private: // data + const CSRTPMasterKey *iKey; // TSRTPMasterKey definitions + const CSRTPMasterSalt *iSalt; // TSRTPMasterSalt definitions + TSrtpCryptoParams iCryptoParams; + static const TInt iObserverOffset; + + + private: + #ifdef EUNIT_TESTING + friend class UT_CSRTPCryptoContext; + friend class UT_CSRTPCryptoHandlerSRTCP; + #endif + }; + + +#endif // __SRTP_CRYPTOCONTEXT_H__