Switch commoncpp2 to ucommon to solve dependency conflicts.
libccrtp was depending on commoncpp2, and have been replaced by a version
depending on ucommon as well.
diff --git a/jni/libccrtp/sources/src/ccrtp/CryptoContext.h b/jni/libccrtp/sources/src/ccrtp/CryptoContext.h
index 7d25770..3367e81 100644
--- a/jni/libccrtp/sources/src/ccrtp/CryptoContext.h
+++ b/jni/libccrtp/sources/src/ccrtp/CryptoContext.h
@@ -21,14 +21,13 @@
#ifndef CRYPTOCONTEXT_H
#define CRYPTOCONTEXT_H
-#include <cc++/config.h>
+#include <commoncpp/config.h>
#include <ccrtp/rtppkt.h>
#define REPLAY_WINDOW_SIZE 64
-
const int SrtpAuthenticationNull = 0;
const int SrtpAuthenticationSha1Hmac = 1;
const int SrtpAuthenticationSkeinHmac = 2;
@@ -39,13 +38,17 @@
const int SrtpEncryptionTWOCM = 3;
const int SrtpEncryptionTWOF8 = 4;
+#ifndef CRYPTOCONTEXTCTRL_H
+
+#include <stdint.h>
+
#ifdef SRTP_SUPPORT
-#include <ccrtp/crypto/AesSrtp.h>
+#include <ccrtp/crypto/SrtpSymCrypto.h>
#endif
-#ifdef CCXX_NAMESPACES
-namespace ost {
-#endif
+class SrtpSymCrypto;
+
+NAMESPACE_COMMONCPP
class RTPPacket;
@@ -78,330 +81,330 @@
*/
class __EXPORT CryptoContext {
- public:
- /**
- * Constructor for empty SRTP cryptographic context.
- *
- * This constructor creates an empty SRTP cryptographic context were
- * all algorithms are set to the null algorithm, that is no SRTP processing
- * is performed.
- *
- * @param ssrc The RTP SSRC that this SRTP cryptographic context protects.
- */
- CryptoContext( uint32 ssrc );
+ public:
+ /**
+ * Constructor for empty SRTP cryptographic context.
+ *
+ * This constructor creates an empty SRTP cryptographic context were
+ * all algorithms are set to the null algorithm, that is no SRTP processing
+ * is performed.
+ *
+ * @param ssrc The RTP SSRC that this SRTP cryptographic context protects.
+ */
+ CryptoContext( uint32 ssrc );
- /**
- * Constructor for an active SRTP cryptographic context.
- *
- * This constructor creates an active SRTP cryptographic context were
- * algorithms are enabled, keys are computed and so on. This SRTP
- * cryptographic context can protect a RTP SSRC stream.
- *
- * @param ssrc
- * The RTP SSRC that this SRTP cryptographic context protects.
- *
- * @param roc
- * The initial Roll-Over-Counter according to RFC 3711. These are the
- * upper 32 bit of the overall 48 bit SRTP packet index. Refer to
- * chapter 3.2.1 of the RFC.
- *
- * @param keyDerivRate
- * The key derivation rate defines when to recompute the SRTP session
- * keys. Refer to chapter 4.3.1 in the RFC.
- *
- * @param ealg
- * The encryption algorithm to use. Possible values are <code>
- * SrtpEncryptionNull, SrtpEncryptionAESCM, SrtpEncryptionAESF8
- * </code>. See chapter 4.1.1 for AESCM (Counter mode) and 4.1.2
- * for AES F8 mode.
- *
- * @param aalg
- * The authentication algorithm to use. Possible values are <code>
- * SrtpEncryptionNull, SrtpAuthenticationSha1Hmac</code>. The only
- * active algorithm here is SHA1 HMAC, a SHA1 based hashed message
- * authentication code as defined in RFC 2104.
- *
- * @param masterKey
- * Pointer to the master key for this SRTP cryptographic context.
- * Must point to <code>masterKeyLength</code> bytes. Refer to chapter
- * 3.2.1 of the RFC about the role of the master key.
- *
- * @param masterKeyLength
- * The length in bytes of the master key in bytes. The length must
- * match the selected encryption algorithm. Because SRTP uses AES
- * based encryption only, then master key length may be 16 or 32
- * bytes (128 or 256 bit master key)
- *
- * @param masterSalt
- * SRTP uses the master salt to computer the initialization vector
- * that in turn is input to compute the session key, session
- * authentication key and the session salt.
- *
- * @param masterSaltLength
- * The length in bytes of the master salt data in bytes. SRTP uses
- * AES as encryption algorithm. AES encrypts 16 byte blocks
- * (independent of the key length). According to RFC3711 the standard
- * value for the master salt length should be 112 bit (14 bytes).
- *
- * @param ekeyl
- * The length in bytes of the session encryption key that SRTP shall
- * compute and use. Usually the same length as for the master key
- * length. But you may use a different length as well. Be carefull
- * that the key management mechanisms supports different key lengths.
- *
- * @param akeyl
- * The length in bytes of the session authentication key. SRTP
- * computes this key and uses it as input to the authentication
- * algorithm.
- * The standard value is 160 bits (20 bytes).
- *
- * @param skeyl
- * The length in bytes of the session salt. SRTP computes this salt
- * key and uses it as input during encryption. The length usually
- * is the same as the master salt length.
- *
- * @param tagLength
- * The length is bytes of the authentication tag that SRTP appends
- * to the RTP packet. Refer to chapter 4.2. in the RFC 3711.
- */
- CryptoContext( uint32 ssrc, int32 roc,
- int64 keyDerivRate,
- const int32 ealg,
- const int32 aalg,
- uint8* masterKey,
- int32 masterKeyLength,
- uint8* masterSalt,
- int32 masterSaltLength,
- int32 ekeyl,
- int32 akeyl,
- int32 skeyl,
- int32 tagLength );
- /**
- * Destructor.
- *
- * Cleans the SRTP cryptographic context.
- */
- ~CryptoContext();
+ /**
+ * Constructor for an active SRTP cryptographic context.
+ *
+ * This constructor creates an active SRTP cryptographic context were
+ * algorithms are enabled, keys are computed and so on. This SRTP
+ * cryptographic context can protect a RTP SSRC stream.
+ *
+ * @param ssrc
+ * The RTP SSRC that this SRTP cryptographic context protects.
+ *
+ * @param roc
+ * The initial Roll-Over-Counter according to RFC 3711. These are the
+ * upper 32 bit of the overall 48 bit SRTP packet index. Refer to
+ * chapter 3.2.1 of the RFC.
+ *
+ * @param keyDerivRate
+ * The key derivation rate defines when to recompute the SRTP session
+ * keys. Refer to chapter 4.3.1 in the RFC.
+ *
+ * @param ealg
+ * The encryption algorithm to use. Possible values are <code>
+ * SrtpEncryptionNull, SrtpEncryptionAESCM, SrtpEncryptionAESF8
+ * </code>. See chapter 4.1.1 for AESCM (Counter mode) and 4.1.2
+ * for AES F8 mode.
+ *
+ * @param aalg
+ * The authentication algorithm to use. Possible values are <code>
+ * SrtpEncryptionNull, SrtpAuthenticationSha1Hmac</code>. The only
+ * active algorithm here is SHA1 HMAC, a SHA1 based hashed message
+ * authentication code as defined in RFC 2104.
+ *
+ * @param masterKey
+ * Pointer to the master key for this SRTP cryptographic context.
+ * Must point to <code>masterKeyLength</code> bytes. Refer to chapter
+ * 3.2.1 of the RFC about the role of the master key.
+ *
+ * @param masterKeyLength
+ * The length in bytes of the master key in bytes. The length must
+ * match the selected encryption algorithm. Because SRTP uses AES
+ * based encryption only, then master key length may be 16 or 32
+ * bytes (128 or 256 bit master key)
+ *
+ * @param masterSalt
+ * SRTP uses the master salt to computer the initialization vector
+ * that in turn is input to compute the session key, session
+ * authentication key and the session salt.
+ *
+ * @param masterSaltLength
+ * The length in bytes of the master salt data in bytes. SRTP uses
+ * AES as encryption algorithm. AES encrypts 16 byte blocks
+ * (independent of the key length). According to RFC3711 the standard
+ * value for the master salt length should be 112 bit (14 bytes).
+ *
+ * @param ekeyl
+ * The length in bytes of the session encryption key that SRTP shall
+ * compute and use. Usually the same length as for the master key
+ * length. But you may use a different length as well. Be carefull
+ * that the key management mechanisms supports different key lengths.
+ *
+ * @param akeyl
+ * The length in bytes of the session authentication key. SRTP
+ * computes this key and uses it as input to the authentication
+ * algorithm.
+ * The standard value is 160 bits (20 bytes).
+ *
+ * @param skeyl
+ * The length in bytes of the session salt. SRTP computes this salt
+ * key and uses it as input during encryption. The length usually
+ * is the same as the master salt length.
+ *
+ * @param tagLength
+ * The length is bytes of the authentication tag that SRTP appends
+ * to the RTP packet. Refer to chapter 4.2. in the RFC 3711.
+ */
+ CryptoContext( uint32 ssrc, int32 roc,
+ int64 keyDerivRate,
+ const int32 ealg,
+ const int32 aalg,
+ uint8* masterKey,
+ int32 masterKeyLength,
+ uint8* masterSalt,
+ int32 masterSaltLength,
+ int32 ekeyl,
+ int32 akeyl,
+ int32 skeyl,
+ int32 tagLength );
+ /**
+ * Destructor.
+ *
+ * Cleans the SRTP cryptographic context.
+ */
+ ~CryptoContext();
- /**
- * Set the Roll-Over-Counter.
- *
- * Ths method sets the upper 32 bit of the 48 bit SRTP packet index
- * (the roll-over-part)
- *
- * @param r
- * The roll-over-counter
- */
- inline void
- setRoc(uint32 r)
- {roc = r;}
+ /**
+ * Set the Roll-Over-Counter.
+ *
+ * Ths method sets the upper 32 bit of the 48 bit SRTP packet index
+ * (the roll-over-part)
+ *
+ * @param r
+ * The roll-over-counter
+ */
+ inline void
+ setRoc(uint32 r)
+ {roc = r;}
- /**
- * Get the Roll-Over-Counter.
- *
- * Ths method get the upper 32 bit of the 48 bit SRTP packet index
- * (the roll-over-part)
- *
- * @return The roll-over-counter
- */
- inline uint32
- getRoc() const
- {return roc;}
+ /**
+ * Get the Roll-Over-Counter.
+ *
+ * Ths method get the upper 32 bit of the 48 bit SRTP packet index
+ * (the roll-over-part)
+ *
+ * @return The roll-over-counter
+ */
+ inline uint32
+ getRoc() const
+ {return roc;}
- /**
- * Perform SRTP encryption.
- *
- * This method encrypts <em>and</em> decrypts SRTP payload data. Plain
- * data gets encrypted, encrypted data get decrypted.
- *
- * @param rtp
- * The RTP packet that contains the data to encrypt.
- *
- * @param index
- * The 48 bit SRTP packet index. See the <code>guessIndex</code>
- * method.
- *
- * @param ssrc
- * The RTP SSRC data in <em>host</em> order.
- */
- void srtpEncrypt( RTPPacket* rtp, uint64 index, uint32 ssrc );
+ /**
+ * Perform SRTP encryption.
+ *
+ * This method encrypts <em>and</em> decrypts SRTP payload data. Plain
+ * data gets encrypted, encrypted data get decrypted.
+ *
+ * @param rtp
+ * The RTP packet that contains the data to encrypt.
+ *
+ * @param index
+ * The 48 bit SRTP packet index. See the <code>guessIndex</code>
+ * method.
+ *
+ * @param ssrc
+ * The RTP SSRC data in <em>host</em> order.
+ */
+ void srtpEncrypt( RTPPacket* rtp, uint64 index, uint32 ssrc );
- /**
- * Compute the authentication tag.
- *
- * Compute the authentication tag according the the paramters in the
- * SRTP Cryptograhic context.
- *
- * @param rtp
- * The RTP packet that contains the data to authenticate.
- *
- * @param roc
- * The 32 bit SRTP roll-over-counter.
- *
- * @param tag
- * Points to a buffer that hold the computed tag. This buffer must
- * be able to hold <code>tagLength</code> bytes.
- */
- void srtpAuthenticate(RTPPacket* rtp, uint32 roc, uint8* tag );
+ /**
+ * Compute the authentication tag.
+ *
+ * Compute the authentication tag according the the paramters in the
+ * SRTP Cryptograhic context.
+ *
+ * @param rtp
+ * The RTP packet that contains the data to authenticate.
+ *
+ * @param roc
+ * The 32 bit SRTP roll-over-counter.
+ *
+ * @param tag
+ * Points to a buffer that hold the computed tag. This buffer must
+ * be able to hold <code>tagLength</code> bytes.
+ */
+ void srtpAuthenticate(RTPPacket* rtp, uint32 roc, uint8* tag );
- /**
- * Perform key derivation according to SRTP specification
- *
- * This method computes the session key, session authentication key and the
- * session salt key. This method must be called at least once after the
- * SRTP Cryptograhic context was set up.
- *
- * @param index
- * The 48 bit SRTP packet index. See the <code>guessIndex</code>
- * method.
- */
- void deriveSrtpKeys(uint64 index);
+ /**
+ * Perform key derivation according to SRTP specification
+ *
+ * This method computes the session key, session authentication key and the
+ * session salt key. This method must be called at least once after the
+ * SRTP Cryptograhic context was set up.
+ *
+ * @param index
+ * The 48 bit SRTP packet index. See the <code>guessIndex</code>
+ * method.
+ */
+ void deriveSrtpKeys(uint64 index);
- /**
- * Compute (guess) the new SRTP index based on the sequence number of
- * a received RTP packet.
- *
- * The method uses the algorithm show in RFC3711, Appendix A, to compute
- * the new index.
- *
- * @param newSeqNumber
- * The sequence number of the received RTP packet in host order.
- *
- * @return The new SRTP packet index
- */
- uint64 guessIndex(uint16 newSeqNumber);
+ /**
+ * Compute (guess) the new SRTP index based on the sequence number of
+ * a received RTP packet.
+ *
+ * The method uses the algorithm show in RFC3711, Appendix A, to compute
+ * the new index.
+ *
+ * @param newSeqNumber
+ * The sequence number of the received RTP packet in host order.
+ *
+ * @return The new SRTP packet index
+ */
+ uint64 guessIndex(uint16 newSeqNumber);
- /**
- * Check for packet replay.
- *
- * The method check if a received packet is either to old or was already
- * received.
- *
- * The method supports a 64 packet history relative the the given
- * sequence number.
- *
- * @param newSeqNumber
- * The sequence number of the received RTP packet in host order.
- *
- * @return <code>true</code> if no replay, <code>false</code> if packet
- * is too old ar was already received.
- */
- bool checkReplay(uint16 newSeqNumber);
+ /**
+ * Check for packet replay.
+ *
+ * The method check if a received packet is either to old or was already
+ * received.
+ *
+ * The method supports a 64 packet history relative the the given
+ * sequence number.
+ *
+ * @param newSeqNumber
+ * The sequence number of the received RTP packet in host order.
+ *
+ * @return <code>true</code> if no replay, <code>false</code> if packet
+ * is too old ar was already received.
+ */
+ bool checkReplay(uint16 newSeqNumber);
- /**
- * Update the SRTP packet index.
- *
- * Call this method after all checks were successful. See chapter
- * 3.3.1 in the RFC when to update the ROC and ROC processing.
- *
- * @param newSeqNumber
- * The sequence number of the received RTP packet in host order.
- */
- void update( uint16 newSeqNumber );
+ /**
+ * Update the SRTP packet index.
+ *
+ * Call this method after all checks were successful. See chapter
+ * 3.3.1 in the RFC when to update the ROC and ROC processing.
+ *
+ * @param newSeqNumber
+ * The sequence number of the received RTP packet in host order.
+ */
+ void update( uint16 newSeqNumber );
- /**
- * Get the length of the SRTP authentication tag in bytes.
- *
- * @return the length of the authentication tag.
- */
- inline int32
- getTagLength() const
- {return tagLength;}
+ /**
+ * Get the length of the SRTP authentication tag in bytes.
+ *
+ * @return the length of the authentication tag.
+ */
+ inline int32
+ getTagLength() const
+ {return tagLength;}
- /**
- * Get the length of the MKI in bytes.
- *
- * @return the length of the MKI.
- */
- inline int32
- getMkiLength() const
- {return mkiLength;}
+ /**
+ * Get the length of the MKI in bytes.
+ *
+ * @return the length of the MKI.
+ */
+ inline int32
+ getMkiLength() const
+ {return mkiLength;}
- /**
- * Get the SSRC of this SRTP Cryptograhic context.
- *
- * @return the SSRC.
- */
- inline uint32
- getSsrc() const
- {return ssrc;}
+ /**
+ * Get the SSRC of this SRTP Cryptograhic context.
+ *
+ * @return the SSRC.
+ */
+ inline uint32
+ getSsrc() const
+ {return ssrcCtx;}
- /**
- * Derive a new Crypto Context for use with a new SSRC
- *
- * This method returns a new Crypto Context initialized with the data
- * of this crypto context. Replacing the SSRC, Roll-over-Counter, and
- * the key derivation rate the application cab use this Crypto Context
- * to encrypt / decrypt a new stream (Synchronization source) inside
- * one RTP session.
- *
- * Before the application can use this crypto context it must call
- * the <code>deriveSrtpKeys</code> method.
- *
- * @param ssrc
- * The SSRC for this context
- * @param roc
- * The Roll-Over-Counter for this context
- * @param keyDerivRate
- * The key derivation rate for this context
- * @return
- * a new CryptoContext with all relevant data set.
- */
+ /**
+ * Derive a new Crypto Context for use with a new SSRC
+ *
+ * This method returns a new Crypto Context initialized with the data
+ * of this crypto context. Replacing the SSRC, Roll-over-Counter, and
+ * the key derivation rate the application cab use this Crypto Context
+ * to encrypt / decrypt a new stream (Synchronization source) inside
+ * one RTP session.
+ *
+ * Before the application can use this crypto context it must call
+ * the <code>deriveSrtpKeys</code> method.
+ *
+ * @param ssrc
+ * The SSRC for this context
+ * @param roc
+ * The Roll-Over-Counter for this context
+ * @param keyDerivRate
+ * The key derivation rate for this context
+ * @return
+ * a new CryptoContext with all relevant data set.
+ */
+ CryptoContext* newCryptoContextForSSRC(uint32 ssrc, int roc, int64 keyDerivRate);
- CryptoContext* newCryptoContextForSSRC(uint32 ssrc, int roc, int64 keyDerivRate);
+ private:
- private:
+ uint32 ssrcCtx;
+ bool using_mki;
+ uint32 mkiLength;
+ uint8* mki;
- uint32 ssrc;
- bool using_mki;
- uint32 mkiLength;
- uint8* mki;
+ uint32 roc;
+ uint32 guessed_roc;
+ uint16 s_l;
+ int64 key_deriv_rate;
- uint32 roc;
- uint32 guessed_roc;
- uint16 s_l;
- int64 key_deriv_rate;
+ /* bitmask for replay check */
+ uint64 replay_window;
- /* bitmask for replay check */
- uint64 replay_window;
+ uint8* master_key;
+ uint32 master_key_length;
+ uint32 master_key_srtp_use_nb;
+ uint32 master_key_srtcp_use_nb;
+ uint8* master_salt;
+ uint32 master_salt_length;
- uint8* master_key;
- uint32 master_key_length;
- uint32 master_key_srtp_use_nb;
- uint32 master_key_srtcp_use_nb;
- uint8* master_salt;
- uint32 master_salt_length;
+ /* Session Encryption, Authentication keys, Salt */
+ int32 n_e;
+ uint8* k_e;
+ int32 n_a;
+ uint8* k_a;
+ int32 n_s;
+ uint8* k_s;
- /* Session Encryption, Authentication keys, Salt */
- int32 n_e;
- uint8* k_e;
- int32 n_a;
- uint8* k_a;
- int32 n_s;
- uint8* k_s;
-
- int32 ealg;
- int32 aalg;
- int32 ekeyl;
- int32 akeyl;
- int32 skeyl;
- int32 tagLength;
- bool seqNumSet;
+ int32 ealg;
+ int32 aalg;
+ int32 ekeyl;
+ int32 akeyl;
+ int32 skeyl;
+ int32 tagLength;
+ bool seqNumSet;
void* macCtx;
#ifdef SRTP_SUPPORT
- AesSrtp* cipher;
- AesSrtp* f8Cipher;
+ SrtpSymCrypto* cipher;
+ SrtpSymCrypto* f8Cipher;
#else
- void* cipher;
- void* f8Cipher;
+ void* cipher;
+ void* f8Cipher;
#endif
};
-#ifdef CCXX_NAMESPACES
-}
+
+END_NAMESPACE
+
#endif
#endif