From 5f08569f4a2565c0c7a47255428cfe2204467c45 Mon Sep 17 00:00:00 2001 From: Lukas Kurz Date: Sun, 26 Jan 2025 19:01:02 +0100 Subject: [PATCH] Remove `HasPadding` check (#190) Rely on paylod size in encrypted payload --- .../Encryption/CdpCryptor.cs | 22 ++----------------- .../CryptorTest.cs | 2 +- 2 files changed, 3 insertions(+), 21 deletions(-) diff --git a/lib/ShortDev.Microsoft.ConnectedDevices/Encryption/CdpCryptor.cs b/lib/ShortDev.Microsoft.ConnectedDevices/Encryption/CdpCryptor.cs index e52df167..61ffedae 100644 --- a/lib/ShortDev.Microsoft.ConnectedDevices/Encryption/CdpCryptor.cs +++ b/lib/ShortDev.Microsoft.ConnectedDevices/Encryption/CdpCryptor.cs @@ -1,7 +1,6 @@ using ShortDev.Microsoft.ConnectedDevices.Exceptions; using ShortDev.Microsoft.ConnectedDevices.Messages; using ShortDev.Microsoft.ConnectedDevices.Transports; -using System.Buffers; using System.Buffers.Binary; using System.Diagnostics; using System.Security.Cryptography; @@ -59,10 +58,8 @@ public ReadOnlyMemory DecryptMessage(CommonHeader header, ReadOnlySpan payload, ReadOnlySpan hmac) @@ -157,10 +154,6 @@ public void Read(ref EndianReader reader, CommonHeader header) var decryptedPayload = DecryptMessage(header, encryptedPayload, hmac); reader = new(Endianness.BigEndian, decryptedPayload.Span); - - var payloadLength = reader.ReadUInt32(); - if (payloadLength != decryptedPayload.Length - sizeof(Int32)) - throw new CdpSecurityException($"Expected payload to be {payloadLength} bytes long"); } public void Dispose() @@ -169,15 +162,4 @@ public void Dispose() _aes.Dispose(); _hmac.Dispose(); } - - static bool HasPadding(ReadOnlySpan buffer, out byte paddingSize) - { - paddingSize = buffer[^1]; - for (int i = buffer.Length - paddingSize; i < buffer.Length; i++) - { - if (paddingSize != buffer[i]) - return false; - } - return true; - } } \ No newline at end of file diff --git a/tests/ShortDev.Microsoft.ConnectedDevices.Test/CryptorTest.cs b/tests/ShortDev.Microsoft.ConnectedDevices.Test/CryptorTest.cs index bdad91b6..851dc74f 100644 --- a/tests/ShortDev.Microsoft.ConnectedDevices.Test/CryptorTest.cs +++ b/tests/ShortDev.Microsoft.ConnectedDevices.Test/CryptorTest.cs @@ -32,7 +32,7 @@ public void Decrypt_ShouldYieldSameAsEncrypt() var decrypted = cryptor.DecryptMessage(header, encryptedPayload, hmac).Span; - Assert.True(payload.SequenceEqual(decrypted[sizeof(uint)..])); + Assert.True(payload.SequenceEqual(decrypted)); } sealed class FragmentSenderSpy : IFragmentSender