예제 #1
0
        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));
        }
예제 #2
0
 public KdfResult(SrtpResult srtp, SrtpResult srtcp)
 {
     SrtpResult  = srtp;
     SrtcpResult = srtcp;
 }