summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaiki Ueno <ueno@gnu.org>2022-12-24 17:37:24 +0900
committerDaiki Ueno <ueno@gnu.org>2022-12-24 17:37:24 +0900
commitbfef061bb878f6632e18037156599d746eaadd4f (patch)
tree152f26bc0eb964ca4bfa3554d080aa0e412f4d39
parentd39640db956af253bc97e33981bfee3e65434b33 (diff)
downloadgnutls-bfef061bb878f6632e18037156599d746eaadd4f.tar.gz
srtp: support AES-GCM profiles
This adds support for SRTP_AEAD_AES_128_GCM and SRTP_AEAD_AES_256_GCM profiles defined in RFC 7714. Signed-off-by: Daiki Ueno <ueno@gnu.org>
-rw-r--r--NEWS2
-rw-r--r--lib/ext/srtp.c38
-rw-r--r--lib/includes/gnutls/gnutls.h.in6
3 files changed, 33 insertions, 13 deletions
diff --git a/NEWS b/NEWS
index a45cbc89e8..7a81687268 100644
--- a/NEWS
+++ b/NEWS
@@ -31,6 +31,8 @@ and to simplify maintenance, see <https://gitlab.com/gnutls/guile/>.
** API and ABI modifications:
GNUTLS_NO_STATUS_REQUEST: New flag
+GNUTLS_SRTP_AEAD_AES_128_GCM: New gnutls_srtp_profile_t enum member
+GNUTLS_SRTP_AEAD_AES_256_GCM: New gnutls_srtp_profile_t enum member
* Version 3.7.8 (released 2022-09-27)
diff --git a/lib/ext/srtp.c b/lib/ext/srtp.c
index b2e36b3a06..ec9ae31acb 100644
--- a/lib/ext/srtp.c
+++ b/lib/ext/srtp.c
@@ -64,21 +64,35 @@ typedef struct {
static const srtp_profile_st profile_names[] = {
{
- "SRTP_AES128_CM_HMAC_SHA1_80",
- GNUTLS_SRTP_AES128_CM_HMAC_SHA1_80,
- 16, 14},
+ "SRTP_AES128_CM_HMAC_SHA1_80",
+ GNUTLS_SRTP_AES128_CM_HMAC_SHA1_80,
+ 16, 14
+ },
{
- "SRTP_AES128_CM_HMAC_SHA1_32",
- GNUTLS_SRTP_AES128_CM_HMAC_SHA1_32,
- 16, 14},
+ "SRTP_AES128_CM_HMAC_SHA1_32",
+ GNUTLS_SRTP_AES128_CM_HMAC_SHA1_32,
+ 16, 14
+ },
{
- "SRTP_NULL_HMAC_SHA1_80",
- GNUTLS_SRTP_NULL_HMAC_SHA1_80,
- 16, 14},
+ "SRTP_NULL_HMAC_SHA1_80",
+ GNUTLS_SRTP_NULL_HMAC_SHA1_80,
+ 16, 14
+ },
{
- "SRTP_NULL_SHA1_32",
- GNUTLS_SRTP_NULL_HMAC_SHA1_32,
- 16, 14},
+ "SRTP_NULL_SHA1_32",
+ GNUTLS_SRTP_NULL_HMAC_SHA1_32,
+ 16, 14
+ },
+ {
+ "SRTP_AEAD_AES_128_GCM",
+ GNUTLS_SRTP_AEAD_AES_128_GCM,
+ 16, 12
+ },
+ {
+ "SRTP_AEAD_AES_256_GCM",
+ GNUTLS_SRTP_AEAD_AES_256_GCM,
+ 32, 12
+ },
{
NULL,
0, 0, 0}
diff --git a/lib/includes/gnutls/gnutls.h.in b/lib/includes/gnutls/gnutls.h.in
index 830ce5f95c..bbb4336ae9 100644
--- a/lib/includes/gnutls/gnutls.h.in
+++ b/lib/includes/gnutls/gnutls.h.in
@@ -1704,6 +1704,8 @@ int gnutls_session_ticket_send(gnutls_session_t session, unsigned nr, unsigned f
* @GNUTLS_SRTP_AES128_CM_HMAC_SHA1_32: 128 bit AES with a 32 bit HMAC-SHA1
* @GNUTLS_SRTP_NULL_HMAC_SHA1_80: NULL cipher with a 80 bit HMAC-SHA1
* @GNUTLS_SRTP_NULL_HMAC_SHA1_32: NULL cipher with a 32 bit HMAC-SHA1
+ * @GNUTLS_SRTP_AEAD_AES_128_GCM: 128 bit AES with GCM
+ * @GNUTLS_SRTP_AEAD_AES_256_GCM: 256 bit AES with GCM
*
* Enumeration of different SRTP protection profiles.
*/
@@ -1711,7 +1713,9 @@ typedef enum {
GNUTLS_SRTP_AES128_CM_HMAC_SHA1_80 = 0x0001,
GNUTLS_SRTP_AES128_CM_HMAC_SHA1_32 = 0x0002,
GNUTLS_SRTP_NULL_HMAC_SHA1_80 = 0x0005,
- GNUTLS_SRTP_NULL_HMAC_SHA1_32 = 0x0006
+ GNUTLS_SRTP_NULL_HMAC_SHA1_32 = 0x0006,
+ GNUTLS_SRTP_AEAD_AES_128_GCM = 0x0007,
+ GNUTLS_SRTP_AEAD_AES_256_GCM = 0x0008
} gnutls_srtp_profile_t;
int gnutls_srtp_set_profile(gnutls_session_t session,