summaryrefslogtreecommitdiff
path: root/vendor/github.com/pion/srtp/v2/srtp_cipher.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/pion/srtp/v2/srtp_cipher.go')
-rw-r--r--vendor/github.com/pion/srtp/v2/srtp_cipher.go46
1 files changed, 46 insertions, 0 deletions
diff --git a/vendor/github.com/pion/srtp/v2/srtp_cipher.go b/vendor/github.com/pion/srtp/v2/srtp_cipher.go
new file mode 100644
index 0000000..4c5cd88
--- /dev/null
+++ b/vendor/github.com/pion/srtp/v2/srtp_cipher.go
@@ -0,0 +1,46 @@
+package srtp
+
+import "github.com/pion/rtp"
+
+// cipher represents a implementation of one
+// of the SRTP Specific ciphers
+type srtpCipher interface {
+ // authTagLen returns auth key length of the cipher.
+ // See the note below.
+ authTagLen() int
+ // aeadAuthTagLen returns AEAD auth key length of the cipher.
+ // See the note below.
+ aeadAuthTagLen() int
+ getRTCPIndex([]byte) uint32
+
+ encryptRTP([]byte, *rtp.Header, []byte, uint32) ([]byte, error)
+ encryptRTCP([]byte, []byte, uint32, uint32) ([]byte, error)
+
+ decryptRTP([]byte, []byte, *rtp.Header, uint32) ([]byte, error)
+ decryptRTCP([]byte, []byte, uint32, uint32) ([]byte, error)
+}
+
+/*
+NOTE: Auth tag and AEAD auth tag are placed at the different position in SRTCP
+
+In non-AEAD cipher, the authentication tag is placed *after* the ESRTCP word
+(Encrypted-flag and SRTCP index).
+
+> AES_128_CM_HMAC_SHA1_80
+> | RTCP Header | Encrypted payload |E| SRTCP Index | Auth tag |
+> ^ |----------|
+> | ^
+> | authTagLen=10
+> aeadAuthTagLen=0
+
+In AEAD cipher, the AEAD authentication tag is embedded in the ciphertext.
+It is *before* the ESRTCP word (Encrypted-flag and SRTCP index).
+
+> AEAD_AES_128_GCM
+> | RTCP Header | Encrypted payload | AEAD auth tag |E| SRTCP Index |
+> |---------------| ^
+> ^ authTagLen=0
+> aeadAuthTagLen=16
+
+See https://tools.ietf.org/html/rfc7714 for the full specifications.
+*/