Написать класс С# с нужным функционалом
Нужно написать класс DownloadManager для С# c методом update(), который реализовует безопасный апдейт программы.
Пошаговый алгоритм работы метода update()
1. Загружает урл https://somewebsite.com/some/file.json, с примерно таким содержимым
{
var1: value,
var2: value,
var3: value,
groupVar: base64_json,
groupVarRSAHashHEX: HEX_hash,
groupVar2: base64_json,
groupVarRSAHashHEX2: HEX_hash,
}
2. Переменные var1, var2, var3 заносит во внутренний масив, чтоб их можно было использовать в других классах, как-то типа DownloadManager.config.var1 или типа того в других классах
3. В groupVar и groupVar находяться строки, для которых нужно сгенерировать RSA подпись и проверить, чтоб она совпадала с groupVarRSAHashHEX/groupVarRSAHashHEX2. Если не совпадает - выбросить exception.
4. Если совпадает - нужно сделать base64_decode для groupVar и groupVar2, в результате получиться json вида
{
groupId: 123
group1Var1: value,
group1Var2: value,
group1Var3: value,
xorKey: someString,
group1Files: [
[
name: 'filename',
content: 'base64_encoded_content'
],
[
name: 'filename2',
url: 'http://domain.com/files/123/123123',
"emd5": "752a10022cf379ddeff7e1044eb1fd19",
"dmd5": "96ae5abe22369d13e76ad7c760d080ed"
],
]
}
5. Переменные group1Var1, group1Var2, group1Var3 нужно также сохранить во внутреннем массиве, чтоб их можно было использовать в других классах, как-то типа DownloadManager.config.var1 или типа того в других классах
6. Дальне нужно проверить, существует ли папка bin/{groupId}/ Если существует - вызывается приватный метод check, если не существует - download
7. download сохраняет файлы в папку bin/{groupId}/
Файлы бывают двух типов - текстовые и бинарные. Текстовые содержат 2 поля name - имя файла и content - base64_content.
В content также нужно заменять подстроки вида {var1} и {group1Var1} на значения из внутреннего масива
Бинарные файлы нужно вначале скачать с url, проверить md5 скачанного файла (поле emd5), проксорить файл используя xorKey, проверить md5 полученного "дешифрованного файла" - dmd5, сохранить его в bin/{groupId}/{name}
8. Check проверяет текстовые файлы (генерирует content и проверяет с содержимым на диске) и бинарные (по полю dmd5)
код для RSA шифрования можно легко нагуглить, например https://stackoverflow.com/questions/37531044/how-do-i-decode-a-base64-pcks-8-representation-of-a-private-key-in-net