diff options
Diffstat (limited to 'vendor/github.com/pion/srtp/v2/srtp_cipher.go')
-rw-r--r-- | vendor/github.com/pion/srtp/v2/srtp_cipher.go | 46 |
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. +*/ |