/*
* SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package net.java.sip.communicator.impl.media.transform.srtp;
import net.java.sip.communicator.impl.media.transform.*;
/**
* 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
{
/**
* Master key of this SRTP session
*/
private final byte[] masterKey;
/**
* Master salt key of this SRTP session
*/
private final byte[] masterSalt;
/**
* SRTP processing policy
*/
private final SRTPPolicy srtpPolicy;
/**
* SRTCP processing policy
*/
private final SRTPPolicy srtcpPolicy;
/**
* The default SRTPCryptoContext, which will be used to derivate other
* contexts.
*/
private SRTPCryptoContext defaultContext;
/**
* 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
* @param cryptoProvider cryptography services provider
*/
public SRTPTransformEngine(byte[] masterKey, byte[] masterSalt,
SRTPPolicy srtpPolicy, SRTPPolicy srtcpPolicy)
{
this.masterKey = new byte[masterKey.length];
System.arraycopy(masterKey, 0, this.masterKey, 0, masterKey.length);
this.masterSalt = new byte[masterSalt.length];
System.arraycopy(masterSalt, 0, this.masterSalt, 0, masterSalt.length);
this.srtpPolicy = srtpPolicy;
this.srtcpPolicy = srtcpPolicy;
this.defaultContext = new SRTPCryptoContext(0, 0, 0,
this.masterKey,
this.masterSalt,
this.srtpPolicy);
}
/* (non-Javadoc)
* @see net.java.sip.communicator.impl.media.transform.
* TransformEngine#getRTCPTransformer()
*/
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 master encryption key
*
* @return the master encryption key
*/
public byte[] getMasterKey()
{
return this.masterKey;
}
/**
* Get the master salt key
*
* @return the master salt key
*/
public byte[] getMasterSalt()
{
return this.masterSalt;
}
/**
* Get the SRTCP policy
*
* @return the SRTCP policy
*/
public SRTPPolicy getSRTCPPolicy()
{
return this.srtcpPolicy;
}
/**
* Get the SRTP policy
*
* @return the SRTP policy
*/
public SRTPPolicy getSRTPPolicy()
{
return this.srtpPolicy;
}
/**
* Get the default SRTPCryptoContext
*
* @return the default SRTPCryptoContext
*/
public SRTPCryptoContext getDefaultContext()
{
return this.defaultContext;
}
}