Skip to content

Commit df3f00c

Browse files
committed
Use Stream.ReadExactly for deterministic readings
1 parent 2cc6a1a commit df3f00c

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

src/Kryptor/Generators/UnixRandom.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,13 @@ public void Generate(byte[] buffer)
2727
{
2828
ProgressChanged?.Invoke(this, -1);
2929

30-
using (FileStream file = File.OpenRead("/dev/random"))
30+
using (FileStream file = File.OpenRead("/dev/urandom"))
3131
{
32+
#if NET8_0_OR_GREATER
33+
file.ReadExactly(buffer);
34+
#else
3235
file.Read(buffer, 0, buffer.Length);
36+
#endif
3337
}
3438

3539
ProgressChanged?.Invoke(this, 100);

src/Kryptor/Header.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,11 @@ public static T ReadHeader<T>(Stream stream)
128128
}
129129

130130
byte[] buffer = new byte[headerSize];
131+
#if NET8_0_OR_GREATER
132+
stream.ReadExactly(buffer, 0, headerSize);
133+
#else
131134
stream.Read(buffer, 0, headerSize);
135+
#endif
132136

133137
T header;
134138
try
@@ -152,6 +156,7 @@ public static T ReadHeader<T>(Stream stream)
152156
/// <returns>
153157
/// A new instance of the <see cref="Header"/> class.
154158
/// </returns>
159+
[System.Diagnostics.CodeAnalysis.SuppressMessage("Reliability", "CA2022:Avoid inexact read with 'Stream.Read'", Justification = "This behavior is intended")]
155160
public static T ReadHeaderClassic<T>(Stream stream)
156161
where T : Header, new()
157162
{
@@ -209,7 +214,11 @@ public static T ReadHeaderClassic<T>(Stream stream)
209214
stream.Seek(startPos, SeekOrigin.Begin);
210215

211216
byte[] dataBuffer = new byte[endPos - startPos];
217+
#if NET8_0_OR_GREATER
218+
stream.ReadExactly(dataBuffer);
219+
#else
212220
stream.Read(dataBuffer, 0, dataBuffer.Length);
221+
#endif
213222

214223
T header = ReadHeaderInternal<T>(dataBuffer.Base64DecodeToString());
215224

src/Kryptor/Helpers/AsyncCompat.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,11 +130,19 @@ public static async Task ReadAsync(Stream stream, byte[] buffer, int offset, int
130130
{
131131
if (IsAsyncCompatible)
132132
{
133+
#if NET8_0_OR_GREATER
134+
await stream.ReadExactlyAsync(buffer, offset, count, cancellationToken);
135+
#else
133136
await stream.ReadAsync(buffer, offset, count, cancellationToken);
137+
#endif
134138
}
135139
else
136140
{
141+
#if NET8_0_OR_GREATER
142+
stream.ReadExactly(buffer, offset, count);
143+
#else
137144
stream.Read(buffer, offset, count);
145+
#endif
138146
}
139147
}
140148

0 commit comments

Comments
 (0)