public KdfResult DeriveKey(int keyLength, BitString keyMaster, BitString saltMaster, BitString kdr, BitString index, BitString srtcpIndex) { if (keyMaster.BitLength != 128 && keyMaster.BitLength != 192 && keyMaster.BitLength != 256) { return(new KdfResult("Invalid Master Key, must be 128, 192, or 256-bit")); } if (saltMaster.BitLength != 112) { return(new KdfResult("Invalid Master Salt, must be 112-bit")); } if (index.BitLength != 48) { return(new KdfResult("Invalid SRTP Index, must be 48-bit")); } if (srtcpIndex.BitLength != 32) { return(new KdfResult("Invalid SRTCP Index, must be 32-bit")); } // Ke = Encryption Key, Ka = Authentication Key (for a HMAC-SHA-1), Ks = Salting Key var srtpKe = Kdf(keyLength, keyMaster, saltMaster, kdr, index, new BitString("00")); var srtpKa = Kdf(160, keyMaster, saltMaster, kdr, index, new BitString("01")); var srtpKs = Kdf(112, keyMaster, saltMaster, kdr, index, new BitString("02")); var srtpResult = new SrtpResult(srtpKe, srtpKa, srtpKs); var srtcpKe = Kdf(keyLength, keyMaster, saltMaster, kdr, srtcpIndex, new BitString("03")); var srtcpKa = Kdf(160, keyMaster, saltMaster, kdr, srtcpIndex, new BitString("04")); var srtcpKs = Kdf(112, keyMaster, saltMaster, kdr, srtcpIndex, new BitString("05")); var srtcpResult = new SrtpResult(srtcpKe, srtcpKa, srtcpKs); return(new KdfResult(srtpResult, srtcpResult)); }
public KdfResult(SrtpResult srtp, SrtpResult srtcp) { SrtpResult = srtp; SrtcpResult = srtcp; }