コード例 #1
0
ファイル: DmpPingPackets.cs プロジェクト: ciprianp/dcomms
        public static DmpPingPacket DecodeAndVerify(byte[] udpData, InviteSession session)
        {
            var reader = BinaryProcedures.CreateBinaryReader(udpData, 1);

            var r = new DmpPingPacket();

            r.DirectChannelToken32 = DirectChannelToken32.Decode(reader);
            r.PingRequestId32      = reader.ReadUInt32();

            var flags = reader.ReadByte();

            if ((flags & FlagsMask_MustBeZero) != 0)
            {
                throw new NotImplementedException();
            }

            if ((flags & Flags_PublicEcdheKeySet) != 0)
            {
                r.PublicEcdheKey = EcdhPublicKey.Decode(reader);
            }

            r.PingPongHMAC = HMAC.Decode(reader);

            // verify DirectChannelToken32
            if (!r.DirectChannelToken32.Equals(session.LocalSessionDescription.DirectChannelToken32))
            {
                throw new BadSignatureException("invalid DMP PING DirectChannelToken32 136");
            }

            // verify PingPongHMAC
            if (r.PingPongHMAC.Equals(
                    session.GetPingPongHMAC(r.GetSignedFieldsForPingPongHMAC)
                    ) == false)
            {
                throw new BadSignatureException("invalid DMP PING PingPongHMAC 1237");
            }

            return(r);
        }
コード例 #2
0
        public static MessageStartPacket Decode(byte[] udpData)
        {
            var r = new MessageStartPacket();

            r.DecodedUdpData = udpData;
            var reader = BinaryProcedures.CreateBinaryReader(udpData, 1);

            r.DirectChannelToken32 = DirectChannelToken32.Decode(reader);
            r.MessageId32          = reader.ReadUInt32();

            var flags = reader.ReadByte();

            if ((flags & FlagsMask_MustBeZero) != 0)
            {
                throw new NotImplementedException();
            }

            r.MessageTimestamp64   = reader.ReadInt64();
            r.EncryptedMessageData = BinaryProcedures.DecodeByteArray65536(reader);
            r.MessageHMAC          = HMAC.Decode(reader);
            return(r);
        }
コード例 #3
0
ファイル: DmpPingPackets.cs プロジェクト: ciprianp/dcomms
        public static DmpPongPacket Decode(byte[] udpData)
        {
            var reader = BinaryProcedures.CreateBinaryReader(udpData, 1);
            var r      = new DmpPongPacket();

            r.DirectChannelToken32 = DirectChannelToken32.Decode(reader);
            r.PingRequestId32      = reader.ReadUInt32();
            var flags = reader.ReadByte();

            if ((flags & FlagsMask_MustBeZero) != 0)
            {
                throw new NotImplementedException();
            }

            if ((flags & Flags_PublicEcdheKeySet) != 0)
            {
                r.PublicEcdheKey = EcdhPublicKey.Decode(reader);
            }

            r.PingPongHMAC = HMAC.Decode(reader);

            return(r);
        }