Esempio n. 1
0
        public void BytePrefixedArray_TooBig()
        {
            var bytes  = new byte[byte.MaxValue + 1];
            var writer = new WireWriter(new MemoryStream());

            ExceptionAssert.Throws <ArgumentException>(() => writer.WriteByteLengthPrefixedBytes(bytes));
        }
Esempio n. 2
0
 /// <inheritdoc />
 public override void WriteData(WireWriter writer)
 {
     writer.WriteByte((byte)HashAlgorithm);
     writer.WriteByte(Flags);
     writer.WriteUInt16(Iterations);
     writer.WriteByteLengthPrefixedBytes(Salt);
 }
Esempio n. 3
0
 /// <inheritdoc />
 public override void WriteData(WireWriter writer)
 {
     writer.WriteUInt16(KeyTag);
     writer.WriteByte((byte)Algorithm);
     writer.WriteByte((byte)HashAlgorithm);
     writer.WriteBytes(Digest);
 }
Esempio n. 4
0
        public void Uint48TooBig()
        {
            var ms     = new MemoryStream();
            var writer = new WireWriter(ms);

            writer.WriteUInt48(0X1FFFFFFFFFFFFul);
        }
Esempio n. 5
0
        /// <inheritdoc />
        public override void Write(WireWriter writer)
        {
            writer.WriteUInt16(Id);
            var flags =
                (Convert.ToInt32(QR) << 15) |
                (((ushort)Opcode & 0xf) << 11) |
                ((Z & 0x7F) << 4) |
                ((ushort)Status & 0xf);

            writer.WriteUInt16((ushort)flags);
            writer.WriteUInt16((ushort)1);
            writer.WriteUInt16((ushort)Prerequisites.Count);
            writer.WriteUInt16((ushort)Updates.Count);
            writer.WriteUInt16((ushort)AdditionalResources.Count);
            Zone.Write(writer);
            foreach (var r in Prerequisites)
            {
                r.Write(writer);
            }
            foreach (var r in Updates)
            {
                r.Write(writer);
            }
            foreach (var r in AdditionalResources)
            {
                r.Write(writer);
            }
        }
Esempio n. 6
0
 /// <inheritdoc />
 public override void WriteData(WireWriter writer)
 {
     writer.WriteUInt16(Priority);
     writer.WriteUInt16(Weight);
     writer.WriteUInt16(Port);
     writer.WriteDomainName(Target);
 }
Esempio n. 7
0
        public void Bitmap()
        {
            // From https://tools.ietf.org/html/rfc3845#section-2.3
            var wire = new byte[]
            {
                0x00, 0x06, 0x40, 0x01, 0x00, 0x00, 0x00, 0x03,
                0x04, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x20
            };
            var ms     = new MemoryStream(wire, false);
            var reader = new WireReader(ms);
            var first  = new ushort[] { 1, 15, 46, 47 };
            var second = new ushort[] { 1234 };

            CollectionAssert.AreEqual(first, reader.ReadBitmap());
            CollectionAssert.AreEqual(second, reader.ReadBitmap());

            ms = new MemoryStream();
            var writer = new WireWriter(ms);

            writer.WriteBitmap(new ushort[] { 1, 15, 46, 47, 1234 });
            CollectionAssert.AreEqual(wire, ms.ToArray());
        }
Esempio n. 8
0
 /// <inheritdoc />
 public override void WriteData(WireWriter writer)
 {
     foreach (var algorithm in Algorithms)
     {
         writer.WriteByte((byte)algorithm);
     }
 }
Esempio n. 9
0
 /// <inheritdoc />
 public override void WriteData(WireWriter writer)
 {
     writer.WriteUInt16((ushort)Flags);
     writer.WriteByte(Protocol);
     writer.WriteByte((byte)Algorithm);
     writer.WriteBytes(PublicKey);
 }
Esempio n. 10
0
 /// <inheritdoc />
 public override void WriteData(WireWriter writer)
 {
     foreach (var s in Strings)
     {
         writer.WriteString(s);
     }
 }
Esempio n. 11
0
 /// <inheritdoc />
 public override void WriteData(WireWriter writer)
 {
     if (Timeout.HasValue)
     {
         writer.WriteUInt16((ushort)(Timeout.Value.TotalMilliseconds / 100));
     }
 }
Esempio n. 12
0
        /// <summary>
        ///   Length in bytes of the object when serialised.
        /// </summary>
        /// <returns>
        ///   Numbers of bytes when serialised.
        /// </returns>
        public int Length()
        {
            var writer = new WireWriter(Stream.Null);

            Write(writer);

            return(writer.Position);
        }
Esempio n. 13
0
 /// <inheritdoc />
 public override void WriteData(WireWriter writer)
 {
     writer.WriteByte((byte)HashAlgorithm);
     writer.WriteByte((byte)Flags);
     writer.WriteUInt16(Iterations);
     writer.WriteByteLengthPrefixedBytes(Salt);
     writer.WriteByteLengthPrefixedBytes(NextHashedOwnerName);
     writer.WriteBitmap(Types.Select(t => (ushort)t));
 }
Esempio n. 14
0
 /// <summary>
 ///   The length of the resource specific data.
 /// </summary>
 /// <returns>
 ///   Number of bytes to represent the resource specific data.
 /// </returns>
 /// <remarks>
 ///   This is referred to as the <c>RDLENGTH</c> in the DNS spec.
 /// </remarks>
 public int GetDataLength()
 {
     using (var ms = new MemoryStream())
     {
         var writer = new WireWriter(ms);
         this.WriteData(writer);
         return((int)ms.Length);
     }
 }
Esempio n. 15
0
 /// <summary>
 ///   The resource specific data.
 /// </summary>
 /// <returns>
 ///   A byte array, never <b>null</b>.
 /// </returns>
 /// <remarks>
 ///   This is referred to as the <c>RDATA</c> in the DNS spec.
 /// </remarks>
 public byte[] GetData()
 {
     using (var ms = new MemoryStream())
     {
         var writer = new WireWriter(ms);
         this.WriteData(writer);
         return(ms.ToArray());
     }
 }
Esempio n. 16
0
 /// <inheritdoc />
 public override void WriteData(WireWriter writer)
 {
     writer.WriteDomainName(PrimaryName);
     writer.WriteDomainName(Mailbox);
     writer.WriteUInt32(SerialNumber);
     writer.WriteTimeSpan32(Refresh);
     writer.WriteTimeSpan32(Retry);
     writer.WriteTimeSpan32(Expire);
     writer.WriteTimeSpan32(Minimum);
 }
Esempio n. 17
0
 /// <inheritdoc />
 public override void WriteData(WireWriter writer)
 {
     writer.WriteDomainName(Algorithm);
     writer.WriteDateTime32(Inception);
     writer.WriteDateTime32(Expiration);
     writer.WriteUInt16((ushort)Mode);
     writer.WriteUInt16((ushort)Error);
     writer.WriteUint16LengthPrefixedBytes(Key);
     writer.WriteUint16LengthPrefixedBytes(OtherData);
 }
Esempio n. 18
0
 /// <inheritdoc />
 public override void WriteData(WireWriter writer)
 {
     writer.WriteDomainName(Algorithm);
     writer.WriteDateTime48(TimeSigned);
     writer.WriteTimeSpan16(Fudge);
     writer.WriteUint16LengthPrefixedBytes(MAC);
     writer.WriteUInt16(OriginalMessageId);
     writer.WriteUInt16((ushort)Error);
     writer.WriteUint16LengthPrefixedBytes(OtherData);
 }
Esempio n. 19
0
        /// <inheritdoc />
        public override void WriteData(WireWriter writer)
        {
            foreach (var option in Options)
            {
                writer.WriteUInt16((ushort)option.Type);

                writer.PushLengthPrefixedScope();
                option.WriteData(writer);
                writer.PopLengthPrefixedScope();
            }
        }
Esempio n. 20
0
        /// <inheritdoc />
        public override void Write(WireWriter writer)
        {
            writer.WriteDomainName(Name);
            writer.WriteUInt16((ushort)Type);
            writer.WriteUInt16((ushort)Class);
            writer.WriteTimeSpan32(TTL);

            writer.PushLengthPrefixedScope();
            WriteData(writer);
            writer.PopLengthPrefixedScope();
        }
Esempio n. 21
0
        public void WriteDateTime32_TooManySeconds()
        {
            var writer = new WireWriter(Stream.Null);

            writer.WriteDateTime32(UnixEpoch);
            writer.WriteDateTime32(UnixEpoch.AddSeconds(uint.MaxValue));

            ExceptionAssert.Throws <OverflowException>(() =>
            {
                writer.WriteDateTime32(UnixEpoch.AddSeconds((long)(uint.MaxValue) + 1));
            });
        }
Esempio n. 22
0
 /// <inheritdoc />
 public override void WriteData(WireWriter writer)
 {
     writer.WriteUInt16((ushort)TypeCovered);
     writer.WriteByte((byte)Algorithm);
     writer.WriteByte(Labels);
     writer.WriteTimeSpan32(OriginalTTL);
     writer.WriteDateTime32(SignatureExpiration);
     writer.WriteDateTime32(SignatureInception);
     writer.WriteUInt16(KeyTag);
     writer.WriteDomainName(SignerName, uncompressed: true);
     writer.WriteBytes(Signature);
 }
Esempio n. 23
0
        public void NullDomainName_Class()
        {
            var ms     = new MemoryStream();
            var writer = new WireWriter(ms);

            writer.WriteDomainName((DomainName)null);
            writer.WriteString("abc");

            ms.Position = 0;
            var reader = new WireReader(ms);

            Assert.AreEqual("", reader.ReadDomainName());
            Assert.AreEqual("abc", reader.ReadString());
        }
Esempio n. 24
0
        public void Read_EscapedDotDomainName()
        {
            var domainName = @"a\.b";
            var ms         = new MemoryStream();
            var writer     = new WireWriter(ms);

            writer.WriteDomainName(domainName);

            ms.Position = 0;
            var reader = new WireReader(ms);
            var name   = reader.ReadDomainName();

            Assert.AreEqual(domainName, name);
        }
Esempio n. 25
0
        public void Write_EscapedDomainName()
        {
            var ms     = new MemoryStream();
            var writer = new WireWriter(ms);

            writer.WriteDomainName(@"a\.b");

            ms.Position = 0;
            Assert.AreEqual(3, ms.ReadByte(), "length of 'a.b'");
            Assert.AreEqual('a', (char)ms.ReadByte());
            Assert.AreEqual('.', (char)ms.ReadByte());
            Assert.AreEqual('b', (char)ms.ReadByte());
            Assert.AreEqual(0, ms.ReadByte(), "trailing nul");
        }
Esempio n. 26
0
        public void CanonicalDomainName()
        {
            var ms     = new MemoryStream();
            var writer = new WireWriter(ms)
            {
                CanonicalForm = true
            };

            writer.WriteDomainName("FOO");
            writer.WriteDomainName("FOO");
            Assert.AreEqual(5 * 2, writer.Position);

            ms.Position = 0;
            var reader = new WireReader(ms);

            Assert.AreEqual("foo", reader.ReadDomainName());
            Assert.AreEqual("foo", reader.ReadDomainName());
        }
Esempio n. 27
0
        public void Writing()
        {
            var ms     = new MemoryStream();
            var writer = new WireWriter(ms);

            writer.WriteDomainName("a");
            writer.WriteDomainName("b");
            writer.WriteDomainName("b");
            var bytes    = ms.ToArray();
            var expected = new byte[]
            {
                0x01, (byte)'a', 0,
                0x01, (byte)'b', 0,
                0XC0, 3
            };

            CollectionAssert.AreEqual(expected, bytes);
        }
Esempio n. 28
0
        public void Writing_Past_MaxPointer()
        {
            var ms     = new MemoryStream();
            var writer = new WireWriter(ms);

            writer.WriteBytes(new byte[0x4000]);
            writer.WriteDomainName("a");
            writer.WriteDomainName("b");
            writer.WriteDomainName("b");

            ms.Position = 0;
            var reader = new WireReader(ms);

            reader.ReadBytes(0x4000);
            Assert.AreEqual("a", reader.ReadDomainName());
            Assert.AreEqual("b", reader.ReadDomainName());
            Assert.AreEqual("b", reader.ReadDomainName());
        }
Esempio n. 29
0
        public void LengthPrefixedScope()
        {
            var ms     = new MemoryStream();
            var writer = new WireWriter(ms);

            writer.WriteString("abc");
            writer.PushLengthPrefixedScope();
            writer.WriteDomainName("a");
            writer.WriteDomainName("a");
            writer.PopLengthPrefixedScope();

            ms.Position = 0;
            var reader = new WireReader(ms);

            Assert.AreEqual("abc", reader.ReadString());
            Assert.AreEqual(5, reader.ReadUInt16());
            Assert.AreEqual("a", reader.ReadDomainName());
            Assert.AreEqual("a", reader.ReadDomainName());
        }
Esempio n. 30
0
        public void Writing_Labels()
        {
            var ms     = new MemoryStream();
            var writer = new WireWriter(ms);

            writer.WriteDomainName("a.b.c");
            writer.WriteDomainName("a.b.c");
            writer.WriteDomainName("b.c");
            writer.WriteDomainName("c");
            writer.WriteDomainName("x.b.c");
            var bytes    = ms.ToArray();
            var expected = new byte[]
            {
                0x01, (byte)'a', 0x01, (byte)'b', 0x01, (byte)'c', 00,
                0xC0, 0x00,
                0xC0, 0x02,
                0xC0, 0x04,
                0x01, (byte)'x', 0xC0, 0x02,
            };

            CollectionAssert.AreEqual(expected, bytes);
        }