package srtp
const labelExtractorDtlsSrtp = "EXTRACTOR-dtls_srtp"
type KeyingMaterialExporter interface {
ExportKeyingMaterial (label string , context []byte , length int ) ([]byte , error )
}
func (c *Config ) ExtractSessionKeysFromDTLS (exporter KeyingMaterialExporter , isClient bool ) error {
keyLen , err := c .Profile .KeyLen ()
if err != nil {
return err
}
saltLen , err := c .Profile .SaltLen ()
if err != nil {
return err
}
keyingMaterial , err := exporter .ExportKeyingMaterial (labelExtractorDtlsSrtp , nil , (keyLen *2 )+(saltLen *2 ))
if err != nil {
return err
}
offset := 0
clientWriteKey := append ([]byte {}, keyingMaterial [offset :offset +keyLen ]...)
offset += keyLen
serverWriteKey := append ([]byte {}, keyingMaterial [offset :offset +keyLen ]...)
offset += keyLen
clientWriteKey = append (clientWriteKey , keyingMaterial [offset :offset +saltLen ]...)
offset += saltLen
serverWriteKey = append (serverWriteKey , keyingMaterial [offset :offset +saltLen ]...)
if isClient {
c .Keys .LocalMasterKey = clientWriteKey [0 :keyLen ]
c .Keys .LocalMasterSalt = clientWriteKey [keyLen :]
c .Keys .RemoteMasterKey = serverWriteKey [0 :keyLen ]
c .Keys .RemoteMasterSalt = serverWriteKey [keyLen :]
return nil
}
c .Keys .LocalMasterKey = serverWriteKey [0 :keyLen ]
c .Keys .LocalMasterSalt = serverWriteKey [keyLen :]
c .Keys .RemoteMasterKey = clientWriteKey [0 :keyLen ]
c .Keys .RemoteMasterSalt = clientWriteKey [keyLen :]
return nil
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .