Skip to content

Commit

Permalink
Reduce type registration logic in Sha256
Browse files Browse the repository at this point in the history
  • Loading branch information
kenelin committed Aug 22, 2020
1 parent 910b56c commit 4527fc9
Show file tree
Hide file tree
Showing 4 changed files with 260 additions and 121 deletions.
36 changes: 28 additions & 8 deletions source/Htc.Vita.Core/Crypto/DefaultSha256.Async.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,25 @@ namespace Htc.Vita.Core.Crypto
public partial class DefaultSha256
{
/// <inheritdoc />
protected override Task<string> OnGenerateInBase64Async(FileInfo file, CancellationToken cancellationToken)
protected override Task<string> OnGenerateInBase64Async(
FileInfo file,
CancellationToken cancellationToken)
{
return DoGenerateInBase64Async(file, cancellationToken);
return DoGenerateInBase64Async(
file,
cancellationToken
);
}

/// <inheritdoc />
protected override Task<string> OnGenerateInHexAsync(FileInfo file, CancellationToken cancellationToken)
protected override Task<string> OnGenerateInHexAsync(
FileInfo file,
CancellationToken cancellationToken)
{
return DoGenerateInHexAsync(file, cancellationToken);
return DoGenerateInHexAsync(
file,
cancellationToken
);
}

/// <summary>
Expand All @@ -26,7 +36,9 @@ protected override Task<string> OnGenerateInHexAsync(FileInfo file, Cancellation
/// <param name="file">The file.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task&lt;System.String&gt;.</returns>
public static async Task<string> DoGenerateInBase64Async(FileInfo file, CancellationToken cancellationToken)
public static async Task<string> DoGenerateInBase64Async(
FileInfo file,
CancellationToken cancellationToken)
{
return Convert.ToBase64String(await GenerateInBytesAsync(
file,
Expand All @@ -40,23 +52,31 @@ public static async Task<string> DoGenerateInBase64Async(FileInfo file, Cancella
/// <param name="file">The file.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task&lt;System.String&gt;.</returns>
public static async Task<string> DoGenerateInHexAsync(FileInfo file, CancellationToken cancellationToken)
public static async Task<string> DoGenerateInHexAsync(
FileInfo file,
CancellationToken cancellationToken)
{
return Convert.ToHexString(await GenerateInBytesAsync(
file,
cancellationToken
).ConfigureAwait(false));
}

private static async Task<byte[]> GenerateInBytesAsync(FileInfo file, CancellationToken cancellationToken)
private static async Task<byte[]> GenerateInBytesAsync(
FileInfo file,
CancellationToken cancellationToken)
{
var buffer = new byte[BufferSizeInByte];
using (var digest = SHA256.Create())
{
using (var readStream = file.OpenRead())
{
int length;
while ((length = await readStream.ReadAsync(buffer, 0, buffer.Length, cancellationToken).ConfigureAwait(false)) > 0)
while ((length = await readStream.ReadAsync(
buffer,
0,
buffer.Length,
cancellationToken).ConfigureAwait(false)) > 0)
{
cancellationToken.ThrowIfCancellationRequested();
digest.TransformBlock(
Expand Down
35 changes: 27 additions & 8 deletions source/Htc.Vita.Core/Crypto/DefaultSha256.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,14 @@ public partial class DefaultSha256 : Sha256
private const int BufferSizeInByte = 1024 * 128;

/// <inheritdoc />
protected override string OnGenerateInBase64(FileInfo file, CancellationToken cancellationToken)
protected override string OnGenerateInBase64(
FileInfo file,
CancellationToken cancellationToken)
{
return DoGenerateInBase64(file, cancellationToken);
return DoGenerateInBase64(
file,
cancellationToken
);
}

/// <inheritdoc />
Expand All @@ -28,9 +33,14 @@ protected override string OnGenerateInBase64(string content)
}

/// <inheritdoc />
protected override string OnGenerateInHex(FileInfo file, CancellationToken cancellationToken)
protected override string OnGenerateInHex(
FileInfo file,
CancellationToken cancellationToken)
{
return DoGenerateInHex(file, cancellationToken);
return DoGenerateInHex(
file,
cancellationToken
);
}

/// <inheritdoc />
Expand All @@ -45,7 +55,9 @@ protected override string OnGenerateInHex(string content)
/// <param name="file">The file.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>System.String.</returns>
public static string DoGenerateInBase64(FileInfo file, CancellationToken cancellationToken)
public static string DoGenerateInBase64(
FileInfo file,
CancellationToken cancellationToken)
{
return Convert.ToBase64String(GenerateInBytes(
file,
Expand All @@ -72,7 +84,9 @@ public static string DoGenerateInBase64(string content)
/// <param name="file">The file.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>System.String.</returns>
public static string DoGenerateInHex(FileInfo file, CancellationToken cancellationToken)
public static string DoGenerateInHex(
FileInfo file,
CancellationToken cancellationToken)
{
return Convert.ToHexString(GenerateInBytes(
file,
Expand All @@ -93,15 +107,20 @@ public static string DoGenerateInHex(string content)
}
}

private static byte[] GenerateInBytes(FileInfo file, CancellationToken cancellationToken)
private static byte[] GenerateInBytes(
FileInfo file,
CancellationToken cancellationToken)
{
var buffer = new byte[BufferSizeInByte];
using (var digest = SHA256.Create())
{
using (var readStream = file.OpenRead())
{
int length;
while ((length = readStream.Read(buffer, 0, buffer.Length)) > 0)
while ((length = readStream.Read(
buffer,
0,
buffer.Length)) > 0)
{
cancellationToken.ThrowIfCancellationRequested();
digest.TransformBlock(
Expand Down
107 changes: 85 additions & 22 deletions source/Htc.Vita.Core/Crypto/Sha256.Async.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@ public abstract partial class Sha256
/// <returns>Task&lt;System.String&gt;.</returns>
public Task<string> GenerateInBase64Async(FileInfo file)
{
return GenerateInBase64Async(file, CancellationToken.None);
return GenerateInBase64Async(
file,
CancellationToken.None
);
}

/// <summary>
Expand All @@ -24,7 +27,9 @@ public Task<string> GenerateInBase64Async(FileInfo file)
/// <param name="file">The file.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task&lt;System.String&gt;.</returns>
public async Task<string> GenerateInBase64Async(FileInfo file, CancellationToken cancellationToken)
public async Task<string> GenerateInBase64Async(
FileInfo file,
CancellationToken cancellationToken)
{
if (file == null || !file.Exists)
{
Expand All @@ -34,15 +39,18 @@ public async Task<string> GenerateInBase64Async(FileInfo file, CancellationToken
var result = string.Empty;
try
{
result = await OnGenerateInBase64Async(file, cancellationToken).ConfigureAwait(false);
result = await OnGenerateInBase64Async(
file,
cancellationToken
).ConfigureAwait(false);
}
catch (OperationCanceledException)
{
Logger.GetInstance(typeof(Sha256)).Warn("Generating checksum in base64 in async cancelled");
}
catch (Exception e)
{
Logger.GetInstance(typeof(Sha256)).Fatal("Generating checksum in base64 in async error: " + e);
Logger.GetInstance(typeof(Sha256)).Fatal($"Generating checksum in base64 in async error: {e}");
}
return result;
}
Expand All @@ -54,7 +62,10 @@ public async Task<string> GenerateInBase64Async(FileInfo file, CancellationToken
/// <returns>Task&lt;System.String&gt;.</returns>
public Task<string> GenerateInHexAsync(FileInfo file)
{
return GenerateInHexAsync(file, CancellationToken.None);
return GenerateInHexAsync(
file,
CancellationToken.None
);
}

/// <summary>
Expand All @@ -63,7 +74,9 @@ public Task<string> GenerateInHexAsync(FileInfo file)
/// <param name="file">The file.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task&lt;System.String&gt;.</returns>
public async Task<string> GenerateInHexAsync(FileInfo file, CancellationToken cancellationToken)
public async Task<string> GenerateInHexAsync(
FileInfo file,
CancellationToken cancellationToken)
{
if (file == null || !file.Exists)
{
Expand All @@ -73,7 +86,10 @@ public async Task<string> GenerateInHexAsync(FileInfo file, CancellationToken ca
var result = string.Empty;
try
{
result = await OnGenerateInHexAsync(file, cancellationToken).ConfigureAwait(false);
result = await OnGenerateInHexAsync(
file,
cancellationToken
).ConfigureAwait(false);
}
catch (OperationCanceledException)
{
Expand All @@ -92,9 +108,15 @@ public async Task<string> GenerateInHexAsync(FileInfo file, CancellationToken ca
/// <param name="file">The file.</param>
/// <param name="checksum">The checksum.</param>
/// <returns>Task&lt;System.Boolean&gt;.</returns>
public Task<bool> ValidateInAllAsync(FileInfo file, string checksum)
public Task<bool> ValidateInAllAsync(
FileInfo file,
string checksum)
{
return ValidateInAllAsync(file, checksum, CancellationToken.None);
return ValidateInAllAsync(
file,
checksum,
CancellationToken.None
);
}

/// <summary>
Expand All @@ -104,7 +126,10 @@ public Task<bool> ValidateInAllAsync(FileInfo file, string checksum)
/// <param name="checksum">The checksum.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task&lt;System.Boolean&gt;.</returns>
public async Task<bool> ValidateInAllAsync(FileInfo file, string checksum, CancellationToken cancellationToken)
public async Task<bool> ValidateInAllAsync(
FileInfo file,
string checksum,
CancellationToken cancellationToken)
{
if (string.IsNullOrWhiteSpace(checksum))
{
Expand All @@ -113,11 +138,19 @@ public async Task<bool> ValidateInAllAsync(FileInfo file, string checksum, Cance

if (checksum.Length == Base64Length)
{
return await ValidateInBase64Async(file, checksum, cancellationToken).ConfigureAwait(false);
return await ValidateInBase64Async(
file,
checksum,
cancellationToken
).ConfigureAwait(false);
}
if (checksum.Length == HexLength)
{
return await ValidateInHexAsync(file, checksum, cancellationToken).ConfigureAwait(false);
return await ValidateInHexAsync(
file,
checksum,
cancellationToken
).ConfigureAwait(false);
}
return false;
}
Expand All @@ -128,9 +161,15 @@ public async Task<bool> ValidateInAllAsync(FileInfo file, string checksum, Cance
/// <param name="file">The file.</param>
/// <param name="checksum">The checksum.</param>
/// <returns>Task&lt;System.Boolean&gt;.</returns>
public Task<bool> ValidateInBase64Async(FileInfo file, string checksum)
public Task<bool> ValidateInBase64Async(
FileInfo file,
string checksum)
{
return ValidateInBase64Async(file, checksum, CancellationToken.None);
return ValidateInBase64Async(
file,
checksum,
CancellationToken.None
);
}

/// <summary>
Expand All @@ -140,7 +179,10 @@ public Task<bool> ValidateInBase64Async(FileInfo file, string checksum)
/// <param name="checksum">The checksum.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task&lt;System.Boolean&gt;.</returns>
public async Task<bool> ValidateInBase64Async(FileInfo file, string checksum, CancellationToken cancellationToken)
public async Task<bool> ValidateInBase64Async(
FileInfo file,
string checksum,
CancellationToken cancellationToken)
{
if (file == null || !file.Exists || string.IsNullOrWhiteSpace(checksum))
{
Expand All @@ -150,7 +192,10 @@ public async Task<bool> ValidateInBase64Async(FileInfo file, string checksum, Ca
var result = false;
try
{
result = checksum.Equals(await OnGenerateInBase64Async(file, cancellationToken).ConfigureAwait(false));
result = checksum.Equals(await OnGenerateInBase64Async(
file,
cancellationToken
).ConfigureAwait(false));
}
catch (OperationCanceledException)
{
Expand All @@ -169,9 +214,15 @@ public async Task<bool> ValidateInBase64Async(FileInfo file, string checksum, Ca
/// <param name="file">The file.</param>
/// <param name="checksum">The checksum.</param>
/// <returns>Task&lt;System.Boolean&gt;.</returns>
public Task<bool> ValidateInHexAsync(FileInfo file, string checksum)
public Task<bool> ValidateInHexAsync(
FileInfo file,
string checksum)
{
return ValidateInHexAsync(file, checksum, CancellationToken.None);
return ValidateInHexAsync(
file,
checksum,
CancellationToken.None
);
}

/// <summary>
Expand All @@ -181,7 +232,10 @@ public Task<bool> ValidateInHexAsync(FileInfo file, string checksum)
/// <param name="checksum">The checksum.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task&lt;System.Boolean&gt;.</returns>
public async Task<bool> ValidateInHexAsync(FileInfo file, string checksum, CancellationToken cancellationToken)
public async Task<bool> ValidateInHexAsync(
FileInfo file,
string checksum,
CancellationToken cancellationToken)
{
if (file == null || !file.Exists || string.IsNullOrWhiteSpace(checksum))
{
Expand All @@ -191,7 +245,10 @@ public async Task<bool> ValidateInHexAsync(FileInfo file, string checksum, Cance
var result = false;
try
{
result = checksum.ToLowerInvariant().Equals(await OnGenerateInHexAsync(file, cancellationToken).ConfigureAwait(false));
result = checksum.ToLowerInvariant().Equals(await OnGenerateInHexAsync(
file,
cancellationToken
).ConfigureAwait(false));
}
catch (OperationCanceledException)
{
Expand All @@ -210,13 +267,19 @@ public async Task<bool> ValidateInHexAsync(FileInfo file, string checksum, Cance
/// <param name="file">The file.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task&lt;System.String&gt;.</returns>
protected abstract Task<string> OnGenerateInBase64Async(FileInfo file, CancellationToken cancellationToken);
protected abstract Task<string> OnGenerateInBase64Async(
FileInfo file,
CancellationToken cancellationToken
);
/// <summary>
/// Called when generating the checksum in hexadecimal form asynchronously.
/// </summary>
/// <param name="file">The file.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task&lt;System.String&gt;.</returns>
protected abstract Task<string> OnGenerateInHexAsync(FileInfo file, CancellationToken cancellationToken);
protected abstract Task<string> OnGenerateInHexAsync(
FileInfo file,
CancellationToken cancellationToken
);
}
}
Loading

0 comments on commit 4527fc9

Please sign in to comment.