| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- package srtp
- import "fmt"
- // ProtectionProfile specifies Cipher and AuthTag details, similar to TLS cipher suite
- type ProtectionProfile uint16
- // Supported protection profiles
- // See https://www.iana.org/assignments/srtp-protection/srtp-protection.xhtml
- const (
- ProtectionProfileAes128CmHmacSha1_80 ProtectionProfile = 0x0001
- ProtectionProfileAes128CmHmacSha1_32 ProtectionProfile = 0x0002
- ProtectionProfileAeadAes128Gcm ProtectionProfile = 0x0007
- )
- func (p ProtectionProfile) keyLen() (int, error) {
- switch p {
- case ProtectionProfileAes128CmHmacSha1_32, ProtectionProfileAes128CmHmacSha1_80, ProtectionProfileAeadAes128Gcm:
- return 16, nil
- default:
- return 0, fmt.Errorf("%w: %#v", errNoSuchSRTPProfile, p)
- }
- }
- func (p ProtectionProfile) saltLen() (int, error) {
- switch p {
- case ProtectionProfileAes128CmHmacSha1_32, ProtectionProfileAes128CmHmacSha1_80:
- return 14, nil
- case ProtectionProfileAeadAes128Gcm:
- return 12, nil
- default:
- return 0, fmt.Errorf("%w: %#v", errNoSuchSRTPProfile, p)
- }
- }
- func (p ProtectionProfile) rtpAuthTagLen() (int, error) {
- switch p {
- case ProtectionProfileAes128CmHmacSha1_80:
- return 10, nil
- case ProtectionProfileAes128CmHmacSha1_32:
- return 4, nil
- case ProtectionProfileAeadAes128Gcm:
- return 0, nil
- default:
- return 0, fmt.Errorf("%w: %#v", errNoSuchSRTPProfile, p)
- }
- }
- func (p ProtectionProfile) rtcpAuthTagLen() (int, error) {
- switch p {
- case ProtectionProfileAes128CmHmacSha1_32, ProtectionProfileAes128CmHmacSha1_80:
- return 10, nil
- case ProtectionProfileAeadAes128Gcm:
- return 0, nil
- default:
- return 0, fmt.Errorf("%w: %#v", errNoSuchSRTPProfile, p)
- }
- }
- func (p ProtectionProfile) aeadAuthTagLen() (int, error) {
- switch p {
- case ProtectionProfileAes128CmHmacSha1_32, ProtectionProfileAes128CmHmacSha1_80:
- return 0, nil
- case ProtectionProfileAeadAes128Gcm:
- return 16, nil
- default:
- return 0, fmt.Errorf("%w: %#v", errNoSuchSRTPProfile, p)
- }
- }
- func (p ProtectionProfile) authKeyLen() (int, error) {
- switch p {
- case ProtectionProfileAes128CmHmacSha1_32, ProtectionProfileAes128CmHmacSha1_80:
- return 20, nil
- case ProtectionProfileAeadAes128Gcm:
- return 0, nil
- default:
- return 0, fmt.Errorf("%w: %#v", errNoSuchSRTPProfile, p)
- }
- }
|