public void Read_Protected_ResultBytesAreExpected() { //Arrange var messageBytes = Utils.ParseHexString(GetProtectedMessageHex()); var destConnectionId = PacketConnectionId.Empty; var packetNumbers = GetPacketNumbersHex(); var currentPacketNumber = PacketNumber.Parse(Utils.ParseHexString(packetNumbers.Current)); var largestPacketNumber = PacketNumber.Parse(Utils.ParseHexString(packetNumbers.Largest)); var secrets = GetSecrets(); var aead = Cipher.TLS_CHACHA20_POLY1305_SHA256.CreateAead(Utils.ParseHexString(secrets.Iv), Utils.ParseHexString(secrets.Key)); var cipher = Cipher.TLS_CHACHA20_POLY1305_SHA256.CreateCipher(Utils.ParseHexString(secrets.Hp)); //Act var cursor = new MemoryCursor(messageBytes); var result = ShortPacket.TryParseProtectedByConnectionId(aead, cipher, cursor, destConnectionId, largestPacketNumber, out var packet); using (packet.Payload.SetCursor(cursor)) { result &= PingFrame.TryParse(cursor); result &= cursor.IsEnd(); } result &= cursor.IsEnd(); //Assert Assert.True(result); Assert.Equal(destConnectionId, packet.DestinationConnectionId); Assert.Equal(currentPacketNumber, packet.Number); }
public void Write_Encrypted_ResultBytesAreExpected() { //Arrange var expectedBytes = GetProtectedMessageHex(); var buffer = new byte[PacketBuffer.MaxPacketSize]; var version = PacketVersion.CreateByDraft(32); var connectionIds = GetConnectionIdsHex(); var sourceConnectionId = PacketConnectionId.Parse(Utils.ParseHexString(connectionIds.SourceConnectionIdHex)); var destConnectionId = PacketConnectionId.Parse(Utils.ParseHexString(connectionIds.DestConnectionIdHex)); var packetNumber = PacketNumber.Parse(Utils.ParseHexString(GetPacketNumberHex())); var token = PacketToken.Empty; var clientHelloBytes = Utils.ParseHexString(GetTlsClientHelloHex()); var secrets = GetSecrets(); var aead = Cipher.TLS_AES_128_GCM_SHA256.CreateAead(Utils.ParseHexString(secrets.Iv), Utils.ParseHexString(secrets.Key)); var cipher = Cipher.TLS_AES_128_GCM_SHA256.CreateCipher(Utils.ParseHexString(secrets.Hp)); //Act var cursor = new MemoryCursor(buffer); using (InitialPacket.StartProtectedWriting(aead, cipher, cursor, version, destConnectionId, sourceConnectionId, packetNumber, token)) { using (PaddingFrame.EnsureLength(cursor, 1162)) { using (CryptoFrame.StartWriting(cursor, 0)) { clientHelloBytes.CopyTo(cursor); } } } //Assert Assert.Equal(expectedBytes, Utils.ToHexString(cursor.PeekStart().ToArray()), true); }
public static WritingContext StartWriting(MemoryCursor cursor, AckDelay delay, PacketNumber largestAcknowledged, int beforLargestAcknowledgedLength, AckEcnCounts?ecnFeedback = null) { if (beforLargestAcknowledgedLength < 0) { throw new EncodingException(); } FrameType .CreateAck(ecnFeedback.HasValue) .Write(cursor); largestAcknowledged.WriteVariable(cursor); delay.Write(cursor); var startPayloadOffset = cursor.AsOffset(); cursor.EncodeVariable32(beforLargestAcknowledgedLength); var startRangesOffset = cursor.AsOffset(); return(new WritingContext(cursor, ecnFeedback, startPayloadOffset, startRangesOffset)); }
/// <summary> /// Appends header specific attributes to <paramref name="attributes"/> dictionary. /// </summary> /// <param name="attributes">Dictionary to append header specific attributes to.</param> internal void AppendHeaderAttributes(Dictionary <string, string> attributes) { attributes.Add("Frame Type", (ushort)TypeID + ": " + TypeID); attributes.Add("Using Phasor File Format", UsePhasorDataFileFormat.ToString()); attributes.Add("Frame Length", FrameLength.ToString()); attributes.Add("Packet Number", PacketNumber.ToString()); attributes.Add("Word Count", WordCount.ToString()); }
private AckFrame(AckDelay delay, PacketNumber largestAcknowledged, AckRanges ranges, AckEcnCounts?ecnFeedback) { Delay = delay; LargestAcknowledged = largestAcknowledged; Ranges = ranges; EcnFeedback = ecnFeedback; }
public void Encode_ByLargestAcknowledged_ResultIsExpected(string initial, string largest, string expected) { //Arrange var initialNumber = PacketNumber.Parse(Utils.ParseHexString(initial)); var largestNumber = PacketNumber.Parse(Utils.ParseHexString(largest)); var expectedNumber = PacketNumber.Parse(Utils.ParseHexString(expected)); //Act var resultNumber = initialNumber.EncodeByLargestAcknowledged(largestNumber); //Assert Assert.Equal(expectedNumber, resultNumber); }
public void Decode_ByLargestAcknowledged_ResultIsExpected(string truncated, string largest, string expected) { //Arrange var truncatedNumber = PacketNumber.Parse(Utils.ParseHexString(truncated)); var largestNumber = PacketNumber.Parse(Utils.ParseHexString(largest)); var expectedNumber = PacketNumber.Parse(Utils.ParseHexString(expected)); //Act var resultNumber = truncatedNumber.DecodeByLargestAcknowledged(largestNumber); //Assert Assert.Equal(expectedNumber, resultNumber); }
/// <summary> /// Returns a <see cref="T:System.String"/> that represents the current <see cref="T:Microsoft.Xna.Framework.Input.GamePadState"/>. /// </summary> /// <returns>A <see cref="T:System.String"/> that represents the current <see cref="T:Microsoft.Xna.Framework.Input.GamePadState"/>.</returns> public override string ToString() { if (!IsConnected) { return("[GamePadState: IsConnected = 0]"); } return("[GamePadState: IsConnected=" + (IsConnected ? "1" : "0") + ", PacketNumber=" + PacketNumber.ToString("00000") + ", Buttons=" + Buttons + ", DPad=" + DPad + ", ThumbSticks=" + ThumbSticks + ", Triggers=" + Triggers + "]"); }
public void Read_Protected_ResultsAreExpected() { //Arrange var messageBytes = Utils.ParseHexString(GetProtectedMessageHex()); var version = PacketVersion.CreateByDraft(32); var connectionIds = GetConnectionIdsHex(); var sourceConnectionId = PacketConnectionId.Parse(Utils.ParseHexString(connectionIds.SourceConnectionIdHex)); var destConnectionId = PacketConnectionId.Parse(Utils.ParseHexString(connectionIds.DestConnectionIdHex)); var packetNumber = PacketNumber.Parse(Utils.ParseHexString(GetPacketNumberHex())); var token = PacketToken.Empty; var clientHelloBytes = GetTlsClientHelloHex(); var cryptoFrame = new CryptoFrame(); var paddingFrameCount = 0; var secrets = GetSecrets(); var aead = Cipher.TLS_AES_128_GCM_SHA256.CreateAead(Utils.ParseHexString(secrets.Iv), Utils.ParseHexString(secrets.Key)); var cipher = Cipher.TLS_AES_128_GCM_SHA256.CreateCipher(Utils.ParseHexString(secrets.Hp)); //Act var cursor = new MemoryCursor(messageBytes); var result = InitialPacket.TryParseProtected(aead, cipher, cursor, out var packet); using (packet.Payload.SetCursor(cursor)) { result &= CryptoFrame.TryParse(cursor, out cryptoFrame); paddingFrameCount = PaddingFrame.SkipRange(cursor); result &= cursor.IsEnd(); } result &= cursor.IsEnd(); //Assert Assert.True(result); Assert.Equal(917, paddingFrameCount); Assert.Equal(version, packet.Version); Assert.Equal(sourceConnectionId, packet.SourceConnectionId); Assert.Equal(destConnectionId, packet.DestinationConnectionId); Assert.Equal(packetNumber, packet.Number); Assert.Equal(token, packet.Token); Assert.Equal(0, cryptoFrame.Offset); Assert.Equal(clientHelloBytes, Utils.ToHexString(cryptoFrame.Data.Read(cursor).ToArray()), true); }
public static bool TryParse(MemoryCursor cursor, out AckFrame result) { result = new AckFrame(); var type = FrameType.Peek(cursor); if (!type.IsAck) { return(false); } type.Slice(cursor); var largestAcknowledged = PacketNumber.ParseVariable(cursor); var delay = AckDelay.Parse(cursor); var rangesCount = cursor.DecodeVariable32(); var ranges = SliceRanges(cursor, rangesCount + 1); var ecnFeedback = type.HasAckEcnFeedback ? AckEcnCounts.Parse(cursor) : new AckEcnCounts?(); result = new AckFrame(delay, largestAcknowledged, ranges, ecnFeedback); return(true); }
public void Write_Protected_ResultBytesAreExpected() { //Arrange var expectedBytes = GetProtectedMessageHex(); var buffer = new byte[PacketBuffer.MaxPacketSize]; var destConnectionId = PacketConnectionId.Empty; var packetNumbers = GetPacketNumbersHex(); var currentPacketNumber = PacketNumber.Parse(Utils.ParseHexString(packetNumbers.Current)); var largestPacketNumber = PacketNumber.Parse(Utils.ParseHexString(packetNumbers.Largest)); var secrets = GetSecrets(); var aead = Cipher.TLS_CHACHA20_POLY1305_SHA256.CreateAead(Utils.ParseHexString(secrets.Iv), Utils.ParseHexString(secrets.Key)); var cipher = Cipher.TLS_CHACHA20_POLY1305_SHA256.CreateCipher(Utils.ParseHexString(secrets.Hp)); //Act var cursor = new MemoryCursor(buffer); using (ShortPacket.StartProtectedWriting(aead, cipher, cursor, destConnectionId, currentPacketNumber, largestPacketNumber)) { PingFrame.Write(cursor); } //Assert Assert.Equal(expectedBytes, Utils.ToHexString(cursor.PeekStart().ToArray()), true); }
private bool Validate() { Valid = false; // La trama debe poseer exactamente 20 componentes una vez tokenizada; caso contrario esta mal formada. if (TokenizedDatagram.Length != 20) { return(false); } // La trama debe comenzar y terminar exactamente con marcas puntuales. ($B y $E, respectivamente). if (!TokenizedDatagram[0].Equals("$B")) { return(false); } if (!TokenizedDatagram[19].Equals("$E")) { return(false); } // Verifico los tipos de datos de la trama. if (!IMEI.All(char.IsDigit) || IMEI.Count() != 15) { return(false); } if (!PacketNumber.All(char.IsDigit) || PacketNumber.Count() != 4 || Convert.ToInt16(PacketNumber) < 1 || Convert.ToInt16(PacketNumber) > 1440) { return(false); } Valid = true; return(true); }
/// <summary> /// Appends header specific attributes to <paramref name="attributes"/> dictionary. /// </summary> /// <param name="attributes">Dictionary to append header specific attributes to.</param> internal void AppendHeaderAttributes(Dictionary <string, string> attributes) { attributes.Add("Frame Type", (ushort)TypeID + ": " + TypeID); attributes.Add("Frame Length", FrameLength.ToString()); attributes.Add("Header Length", Length.ToString()); attributes.Add("Payload Length", DataLength.ToString()); attributes.Add("Second of Century", SecondOfCentury.ToString()); attributes.Add("Fraction of Second", FractionOfSecond.ToString()); uint timeQualityFlags = (uint)TimeQualityFlags; attributes.Add("Time Quality Flags", timeQualityFlags.ToString()); if (timeQualityFlags > 0) { attributes.Add("Leap Second State", TimeQualityFlags.ToString()); } else { attributes.Add("Leap Second State", "No leap second is currently pending"); } attributes.Add("Time Quality Indicator Code", (uint)TimeQualityIndicatorCode + ": " + TimeQualityIndicatorCode); attributes.Add("Time Base", Timebase + (Timebase != Common.Timebase ? " - NON STANDARD" : "")); if (m_frameType != IEC61850_90_5.FrameType.DataFrame) { attributes.Add("Version", Version.ToString()); } else { attributes.Add("SPDU Length", m_spduLength.ToString()); attributes.Add("ASDU Payload Length", m_payloadSize.ToString()); attributes.Add("Packet Number", PacketNumber.ToString()); attributes.Add("Key ID", m_keyID.ToString("X").PadLeft(8, '0')); attributes.Add("Security Algorithm", (byte)m_securityAlgorithm + ": " + m_securityAlgorithm); attributes.Add("Signature Algorithm", (byte)m_signatureAlgorithm + ": " + m_signatureAlgorithm); if ((object)m_sourceHash != null && m_sourceHash.Length > 0) { attributes.Add("Parsed Signature Hash", ByteEncoding.Hexadecimal.GetString(m_sourceHash, ' ')); } else { attributes.Add("Parsed Signature Hash", "null"); } if ((object)m_calculatedHash != null && m_calculatedHash.Length > 0) { attributes.Add("Calculated Signature Hash", ByteEncoding.Hexadecimal.GetString(m_calculatedHash, ' ')); } else { attributes.Add("Calculated Signature Hash", "null"); } attributes.Add("Ignoring Checksum Validation", IgnoreSignatureValidationFailures.ToString()); attributes.Add("Number of ASDUs", m_asduCount.ToString()); attributes.Add("ConfigurationRevision", m_configurationRevision.ToString()); attributes.Add("Simulated Data", m_simulatedData.ToString()); attributes.Add("Application ID", m_applicationID.ToString()); attributes.Add("Using ETR Configuration", UseETRConfiguration.ToString()); attributes.Add("Configuration Guessing Allowed", GuessConfiguration.ToString()); attributes.Add("Parsing Redundant ASDUs", ParseRedundantASDUs.ToString()); attributes.Add("Ignoring Signature Validation Errors", IgnoreSignatureValidationFailures.ToString()); attributes.Add("Ignoring Sample Size Validation Errors", IgnoreSampleSizeValidationFailures.ToString()); attributes.Add("Selected Angle Format", m_angleFormat.ToString()); } }