public void BytePrefixedArray_TooBig() { var bytes = new byte[byte.MaxValue + 1]; var writer = new WireWriter(new MemoryStream()); ExceptionAssert.Throws <ArgumentException>(() => writer.WriteByteLengthPrefixedBytes(bytes)); }
/// <inheritdoc /> public override void WriteData(WireWriter writer) { writer.WriteByte((byte)HashAlgorithm); writer.WriteByte(Flags); writer.WriteUInt16(Iterations); writer.WriteByteLengthPrefixedBytes(Salt); }
/// <inheritdoc /> public override void WriteData(WireWriter writer) { writer.WriteUInt16(KeyTag); writer.WriteByte((byte)Algorithm); writer.WriteByte((byte)HashAlgorithm); writer.WriteBytes(Digest); }
public void Uint48TooBig() { var ms = new MemoryStream(); var writer = new WireWriter(ms); writer.WriteUInt48(0X1FFFFFFFFFFFFul); }
/// <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); } }
/// <inheritdoc /> public override void WriteData(WireWriter writer) { writer.WriteUInt16(Priority); writer.WriteUInt16(Weight); writer.WriteUInt16(Port); writer.WriteDomainName(Target); }
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()); }
/// <inheritdoc /> public override void WriteData(WireWriter writer) { foreach (var algorithm in Algorithms) { writer.WriteByte((byte)algorithm); } }
/// <inheritdoc /> public override void WriteData(WireWriter writer) { writer.WriteUInt16((ushort)Flags); writer.WriteByte(Protocol); writer.WriteByte((byte)Algorithm); writer.WriteBytes(PublicKey); }
/// <inheritdoc /> public override void WriteData(WireWriter writer) { foreach (var s in Strings) { writer.WriteString(s); } }
/// <inheritdoc /> public override void WriteData(WireWriter writer) { if (Timeout.HasValue) { writer.WriteUInt16((ushort)(Timeout.Value.TotalMilliseconds / 100)); } }
/// <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); }
/// <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)); }
/// <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); } }
/// <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()); } }
/// <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); }
/// <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); }
/// <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); }
/// <inheritdoc /> public override void WriteData(WireWriter writer) { foreach (var option in Options) { writer.WriteUInt16((ushort)option.Type); writer.PushLengthPrefixedScope(); option.WriteData(writer); writer.PopLengthPrefixedScope(); } }
/// <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(); }
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)); }); }
/// <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); }
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()); }
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); }
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"); }
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()); }
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); }
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()); }
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()); }
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); }