mirror of
				https://github.com/ossrs/srs.git
				synced 2025-03-09 15:49:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			176 lines
		
	
	
	
		
			8.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			176 lines
		
	
	
	
		
			8.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#define MAX_KEY_LEN 46
 | 
						|
#define EXTRACT(dest, src, srcsize, copysize)                                  \
 | 
						|
    {                                                                          \
 | 
						|
        memcpy((dest), (src), (copysize));                                     \
 | 
						|
        (src) += (copysize);                                                   \
 | 
						|
        (srcsize) -= (copysize);                                               \
 | 
						|
    }
 | 
						|
 | 
						|
/* Extract data if src contains sufficient bytes, otherwise go to end */
 | 
						|
#define EXTRACT_IF(dest, src, srcsize, copysize)                               \
 | 
						|
    {                                                                          \
 | 
						|
        if ((srcsize) < (copysize)) {                                          \
 | 
						|
            goto end;                                                          \
 | 
						|
        } else {                                                               \
 | 
						|
            EXTRACT((dest), (src), (srcsize), (copysize));                     \
 | 
						|
        }                                                                      \
 | 
						|
    }
 | 
						|
#include <stdint.h>
 | 
						|
#if UINTPTR_MAX == 0xffffffff
 | 
						|
#define FUZZ_32BIT
 | 
						|
#elif UINTPTR_MAX == 0xffffffffffffffff
 | 
						|
#else
 | 
						|
#error "Cannot detect word size"
 | 
						|
#endif
 | 
						|
 | 
						|
typedef srtp_err_status_t (
 | 
						|
    *fuzz_srtp_func)(srtp_t, void *, int *, uint8_t, unsigned int);
 | 
						|
typedef void (*fuzz_srtp_crypto_policy_func)(srtp_crypto_policy_t *);
 | 
						|
typedef srtp_err_status_t (*fuzz_srtp_get_length_func)(const srtp_t,
 | 
						|
                                                       uint8_t,
 | 
						|
                                                       unsigned int,
 | 
						|
                                                       uint32_t *);
 | 
						|
 | 
						|
struct fuzz_srtp_params {
 | 
						|
    uint8_t srtp_func;
 | 
						|
    uint8_t srtp_crypto_policy_func;
 | 
						|
    uint16_t window_size;
 | 
						|
    uint8_t allow_repeat_tx;
 | 
						|
    uint8_t ssrc_type;
 | 
						|
    unsigned int ssrc_value;
 | 
						|
    uint8_t key[MAX_KEY_LEN];
 | 
						|
    uint8_t mki;
 | 
						|
};
 | 
						|
 | 
						|
static srtp_err_status_t fuzz_srtp_protect(srtp_t srtp_sender,
 | 
						|
                                           void *hdr,
 | 
						|
                                           int *len,
 | 
						|
                                           uint8_t use_mki,
 | 
						|
                                           unsigned int mki);
 | 
						|
static srtp_err_status_t fuzz_srtp_unprotect(srtp_t srtp_sender,
 | 
						|
                                             void *hdr,
 | 
						|
                                             int *len,
 | 
						|
                                             uint8_t use_mki,
 | 
						|
                                             unsigned int mki);
 | 
						|
static srtp_err_status_t fuzz_srtp_protect_rtcp(srtp_t srtp_sender,
 | 
						|
                                                void *hdr,
 | 
						|
                                                int *len,
 | 
						|
                                                uint8_t use_mki,
 | 
						|
                                                unsigned int mki);
 | 
						|
static srtp_err_status_t fuzz_srtp_unprotect_rtcp(srtp_t srtp_sender,
 | 
						|
                                                  void *hdr,
 | 
						|
                                                  int *len,
 | 
						|
                                                  uint8_t use_mki,
 | 
						|
                                                  unsigned int mki);
 | 
						|
static srtp_err_status_t fuzz_srtp_protect_mki(srtp_t srtp_sender,
 | 
						|
                                               void *hdr,
 | 
						|
                                               int *len,
 | 
						|
                                               uint8_t use_mki,
 | 
						|
                                               unsigned int mki);
 | 
						|
static srtp_err_status_t fuzz_srtp_protect_rtcp_mki(srtp_t srtp_sender,
 | 
						|
                                                    void *hdr,
 | 
						|
                                                    int *len,
 | 
						|
                                                    uint8_t use_mki,
 | 
						|
                                                    unsigned int mki);
 | 
						|
static srtp_err_status_t fuzz_srtp_unprotect_mki(srtp_t srtp_sender,
 | 
						|
                                                 void *hdr,
 | 
						|
                                                 int *len,
 | 
						|
                                                 uint8_t use_mki,
 | 
						|
                                                 unsigned int mki);
 | 
						|
static srtp_err_status_t fuzz_srtp_unprotect_rtcp_mki(srtp_t srtp_sender,
 | 
						|
                                                      void *hdr,
 | 
						|
                                                      int *len,
 | 
						|
                                                      uint8_t use_mki,
 | 
						|
                                                      unsigned int mki);
 | 
						|
 | 
						|
static srtp_err_status_t fuzz_srtp_get_protect_length(const srtp_t srtp_ctx,
 | 
						|
                                                      uint8_t use_mki,
 | 
						|
                                                      unsigned int mki,
 | 
						|
                                                      uint32_t *length);
 | 
						|
static srtp_err_status_t fuzz_srtp_get_protect_mki_length(const srtp_t srtp_ctx,
 | 
						|
                                                          uint8_t use_mki,
 | 
						|
                                                          unsigned int mki,
 | 
						|
                                                          uint32_t *length);
 | 
						|
static srtp_err_status_t fuzz_srtp_get_protect_rtcp_length(
 | 
						|
    const srtp_t srtp_ctx,
 | 
						|
    uint8_t use_mki,
 | 
						|
    unsigned int mki,
 | 
						|
    uint32_t *length);
 | 
						|
static srtp_err_status_t fuzz_srtp_get_protect_rtcp_mki_length(
 | 
						|
    const srtp_t srtp_ctx,
 | 
						|
    uint8_t use_mki,
 | 
						|
    unsigned int mki,
 | 
						|
    uint32_t *length);
 | 
						|
 | 
						|
struct fuzz_srtp_func_ext {
 | 
						|
    fuzz_srtp_func srtp_func;
 | 
						|
    bool protect;
 | 
						|
    fuzz_srtp_get_length_func get_length;
 | 
						|
};
 | 
						|
 | 
						|
const struct fuzz_srtp_func_ext srtp_funcs[] = {
 | 
						|
    { fuzz_srtp_protect, true, fuzz_srtp_get_protect_length },
 | 
						|
    { fuzz_srtp_unprotect, false, NULL },
 | 
						|
    { fuzz_srtp_protect_rtcp, true, fuzz_srtp_get_protect_rtcp_length },
 | 
						|
    { fuzz_srtp_unprotect_rtcp, false, NULL },
 | 
						|
    { fuzz_srtp_protect_mki, true, fuzz_srtp_get_protect_mki_length },
 | 
						|
    { fuzz_srtp_unprotect_mki, false, NULL },
 | 
						|
    { fuzz_srtp_protect_rtcp_mki, true, fuzz_srtp_get_protect_rtcp_mki_length },
 | 
						|
    { fuzz_srtp_unprotect_rtcp_mki, false, NULL }
 | 
						|
};
 | 
						|
 | 
						|
struct fuzz_srtp_crypto_policy_func_ext {
 | 
						|
    fuzz_srtp_crypto_policy_func crypto_policy_func;
 | 
						|
    const char *name;
 | 
						|
};
 | 
						|
 | 
						|
const struct fuzz_srtp_crypto_policy_func_ext fuzz_srtp_crypto_policies[] = {
 | 
						|
    { srtp_crypto_policy_set_rtp_default, "" },
 | 
						|
    { srtp_crypto_policy_set_rtcp_default, "" },
 | 
						|
    { srtp_crypto_policy_set_aes_cm_128_hmac_sha1_32,
 | 
						|
      "srtp_crypto_policy_set_aes_cm_128_hmac_sha1_32" },
 | 
						|
    { srtp_crypto_policy_set_aes_cm_128_null_auth,
 | 
						|
      "srtp_crypto_policy_set_aes_cm_128_null_auth" },
 | 
						|
    { srtp_crypto_policy_set_aes_cm_256_hmac_sha1_32,
 | 
						|
      "srtp_crypto_policy_set_aes_cm_256_hmac_sha1_32" },
 | 
						|
    { srtp_crypto_policy_set_aes_cm_256_hmac_sha1_80,
 | 
						|
      "srtp_crypto_policy_set_aes_cm_256_hmac_sha1_80" },
 | 
						|
    { srtp_crypto_policy_set_aes_cm_256_null_auth,
 | 
						|
      "srtp_crypto_policy_set_aes_cm_256_null_auth" },
 | 
						|
    { srtp_crypto_policy_set_null_cipher_hmac_null,
 | 
						|
      "srtp_crypto_policy_set_null_cipher_hmac_null" },
 | 
						|
    { srtp_crypto_policy_set_null_cipher_hmac_sha1_80,
 | 
						|
      "srtp_crypto_policy_set_null_cipher_hmac_sha1_80" },
 | 
						|
#ifdef OPENSSL
 | 
						|
    { srtp_crypto_policy_set_aes_cm_192_hmac_sha1_32,
 | 
						|
      "srtp_crypto_policy_set_aes_cm_192_hmac_sha1_32" },
 | 
						|
    { srtp_crypto_policy_set_aes_cm_192_hmac_sha1_80,
 | 
						|
      "srtp_crypto_policy_set_aes_cm_192_hmac_sha1_80" },
 | 
						|
    { srtp_crypto_policy_set_aes_cm_192_null_auth,
 | 
						|
      "srtp_crypto_policy_set_aes_cm_192_null_auth" },
 | 
						|
    { srtp_crypto_policy_set_aes_gcm_128_16_auth,
 | 
						|
      "srtp_crypto_policy_set_aes_gcm_128_16_auth" },
 | 
						|
    { srtp_crypto_policy_set_aes_gcm_128_8_auth,
 | 
						|
      "srtp_crypto_policy_set_aes_gcm_128_8_auth" },
 | 
						|
    { srtp_crypto_policy_set_aes_gcm_128_8_only_auth,
 | 
						|
      "srtp_crypto_policy_set_aes_gcm_128_8_only_auth" },
 | 
						|
    { srtp_crypto_policy_set_aes_gcm_256_16_auth,
 | 
						|
      "srtp_crypto_policy_set_aes_gcm_256_16_auth" },
 | 
						|
    { srtp_crypto_policy_set_aes_gcm_256_8_auth,
 | 
						|
      "srtp_crypto_policy_set_aes_gcm_256_8_auth" },
 | 
						|
    { srtp_crypto_policy_set_aes_gcm_256_8_only_auth,
 | 
						|
      "srtp_crypto_policy_set_aes_gcm_256_8_only_auth" },
 | 
						|
#endif
 | 
						|
};
 | 
						|
 | 
						|
struct fuzz_srtp_ssrc_type_ext {
 | 
						|
    srtp_ssrc_type_t srtp_ssrc_type;
 | 
						|
    const char *name;
 | 
						|
};
 | 
						|
 | 
						|
const struct fuzz_srtp_ssrc_type_ext fuzz_ssrc_type_map[] = {
 | 
						|
    { ssrc_undefined, "ssrc_undefined" },
 | 
						|
    { ssrc_specific, "ssrc_specific" },
 | 
						|
    { ssrc_any_inbound, "ssrc_any_inbound" },
 | 
						|
    { ssrc_any_outbound, "ssrc_any_outbound" },
 | 
						|
};
 |