Code
·
61 lines
·
1973 bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61using MailSharp.DNS;
using MailSharp.DNS.Records;
using System;
/*
* http://www.ietf.org/rfc/rfc2845.txt
*
* Field Name Data Type Notes
--------------------------------------------------------------
Algorithm Name domain-name Name of the algorithm
in domain name syntax.
Time Signed u_int48_t seconds since 1-Jan-70 UTC.
Fudge u_int16_t seconds of error permitted
in Time Signed.
MAC Size u_int16_t number of octets in MAC.
MAC octet stream defined by Algorithm Name.
Original ID u_int16_t original message ID
Error u_int16_t expanded RCODE covering
TSIG processing.
Other Len u_int16_t length, in octets, of
Other Data.
Other Data octet stream empty unless Error == BADTIME
*/
namespace MailSharp.DNS.Records;
public record RecordTSIG : DnsRecord
{
public string AlgorithmName { get; }
public long TimeSigned { get; }
public ushort Fudge { get; }
public ushort MacSize { get; }
public byte[] Mac { get; }
public ushort OriginalId { get; }
public ushort Error { get; }
public ushort OtherLen { get; }
public byte[] OtherData { get; }
public RecordTSIG(RecordReader rr) : base(rr)
{
AlgorithmName = rr.ReadDomainName();
uint high = rr.ReadUInt32();
uint low = rr.ReadUInt32();
TimeSigned = (long)high << 32 | low;
Fudge = rr.ReadUInt16();
MacSize = rr.ReadUInt16();
Mac = rr.ReadBytes(MacSize);
OriginalId = rr.ReadUInt16();
Error = rr.ReadUInt16();
OtherLen = rr.ReadUInt16();
OtherData = rr.ReadBytes(OtherLen);
}
public override string ToString()
{
DateTime dt = DateTime.UnixEpoch.AddSeconds(TimeSigned);
return $"{AlgorithmName} {dt:yyyy-MM-dd HH:mm:ss} {Fudge} {OriginalId} {Error}";
}
}