From: Matthew Endsley Date: Wed, 3 Feb 2021 22:49:12 +0000 (-0800) Subject: Encode each certificate size in Certficate message X-Git-Tag: 1.0.0~20^2~1 X-Git-Url: https://git.deb.at/?a=commitdiff_plain;h=c5775d791dd886bae3c02ece90d2c8bb2ecace75;p=rhonda%2Fimpostor.hazel.git Encode each certificate size in Certficate message --- diff --git a/Hazel/Dtls/Handshake.cs b/Hazel/Dtls/Handshake.cs index 649e716..d8bde25 100644 --- a/Hazel/Dtls/Handshake.cs +++ b/Hazel/Dtls/Handshake.cs @@ -589,11 +589,13 @@ namespace Hazel.Dtls public static ByteSpan Encode(X509Certificate2 certificate) { ByteSpan certData = certificate.GetRawCertData(); - int totalSize = certData.Length + 3; + int totalSize = certData.Length + 3 + 3; ByteSpan result = new byte[totalSize]; ByteSpan writer = result; + writer.WriteBigEndian24((uint)certData.Length + 3); + writer = writer.Slice(3); writer.WriteBigEndian24((uint)certData.Length); writer = writer.Slice(3); @@ -608,7 +610,7 @@ namespace Hazel.Dtls public static bool Parse(out X509Certificate2 certificate, ByteSpan span) { certificate = null; - if (span.Length < 3) + if (span.Length < 6) { return false; } @@ -621,7 +623,14 @@ namespace Hazel.Dtls return false; } - byte[] rawData = new byte[totalSize]; + uint certificateSize = span.ReadBigEndian24(); + span = span.Slice(3); + if (span.Length < certificateSize) + { + return false; + } + + byte[] rawData = new byte[certificateSize]; span.CopyTo(rawData, 0); try {