mirror of
https://github.com/bloxstraplabs/bloxstrap.git
synced 2025-04-21 10:01:27 -07:00
Mitigate "decryption operation failed" error
cant believe i only had this idea just now
This commit is contained in:
parent
cd0547664c
commit
034a513650
@ -1349,7 +1349,10 @@ namespace Bloxstrap
|
|||||||
{
|
{
|
||||||
var response = await App.HttpClient.GetAsync(packageUrl, HttpCompletionOption.ResponseHeadersRead, _cancelTokenSource.Token);
|
var response = await App.HttpClient.GetAsync(packageUrl, HttpCompletionOption.ResponseHeadersRead, _cancelTokenSource.Token);
|
||||||
await using var stream = await response.Content.ReadAsStreamAsync(_cancelTokenSource.Token);
|
await using var stream = await response.Content.ReadAsStreamAsync(_cancelTokenSource.Token);
|
||||||
await using var fileStream = new FileStream(packageLocation, FileMode.CreateNew, FileAccess.Write, FileShare.Delete);
|
await using var fileStream = new FileStream(packageLocation, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.Delete);
|
||||||
|
|
||||||
|
if (packageUrl.StartsWith("https://"))
|
||||||
|
throw new Exception("The decryption operation failed");
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
@ -1373,6 +1376,11 @@ namespace Bloxstrap
|
|||||||
UpdateProgressBar();
|
UpdateProgressBar();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fileStream.Seek(0, SeekOrigin.Begin);
|
||||||
|
|
||||||
|
if (MD5Hash.FromStream(fileStream) != package.Signature)
|
||||||
|
throw new Exception("Signature does not match!");
|
||||||
|
|
||||||
App.Logger.WriteLine(LOG_IDENT, $"Finished downloading! ({totalBytesRead} bytes total)");
|
App.Logger.WriteLine(LOG_IDENT, $"Finished downloading! ({totalBytesRead} bytes total)");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1389,6 +1397,15 @@ namespace Bloxstrap
|
|||||||
|
|
||||||
_totalDownloadedBytes -= totalBytesRead;
|
_totalDownloadedBytes -= totalBytesRead;
|
||||||
UpdateProgressBar();
|
UpdateProgressBar();
|
||||||
|
|
||||||
|
// attempt download over HTTP
|
||||||
|
// this isn't actually that unsafe - signatures were established earlier over HTTPS
|
||||||
|
// so we've already established that our signatures are legit, and that there's no MITM anyway
|
||||||
|
if (ex.Message.Contains("The decryption operation failed"))
|
||||||
|
{
|
||||||
|
App.Logger.WriteLine(LOG_IDENT, "Retrying download over HTTP...");
|
||||||
|
packageUrl = packageUrl.Replace("https://", "http://");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,25 +4,28 @@ namespace Bloxstrap.Utility
|
|||||||
{
|
{
|
||||||
public static class MD5Hash
|
public static class MD5Hash
|
||||||
{
|
{
|
||||||
public static string FromFile(string filename)
|
|
||||||
{
|
|
||||||
using (MD5 md5 = MD5.Create())
|
|
||||||
{
|
|
||||||
using (FileStream stream = File.OpenRead(filename))
|
|
||||||
{
|
|
||||||
byte[] hash = md5.ComputeHash(stream);
|
|
||||||
return BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string FromBytes(byte[] data)
|
public static string FromBytes(byte[] data)
|
||||||
{
|
{
|
||||||
using (MD5 md5 = MD5.Create())
|
using MD5 md5 = MD5.Create();
|
||||||
{
|
return Stringify(md5.ComputeHash(data));
|
||||||
byte[] hash = md5.ComputeHash(data);
|
}
|
||||||
return BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
|
|
||||||
}
|
public static string FromStream(Stream stream)
|
||||||
|
{
|
||||||
|
using MD5 md5 = MD5.Create();
|
||||||
|
return Stringify(md5.ComputeHash(stream));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string FromFile(string filename)
|
||||||
|
{
|
||||||
|
using MD5 md5 = MD5.Create();
|
||||||
|
using FileStream stream = File.OpenRead(filename);
|
||||||
|
return FromStream(stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string Stringify(byte[] hash)
|
||||||
|
{
|
||||||
|
return BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user