/** * * Code derived and adapted from the Jitsi client side SRTP framework. * * Distributed under LGPL license. * See terms of license at gnu.org. */ package org.restcomm.media.rtp.crypto; /** * SRTPTransformEngine class implements TransformEngine interface. It stores * important information / objects regarding SRTP processing. Through * SRTPTransformEngine, we can get the needed PacketTransformer, which will be * used by abstract TransformConnector classes. * * @author Bing SU (nova.su@gmail.com) * */ public class SRTPTransformEngine implements TransformEngine { /** * The default SRTPCryptoContext, which will be used to derivate other * contexts. */ private SRTPCryptoContext defaultContext; /** * The default SRTPCryptoContext, which will be used to derive other * contexts. */ private SRTCPCryptoContext defaultContextControl; /** * Construct a SRTPTransformEngine based on given master encryption key, * master salt key and SRTP/SRTCP policy. * * @param masterKey * the master encryption key * @param masterSalt * the master salt key * @param srtpPolicy * SRTP policy * @param srtcpPolicy * SRTCP policy */ public SRTPTransformEngine(byte[] masterKey, byte[] masterSalt, SRTPPolicy srtpPolicy, SRTPPolicy srtcpPolicy) { defaultContext = new SRTPCryptoContext(0, 0, 0, masterKey, masterSalt, srtpPolicy); defaultContextControl = new SRTCPCryptoContext(0, masterKey, masterSalt, srtcpPolicy); } /** * Close the transformer engine. * * The close functions closes all stored default crypto contexts. This * deletes key data and forces a cleanup of the crypto contexts. */ public void close() { if (defaultContext != null) { defaultContext.close(); defaultContext = null; } if (defaultContextControl != null) { defaultContextControl.close(); defaultContextControl = null; } } /** * Gets the <tt>PacketTransformer</tt> for RTCP packets. * * @return the <tt>PacketTransformer</tt> for RTCP packets */ public PacketTransformer getRTCPTransformer() { return new SRTCPTransformer(this); } /* * (non-Javadoc) * * @see net.java.sip.communicator.impl.media.transform. * TransformEngine#getRTPTransformer() */ public PacketTransformer getRTPTransformer() { return new SRTPTransformer(this); } /** * Get the default SRTPCryptoContext * * @return the default SRTPCryptoContext */ public SRTPCryptoContext getDefaultContext() { return this.defaultContext; } /** * Get the default SRTPCryptoContext * * @return the default SRTPCryptoContext */ public SRTCPCryptoContext getDefaultContextControl() { return this.defaultContextControl; } }